脚本反复启动、退出或异常中止以后,Windows 任务栏右下角有时会留下已经失效的托盘图标。鼠标移动过去,残余图标才会消失。这个现象不影响系统运行,但会让托盘区域看起来很乱。
这篇保留一个 TrayRefresh() 小函数:它遍历任务栏和托盘溢出区域,模拟鼠标移动消息,让系统主动刷新无效图标。适合放在托盘脚本、工具启动器或批量关闭脚本的收尾位置。
它适合什么时候调用
- 开发托盘脚本时频繁重载,右下角容易堆积残余图标。
- 批量退出多个常驻工具以后,想顺手清理托盘显示。
- 自己的脚本启动器需要在任务结束后做一次界面整理。
使用时注意
- 它只是刷新托盘显示,不会结束进程,也不会删除真实图标。
- 函数通过任务栏控件名和鼠标移动消息工作,不同 Windows 版本要实际测试。
- 不需要高频循环调用。脚本重载、退出或手动触发时执行一次就够了。
代码示例
TrayRefresh()
; 从任务栏托盘中删除所有无效图标,应同时适用于 W7 和 W10
TrayRefresh() {
DetectHiddenWindows % ("On", DHW:=A_DetectHiddenWindows)
For _, title in ["ahk_class Shell_TrayWnd", "ahk_class NotifyIconOverflowWindow"] {
For _, controlName in ["ToolbarWindow321","ToolbarWindow322","ToolbarWindow323","ToolbarWindow324"] {
For _, iconSize in [24,32] { ; allIconSizes
ControlGetPos, xTray, yTray, wdTray, htTray, %controlName%, %title%
y := htTray - 10
While (y > 0) {
x := wdTray - iconSize/2
While (x > 0) {
point := (y << 16) + x
PostMessage, 0x200, 0, %point%, %controlName%, %title% ; WM_MOUSEMOVE := 0x200
x -= iconSize/2
}
y -= iconSize/2
}
}
}
}
DetectHiddenWindows %DHW%
}
站内延伸
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。
