使用 AutoHotKey 右键单击 Windows 10 中的托盘图标 [英] Right Click on Tray Icon in Windows 10 with AutoHotKey
问题描述
在 Windows 7 中,我有一个 AutoHotKey 脚本,它会自动右键单击托盘图标.
In Windows 7, I had an AutoHotKey script that would automatically Right-Click on a tray icon.
#Include %A_Scriptdir%TrayIcon.ahk
TrayIcon_Button("CCC.exe", "R")
使用了来自 FanaticGuru 的 TrayIcon.ahk 库发布.
这在 Windows 7 上运行良好,但在 Windows 10 上不再有效.
This worked just fine on Windows 7, but no longer works on Windows 10.
有没有办法在 Windows 10 上的 AutoHotKey 脚本中右键单击 TrayIcon?
Is there a way to right click on a TrayIcon in an AutoHotKey script on Windows 10?
这是库中的 TrayIcon_Button 函数.我没有发布整个图书馆,因为它很长.
Here is the TrayIcon_Button function from the library. I refrained from posting the entire library since it is fairly long.
; ----------------------------------------------------------------------------------------------------------------------
; Function .....: TrayIcon_Button
; Description ..: Simulate mouse button click on a tray icon.
; Parameters ...: sExeName - Executable Process Name of tray icon.
; ..............: sButton - Mouse button to simulate (L, M, R).
; ..............: bDouble - True to double click, false to single click.
; ..............: index - Index of tray icon to click if more than one match.
; ----------------------------------------------------------------------------------------------------------------------
TrayIcon_Button(sExeName, sButton := "L", bDouble := false, index := 1)
{
Setting_A_DetectHiddenWindows := A_DetectHiddenWindows
DetectHiddenWindows, On
WM_MOUSEMOVE = 0x0200
WM_LBUTTONDOWN = 0x0201
WM_LBUTTONUP = 0x0202
WM_LBUTTONDBLCLK = 0x0203
WM_RBUTTONDOWN = 0x0204
WM_RBUTTONUP = 0x0205
WM_RBUTTONDBLCLK = 0x0206
WM_MBUTTONDOWN = 0x0207
WM_MBUTTONUP = 0x0208
WM_MBUTTONDBLCLK = 0x0209
sButton := "WM_" sButton "BUTTON"
oIcons := {}
oIcons := TrayIcon_GetInfo(sExeName)
msgID := oIcons[index].msgID
uID := oIcons[index].uID
hWnd := oIcons[index].hWnd
if bDouble
PostMessage, msgID, uID, %sButton%DBLCLK, , ahk_id %hWnd%
else
{
PostMessage, msgID, uID, %sButton%DOWN, , ahk_id %hWnd%
PostMessage, msgID, uID, %sButton%UP, , ahk_id %hWnd%
}
DetectHiddenWindows, %Setting_A_DetectHiddenWindows%
return
}
推荐答案
我在 Windows 10 上对其进行了测试.它不适用于隐藏在溢出窗口下的图标,尽管它对可见图标工作得很好.
I tested it on Windows 10. It was not working for the icons hidden under overflow window, although it was working perfectly for the visible icons.
更新 TrayIcon_GetInfo()
中的这三行以获得快速解决方案
Update these three lines in TrayIcon_GetInfo()
for a quick solution
For key, sTray in ["Shell_TrayWnd","NotifyIconOverflowWindow"]
SendMessage, 0x418, 0, 0, ToolbarWindow32%idxTB%, ahk_class %sTray% ; TB_BUTTONCOUNT
SendMessage, 0x417, A_Index - 1, pRB, ToolbarWindow32%idxTB%, ahk_class %sTray% ; TB_GETBUTTON
替换为
For key, sTray in ["NotifyIconOverflowWindow", "Shell_TrayWnd"]
SendMessage, 0x418, 0, 0, ToolbarWindow32%key%, ahk_class %sTray% ; TB_BUTTONCOUNT
SendMessage, 0x417, A_Index - 1, pRB, ToolbarWindow32%key%, ahk_class %sTray% ; TB_GETBUTTON
更新:对于升级到 Windows 1607 的优秀用户来说,它又坏了:)
Update: To awesome users who have upgraded to Windows 1607, it is broken again :)
要使其在 Windows 10 1607 中再次运行,请首先遵循最后的规则.之后将这些替换为:
To make it work again in Windows 10 1607, first follow those last rules. After that replace these with:
SendMessage, 0x418, 0, 0, ToolbarWindow32%key%, ahk_class %sTray% ; TB_BUTTONCOUNT
SendMessage, 0x417, A_Index - 1, pRB, ToolbarWindow32%key%, ahk_class %sTray% ; TB_GETBUTTON
与
if ("Shell_TrayWnd" == sTray) {
SendMessage, 0x418, 0, 0, ToolbarWindow32%idxTB%, ahk_class %sTray% ; TB_BUTTONCOUNT
} else if ("NotifyIconOverflowWindow" == sTray) {
SendMessage, 0x418, 0, 0, ToolbarWindow32%key%, ahk_class %sTray% ; TB_BUTTONCOUNT
}
if ("Shell_TrayWnd" == sTray) {
SendMessage, 0x417, A_Index - 1, pRB, ToolbarWindow32%idxTB%, ahk_class %sTray% ; TB_GETBUTTON
} else if ("NotifyIconOverflowWindow" == sTray) {
SendMessage, 0x417, A_Index - 1, pRB, ToolbarWindow32%key%, ahk_class %sTray% ; TB_GETBUTTON
}
注意:我认为这些更改中的任何一个都不向后兼容.
Note: I don't think any of these changes are backward compatible.
这篇关于使用 AutoHotKey 右键单击 Windows 10 中的托盘图标的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!