有些Window应用程序在启动以后会在系统托盘去添加一个小图标, 一般情况下当程序正常退出时会自动去掉,但有时由于应用程序非法关闭,这个图标便一直留在托盘区,直到用鼠标移动图标上时,才会自己消失.那么我们就可以模拟鼠标移动到逐个图标上,来达到这个效果.
void __fastcall RemoveDeadIcons() { HWND hTrayWindow; RECT rctTrayIcon; int nIconWidth; int nIconHeight; TPoint CursorPos; int nRow; int nCol;
hTrayWindow = FindWindowEx(FindWindow( "Shell_TrayWnd", NULL), 0, "TrayNotifyWnd", NULL); if(!GetWindowRect(hTrayWindow, &rctTrayIcon)) return; nIconWidth = GetSystemMetrics(SM_CXSMICON); nIconHeight = GetSystemMetrics(SM_CYSMICON); GetCursorPos(&CursorPos); for(nRow=0; nRow<(rctTrayIcon.bottom-rctTrayIcon.top)/nIconHeight; nRow++) { for(nCol=0; nCol<(rctTrayIcon.right-rctTrayIcon.left)/nIconWidth; nCol++) { SetCursorPos(rctTrayIcon.left + nCol * nIconWidth + 5, rctTrayIcon.top + nRow * nIconHeight + 5); Sleep(0); } } SetCursorPos(CursorPos.x, CursorPos.x); RedrawWindow(hTrayWindow, NULL, 0, RDW_INVALIDATE | RDW_ERASE | RDW_UPDATENOW); }  
|