刚到一家新公司,软件经常异常关闭需要重启,导致托盘无效图标太多,网上查找资料,整合一个比较简洁有效的函数:
void RefurbishTray()
{
//获得托盘(不含时间的区域)句柄
HWND hwnd ;
hwnd = ::FindWindow("Shell_TrayWnd", NULL);
hwnd = ::FindWindowEx(hwnd, 0, "TrayNotifyWnd", NULL);
hwnd = ::FindWindowEx(hwnd, 0, "SysPager", NULL);
hwnd = ::FindWindowEx(hwnd, 0, "ToolbarWindow32", NULL);
RECT rTrayToolBar;
::GetClientRect(hwnd, &rTrayToolBar);//托盘区域
for(int x = 1; x < rTrayToolBar.right - 1; x++)
{
for(int y = 1; y < rTrayToolBar.bottom - 1; y++)
{
::SendMessage(hwnd, WM_MOUSEMOVE, 0, MAKELPARAM(x, y));//发送鼠标移动事件
}
}
}