程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言基礎知識 >> 如何自動移去系統托盤失效的圖標

如何自動移去系統托盤失效的圖標

編輯:C語言基礎知識

  有些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);
  
   }
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved