2012-09-16 39 views
2

以下AHK脚本会自动带来了,当你在uTorrent的图标在系统任务栏托盘右键单击你通常会得到菜单:这个AHK脚本如何工作?

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

道歉捎带我的问题在这一个。这是由于某种原因关闭作为题外话,但我觉得非常类似于这个:http://stackoverflow.com/questions/12654588/disabling-windows-7s-hotkey-to-move-window-to-other-monitor如果有人有任何建议,我会非常感激。 –

回答

1

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

如果你的应用程序标记4.0版本,可以为私人信息通过0xBFFF使用范围为0x8000(WM_APP)消息识别符值。

所以这表明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 
+0

我为自己的答案删除了标记,并选择了您的标记,因为我不喜欢回答自己的问题。将测试您的简化建议并回报。谢谢。 – Sabuncu

1

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

+0

谢谢。我通过将PostMessage更改为仅发送WM_APP(不是+1),并删除鼠标上/下参数来测试您的答复,但应用程序未响应显示上下文菜单。 – Sabuncu

0

似乎WM_APP + 1消息号是在应用程序的开发中做出的选择,在这种情况下是utorrent。可能是另一个消息#,没有什么魔力。我相信我提交的代码(来自AHK论坛)通过逆向工程发现了要发送的消息。