2

以下 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 范围内的消息,发出这两个消息时究竟发生了什么?非常感谢您的解释。

4

3 回答 3

1

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

于 2012-09-17T03:48:48.350 回答
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 值分别用于 Right-Click Down 和 Up 事件。我的猜测是,此代码旨在模拟 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
于 2012-09-27T15:15:17.510 回答
0

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

于 2012-09-18T19:40:43.350 回答