【问题标题】:How does this AHK script work?这个 AHK 脚本是如何工作的?
【发布时间】:2012-09-16 17:05:25
【问题描述】:

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

【问题讨论】:

  • 抱歉将我的问题附加到这个问题上。出于某种原因,它被关闭为题外话,但我认为与这个非常相似:stackoverflow.com/questions/12654588/… 如果有人有建议,我将不胜感激。

标签: autohotkey windows-messages


【解决方案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

【讨论】:

  • 我删除了我自己答案的标记并选择了你的答案,因为我不喜欢回答我自己的问题。将测试您的简化建议并报告回来。谢谢。
【解决方案2】:

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

【讨论】:

  • 谢谢。我通过将 PostMessage 更改为仅发送 WM_APP(不是 +1)并删除鼠标向上/向下参数来测试您的回复,但应用程序没有通过显示上下文菜单来响应。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-08
    • 1970-01-01
    • 2018-11-07
    • 2021-07-06
    • 1970-01-01
    • 2021-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多