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

时间:2010-04-27 16:14:08  来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:>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&nb...
  正文:有些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);
}

如何自动移去系统托盘失效的图标》由第二电脑网原创提供,转载请注明:http://www.002pc.com/master/College/Language/VC/2010-04-27/13781.html


关键字:

关于《如何自动移去系统托盘失效的图标》文章的评论

站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td