电竞比分网-中国电竞赛事及体育赛事平台

分享

獲得桌面所有窗口句柄的方法總結(jié)

 @IT小小鳥@ 2012-02-17
第一種方法:
  1.先獲得桌面窗口
  CWnd* pDesktopWnd = CWnd::GetDesktopWindow();
  2.獲得一個(gè)子窗口
  CWnd* pWnd = pDesktopWnd->GetWindow(GW_CHILD);
  3.循環(huán)取得桌面下的所有子窗口
  while(pWnd != NULL)
  {
      //獲得窗口類名
      CString strClassName = _T("");//應(yīng)該用TCHAR,用CStrting沒有測試通過.
      ::GetClassName(pWnd->GetSafeHwnd(),strClassName.GetBuffer(256),256);
      //獲得窗口標(biāo)題
      CString strWindowText = _T("");
      ::GetWindowText(pWnd->GetSafeHwnd(),strWindowText.GetBuffer(256),256);
      //繼續(xù)下一個(gè)子窗口
      pWnd = pWnd->GetWindow(GW_HWNDNEXT);
   }
 
第二種方法:
    1.定義存放窗口句柄變量,和下標(biāo)計(jì)數(shù)器
      HWND m_hWndFind[1000]; int m_Index;
    2.先寫一個(gè)BOOL CALLBACK EnumWndProc(HWND hwnd,LPARAM lParam) 的回調(diào)函數(shù).
    BOOL  CAllwindowsDlg::EnumWindowsProc(HWND hWnd, LPARAM lParam)
    {
      //查找可見的窗口
      if(::GetWindowLong(hWnd,GWL_STYLE)& WS_VISIBLE)
      {
        m_hwndFind[m_Index] = hWnd;//record the HWND handle into array
        m_Index++;//count start
       }
       return 1;
     }
     3.調(diào)用(這個(gè)回調(diào)函數(shù)回自動(dòng)遞歸的便利所有可見窗口,直到完畢)
     ::EnumWindows(CAllwindowsDlg::EnumWindowsProc,NULL);
     4.取得窗口名稱和類名
     for(int i = 0;i <=m_Index;i++)
     {
        HWND m_wnd = m_hwndFind[i];
        ::GetWindowText(m_wnd,m_store,128);
        ::GetClassName(m_wnd,m_strClass,MAX_PATH-1);
        //獲得窗口類名
        CString strClassName = _T("");
        ::GetClassName(m_wnd,strClassName.GetBuffer(256),256);
        //獲得窗口標(biāo)題
        CString strWindowText = _T("");
        ::GetWindowText(m_wnd,strWindowText.GetBuffer(256),256);
     }

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多