Как работает этот скрипт AHK?

Следующий скрипт AHK автоматически вызывает меню, которое вы обычно получаете, если щелкнуть правой кнопкой мыши значок uTorrent на панели задач системной панели задач:

DetectHiddenWindows, On
Process, Exist, utorrent.exe
WinGet, W, List, ahk_pid %ErrorLevel%
Loop %W%
 {
 WinGetClass, Class, % "ahk_id" W%A_Index%
 If InStr( Class, "µTorrent" ) {
   hWnd := W%A_Index%
   Break
 }}
PostMessage, 0x8001, 0,0x204,, ahk_id %hWnd% ; Right Click down
PostMessage, 0x8001, 0,0x205,, ahk_id %hWnd% ; Right Click Up

Я понимаю большую часть этого, кроме последних двух строк. 0x8001 - это WM_APP+1. Почему используется сообщение в диапазоне WM_APP и что именно происходит при выдаче этих двух сообщений? Большое спасибо за объяснение.

3 ответа

Решение

Согласно MSDN ( http://msdn.microsoft.com/en-us/library/windows/desktop/ms644927(v=vs.85).aspx)

Если ваше приложение помечено как версия 4.0, вы можете использовать значения идентификатора сообщения в диапазоне от 0x8000 (WM_APP) до 0xBFFF для личных сообщений.

Таким образом, это указывает на то, что 0x8001 - это идентификатор, который utorrent выбрал для сообщения. Значения 0x204 и 0x205 предназначены для событий правого щелчка вниз и вверх соответственно. Я предполагаю, что этот код предназначен для имитации щелчка правой кнопкой мыши по иконке пользователя в трее Windows.

Кроме того, если вы используете Autohotkey_L, код, вероятно, можно упростить до трех строк и выполнить то же самое:

DetectHiddenWindows, On
PostMessage, 0x8001, 0,0x204,, ahk_exe utorrent.exe ahk_class µTorrent ; Right Click down
PostMessage, 0x8001, 0,0x205,, ahk_exe utorrent.exe ahk_class µTorrent ; Right Click Up

Когда вы щелкаете правой кнопкой мыши по чему-либо, отображается контекстное меню. Контекстное меню также можно открыть, нажав кнопку приложения на клавиатуре. Когда вы нажимаете его, Windows отправляет приложению сообщение, то есть сообщение WM_APP. Большинство приложений отвечают, показывая контекстное меню. В случае значка на панели задач ответ совпадает с ответом на щелчок правой кнопкой мыши.

Похоже, номер сообщения WM_APP+1 является выбором, сделанным при разработке приложения, в данном случае utorrent. Могло быть другое сообщение №, ничего волшебного. Я полагаю, что код, который я представил (который взят с форумов AHK), вычислил сообщение, которое нужно отправить с помощью обратного инжиниринга.

Другие вопросы по тегам