脚本反复启动、退出或异常中止以后,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%
}

 

站内延伸

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。