Как работает этот скрипт 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), вычислил сообщение, которое нужно отправить с помощью обратного инжиниринга.