以下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范围中的消息,以及在发出这两个消息时究竟发生了什么?非常感谢您的解释。
答案 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论坛)找出了通过逆向工程发送的消息。