如何自动移去系统托盘失效的图标

2008-02-23 05:36:28来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

有些Window应用程式在启动以后会在系统托盘去添加一个小图标, 一般情况下当程式正常退出时会自动去掉,但有时由于应用程式非法关闭,这个图标便一直留在托盘区,直到用鼠标移动图标上时,才会自己消失.那么我们就能够模拟鼠标移动到逐个图标上,来达到这个效果.

void __fastcall RemoveDeadIcons()
{
HWND hTrayWindow;
RECT rctTrayIcon;
int nIconWidth;
int nIconHeight;
TPoint CursorPos;
int nRow;
int nCol;

// Get tray window handle and bounding rectangle
hTrayWindow = FindWindowEx(FindWindow(
"Shell_TrayWnd", NULL), 0, "TrayNotifyWnd", NULL);
if(!GetWindowRect(hTrayWindow, &rctTrayIcon))
return;
// Get small icon metrics
nIconWidth = GetSystemMetrics(SM_CXSMICON);
nIconHeight = GetSystemMetrics(SM_CYSMICON);
// Save current mouse position }
GetCursorPos(&CursorPos);
// Sweep the mouse cursor over each icon in the tray in both dimensions
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);
}
}
// Restore mouse position
SetCursorPos(CursorPos.x, CursorPos.x);
// Redraw tray window (to fix bug in multi-line tray area)
RedrawWindow(hTrayWindow, NULL, 0, RDW_INVALIDATE | RDW_ERASE | RDW_UPDATENOW);
}




标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: 获取信息的有关Windows API

下一篇: 读取其他应用程式中ListView中的内容

热门词条
热门标签