[решено] Управление пунктами Диспетчера задач - taskmgr (перезагрузка)

Аватара пользователя
semiono

[решено] Управление пунктами Диспетчера задач - taskmgr (перезагрузка)

Сообщение semiono »

Код:

Код: Выделить всё

#include 
#include 
#include 
Run("taskmgr.exe")
WinWait("[CLASS:#32770;REGEXPTITLE:.*Windows.*]", "", 5)
$hTskMgr = WinGetHandle("[CLASS:#32770;REGEXPTITLE:.*Windows.*]")
If Not WinExists($hTskMgr) Then Exit
$hMenu = _GUICtrlMenu_GetMenu($hTskMgr)
$hSubMenu = _GUICtrlMenu_GetItemSubMenu($hMenu, -1) ;change to 3th submenu (zero-based), now it will only show the "About" window.
$iItemID = _GUICtrlMenu_GetItemID($hSubMenu, 3) ;2 = Shutdown, 3 = Restart (2 and 3 it's zero-based item from the top of menu)
_SendMessage($hTskMgr, $WM_COMMAND, $iItemID, 0)

не работает! Изображение



Кстати, я заметил taskmgr.exe изменяет пункты меню взависимости от активных табов



Постоянными являются File|Options|View| далее если активный первый таб Applications то следуют Windows|Shut Down|Help

Ежели активный таб Processes второй по счёту или любой другой за ним, то пункт Windows в этой последовательности отсутствует!



Список Shut Down таков: Stand By|Hibernate|Turn Off|Restart|Log Off Semiono|Lock Computer Win Key+L



Я вот думаю может там специально секьюрность встроенна и автоитом не возможно перезагрузить комп?

Хочу напомнить, что shutdown() у меня не работает, проблемма такая. Только работает через графич. кнопки...



... я менял номера в скрипте, хотя методом тыка, вроде не получается!
Аватара пользователя
266903582

Re: [решено] Управление пунктами Диспетчера задач - taskmgr (перезагрузка)

Сообщение 266903582 »

semiono, а если так:

Код:

Код: Выделить всё

Run(@ComSpec & " /c " & 'shutdown -r -t 0 -f', "", @SW_HIDE)
Аватара пользователя
semiono

Re: [решено] Управление пунктами Диспетчера задач - taskmgr (перезагрузка)

Сообщение semiono »

Нет! Я же говорю, утилита shutdown.exe тоже вешает машину, из-за одного упрямого процесса звуковой карты, который ничем не свалить! Перезагружается только через кнопки пуск или taskmgr.

Кстати, что такое " /c " , я так же знаю есть ещё cmd.exe /k но в чём их разница?

И ещё, shutdown -r -t 0 -f не совсем правильно, надо писать так -t 00 потомучто в некоторых особых случаях это может не сработать,

но я не помню уж в каких...
Аватара пользователя
Котяра

Re: [решено] Управление пунктами Диспетчера задач - taskmgr (перезагрузка)

Сообщение Котяра »

Цитата semiono:



Кстати, что такое " /c " , я так же знаю есть ещё cmd.exe /k но в чём их разница
[решено] Управление пунктами Диспетчера задач - taskmgr (перезагрузка)




Параметр /c закрывает cmd.exe после запуска команды.
Аватара пользователя
Creat0R

Re: [решено] Управление пунктами Диспетчера задач - taskmgr (перезагрузка)

Сообщение Creat0R »

Цитата semiono:



Кстати, я заметил taskmgr.exe изменяет пункты меню взависимости от активных табов
[решено] Управление пунктами Диспетчера задач - taskmgr (перезагрузка)




Точно!

Тогда так:





Код:

Код: Выделить всё

#include 
#include 
#include 
Run("taskmgr.exe")
WinWait("[CLASS:#32770;REGEXPTITLE:.*Windows.*]", "", 5)
$hTskMgr = WinGetHandle("[CLASS:#32770;REGEXPTITLE:.*Windows.*]")
If Not WinExists($hTskMgr) Then Exit 1
$nCurrentTab = ControlCommand($hTskMgr, "", "SysTabControl321", "CurrentTab")
$nSubMenu_Item = 3
If $nCurrentTab = 1 Then $nSubMenu_Item += 1
$hMenu = _GUICtrlMenu_GetMenu($hTskMgr)
;Theese two is to activate the menu, strange bug, but GetItemSubMenu fails if the menu was not used (clicked)
ControlSend($hTskMgr, "", $hMenu, "!_")
ControlClick($hTskMgr, "", "SysTabControl321")
$hSubMenu = _GUICtrlMenu_GetItemSubMenu($hMenu, $nSubMenu_Item)
;2 = Shutdown, 3 = Restart (2 and 3 it's zero-based item from the top of menu)
$iItemID = _GUICtrlMenu_GetItemID($hSubMenu, 3)
ConsoleWrite(_GUICtrlMenu_GetItemText($hSubMenu, $iItemID, 0))
;_SendMessage($hTskMgr, $WM_COMMAND, $iItemID, 0)

Если в консоли выводится нужный текст, то просто удали строчку с ConsoleWrite и раскомментируй последнюю строчку.
Аватара пользователя
semiono

Re: [решено] Управление пунктами Диспетчера задач - taskmgr (перезагрузка)

Сообщение semiono »

не работает Изображение

я даже explorer.exe установил на место думал может в нём причина, но толку не было



SysTabControl321 это опечатка наверное? может так SysTabControl32 ?





может тут что прояснится?
Аватара пользователя
Creat0R

Re: [решено] Управление пунктами Диспетчера задач - taskmgr (перезагрузка)

Сообщение Creat0R »

semiono,
Цитата:



SysTabControl321 это опечатка наверное?



Нет, это так и должно быть.




Цитата:



может тут что прояснится?



Раньше надо было это показывать. Там ведь явно показан ID элемента (4005 для «&Restart»):





Код:

Код: Выделить всё

#include 
#include 
Run("taskmgr.exe")
WinWait("[CLASS:#32770;REGEXPTITLE:.*Windows.*]", "", 5)
$hTskMgr = WinGetHandle("[CLASS:#32770;REGEXPTITLE:.*Windows.*]")
If Not WinExists($hTskMgr) Then Exit 1
_SendMessage($hTskMgr, $WM_COMMAND, 4005, 0)
Аватара пользователя
semiono

Re: [решено] Управление пунктами Диспетчера задач - taskmgr (перезагрузка)

Сообщение semiono »

ааабалдеть!

кажись перезагружает! после того как я надеяться уже перестал.


Цитата Creat0R:



Раньше надо было это показывать.
[решено] Управление пунктами Диспетчера задач - taskmgr (перезагрузка)




значится Info Tool не всё видит? хотя мне и там это не очень очевидно было Изображение



Ещё такое дело, у меня система иногда плохо перезагружается, как бы со второго только нажатия.

Вот сейчас работу скрипта прервал и смог остановить рестарт. Потому-что всё как бы закрылось,

но диспечер завис немного. У меня так часто бывает, когда инсталлеры или ещё что либо без юзера

пытаются запустить рестарт... Вообщем, я теперь думаю как бы усилить этот скрипт?

Наверное подойдёт даже двукратное нажатие Shut Down, потому как я всегда так и делаю

вручную. Но зато taskmgr обязательно перезагрузит в отличае от shutdown.exe с которым

у меня траблы.



Попробую зделать какойнибудь loop
из нажатий на меню если ума хватит код осилить



~

имхо - работает!


просто делаем серию комманд, хотябы три или две



Код:

Код: Выделить всё

_SendMessage($hTskMgr, $WM_COMMAND, 4005, 0)
_SendMessage($hTskMgr, $WM_COMMAND, 4005, 0)
_SendMessage($hTskMgr, $WM_COMMAND, 4005, 0)

хотя цикл организовать было бы красивее?
Аватара пользователя
Creat0R

Re: [решено] Управление пунктами Диспетчера задач - taskmgr (перезагрузка)

Сообщение Creat0R »

Цитата semiono:



просто делаем серию комманд, хотябы три или две
[решено] Управление пунктами Диспетчера задач - taskmgr (перезагрузка)




Зачем? Может так?





Код:

Код: Выделить всё

#include 
#include 
Run("taskmgr.exe")
WinWait("[CLASS:#32770;REGEXPTITLE:.*Windows.*]", "", 5)
$hTskMgr = WinGetHandle("[CLASS:#32770;REGEXPTITLE:.*Windows.*]")
If Not WinExists($hTskMgr) Then Exit 1
ControlSend($hTskMgr, "", "", "!_")
ControlClick($hTskMgr, "", "SysTabControl321")
_SendMessage($hTskMgr, $WM_COMMAND, 4005, 0)
Аватара пользователя
semiono

Re: [решено] Управление пунктами Диспетчера задач - taskmgr (перезагрузка)

Сообщение semiono »

Ну вот, теперь не работает. Всмысле всё "падает", а диспетчер ждёт ещё одно "китайское предупреждение".

Причём я не вижу где здесь цикл? Одним кликом не срубишь! Мой код получше-то будет ;-

Изображение



или это '!_' повтор значит? но не сработало, может он в случае успешного одного клика перестаёт далее жать?
Ответить

Вернуться в «AutoIt»