Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Управление пунктами Диспетчера задач - taskmgr (перезагрузка)

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

Аватара для semiono

Ветеран


Сообщения: 830
Благодарности: 33

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
#include <WindowsConstants.au3>
#include <SendMessage.au3>
#include <GuiMenu.au3>

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() у меня не работает, проблемма такая. Только работает через графич. кнопки...

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

-------
Полезное сообщение


Отправлено: 20:56, 29-01-2009

 

Пользователь


Сообщения: 67
Благодарности: 13

Профиль | Отправить PM | Цитировать


semiono, а если так:
Код: Выделить весь код
Run(@ComSpec & " /c " & 'shutdown -r -t 0 -f', "", @SW_HIDE)

Отправлено: 23:27, 29-01-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для semiono

Ветеран


Сообщения: 830
Благодарности: 33

Профиль | Отправить PM | Цитировать


Нет! Я же говорю, утилита shutdown.exe тоже вешает машину, из-за одного упрямого процесса звуковой карты, который ничем не свалить! Перезагружается только через кнопки пуск или taskmgr.
Кстати, что такое " /c " , я так же знаю есть ещё cmd.exe /k но в чём их разница?
И ещё, shutdown -r -t 0 -f не совсем правильно, надо писать так -t 00 потомучто в некоторых особых случаях это может не сработать,
но я не помню уж в каких...

-------
Полезное сообщение


Отправлено: 00:25, 30-01-2009 | #3


Аватара для Котяра

Ветеран


Сообщения: 2907
Благодарности: 331

Профиль | Отправить PM | Цитировать


Цитата semiono:
Кстати, что такое " /c " , я так же знаю есть ещё cmd.exe /k но в чём их разница »
Параметр /c закрывает cmd.exe после запуска команды.
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:32, 30-01-2009 | #4


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата semiono:
Кстати, я заметил taskmgr.exe изменяет пункты меню взависимости от активных табов »
Точно!
Тогда так:

Код: Выделить весь код
#include <WindowsConstants.au3>
#include <SendMessage.au3>
#include <GuiMenu.au3>

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 и раскомментируй последнюю строчку.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:14, 31-01-2009 | #5


Аватара для semiono

Ветеран


Сообщения: 830
Благодарности: 33

Профиль | Отправить PM | Цитировать


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

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


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

-------
Полезное сообщение


Последний раз редактировалось semiono, 31-01-2009 в 16:50.


Отправлено: 16:34, 31-01-2009 | #6


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


semiono,
Цитата:
SysTabControl321 это опечатка наверное?
Нет, это так и должно быть.

Цитата:
может тут что прояснится?
Раньше надо было это показывать. Там ведь явно показан ID элемента (4005 для «&Restart»):

Код: Выделить весь код
#include <WindowsConstants.au3>
#include <SendMessage.au3>

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)

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 23:22, 31-01-2009 | #7


Аватара для semiono

Ветеран


Сообщения: 830
Благодарности: 33

Профиль | Отправить PM | Цитировать


ааабалдеть!
кажись перезагружает! после того как я надеяться уже перестал.
Цитата Creat0R:
Раньше надо было это показывать. »
значится 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)
хотя цикл организовать было бы красивее?

-------
Полезное сообщение


Отправлено: 00:59, 01-02-2009 | #8


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата semiono:
просто делаем серию комманд, хотябы три или две »
Зачем? Может так?

Код: Выделить весь код
#include <WindowsConstants.au3>
#include <SendMessage.au3>

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)

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 03:16, 01-02-2009 | #9


Аватара для semiono

Ветеран


Сообщения: 830
Благодарности: 33

Профиль | Отправить PM | Цитировать


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


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

-------
Полезное сообщение


Отправлено: 14:26, 01-02-2009 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Управление пунктами Диспетчера задач - taskmgr (перезагрузка)

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - [решено] Как сделать активным пункт вызова Диспетчера задач в контекстном меню Панели задач? iron felix Microsoft Windows 2000/XP 3 29-11-2013 07:43
Разное - [решено] при открытии Диспетчера задач начинается чехарда с процессами Konsta Microsoft Windows Vista 4 20-02-2009 16:04
Службы - [решено] Запуск диспетчера задач из командной строки hrm Microsoft Windows 2000/XP 2 26-08-2008 17:08
[решено] переназначение клавиш для диспетчера задач alexandri Microsoft Windows 2000/XP 5 27-04-2007 11:20




 
Переход