这个AHK脚本是如何工作的?

时间:2012-09-16 17:05:25

标签: autohotkey windows-messages

以下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 个答案:

答案 0 :(得分:1)

右键单击某些内容时,将显示上下文菜单。也可以通过按键盘上的appskey按钮显示上下文菜单。当您按下它时,Windows会向应用程序发送一条消息,即WM_APP消息。大多数应用程序通过显示上下文菜单来响对于托盘图标,响应与右键单击的响应相同。

答案 1 :(得分:1)

根据MSDN(http://msdn.microsoft.com/en-us/library/windows/desktop/ms644927(v=vs.85).aspx#system_defined

  

如果您的应用程序标记为版本4.0,则可以使用0x8000(WM_APP)到0xBFFF范围内的消息标识符值来处理私人消息。

因此,这表明0x8001是utorrent为消息选择的标识符。 0x204和0x205值分别用于右键单击向下和向上事件。我的猜测是,此代码旨在模拟Windows托盘中右键单击utorrent的图标。

此外,如果您使用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

答案 2 :(得分:0)

似乎WM_APP + 1消息号是在应用程序开发中做出的选择,在本例中为utorrent。可能是另一条消息#,没有什么神奇的。我相信我提供的代码(来自AHK论坛)找出了通过逆向工程发送的消息。