|
一些WINDOWS程序启动之后,会在WIN7任务栏的通知区域(XP中叫“系统托盘”)中放置一个图标。 如果使用“结束进程”关闭这种程序,它的图标会遗留在通知区域中,只有用鼠标划过之后,才会消失。 有什么办法可以一次刷新通知区域的所有图标吗?
因为我使用“计划任务”通过vbs和bat在后台反复运行及终止进程,导致通知区域会积存大量的死图标,用鼠标划过都很麻烦。
我所知的办法是,编写程序模拟鼠标滑行消息,一次性滑行过所有图标,达到刷新通知区域的目的。 程序分为两部分,第一部分是获取“隐藏通知区域”窗格的句柄以及窗格位置,第二是向窗格中发送鼠标移动的消息来清除图标。
我先定义了一个矩形,用于存储通知区域窗口的位置信息。
Private Type RECT
Left As Long Top As Long Right As Long Bottom As Long
End Type 然后,用WINDOWS API找到通知区域窗口,并获取它的大小和位置
Dim R As RECT
Wnd = FindWindow("Shell_TrayWnd", vbNullString) Wnd = FindWindowEx(Wnd, 0, "TrayNotifyWnd", vbNullString) Wnd = FindWindowEx(Wnd, 0, "SysPager", vbNullString) Wnd = FindWindowEx(Wnd, 0, "ToolbarWindow32", vbNullString) Wnd = FindWindow("NotifyIconOverflowWindow", vbNullString)
GetWindowRect Wnd, R 做到这一步之后,我查看了R的属性,是正确的,获得了通知区域窗口在屏幕中的像素位置。
通知区域窗口如上图,已知每个图标的尺寸都是32*32,并且窗口的长宽是(1 + 32的整数倍 + 1) 那么下一步就是要使用
SendMessage Wnd, WM_MOUSEMOVE, 0, 鼠标位置
|
|
|