第一種方法: 1.先獲得桌面窗口 CWnd* pDesktopWnd = CWnd::GetDesktopWindow(); 2.獲得一個子窗口 CWnd* pWnd = pDesktopWnd->GetWindow(GW_CHILD); 3.循環(huán)取得桌面下的所有子窗口 while(pWnd != NULL) { //獲得窗口類名 CString strClassName = _T("");//應該用TCHAR,用CStrting沒有測試通過. ::GetClassName(pWnd->GetSafeHwnd(),strClassName.GetBuffer(256),256); //獲得窗口標題 CString strWindowText = _T(""); ::GetWindowText(pWnd->GetSafeHwnd(),strWindowText.GetBuffer(256),256); //繼續(xù)下一個子窗口 pWnd = pWnd->GetWindow(GW_HWNDNEXT); } 第二種方法: 1.定義存放窗口句柄變量,和下標計數(shù)器 HWND m_hWndFind[1000]; int m_Index; 2.先寫一個BOOL CALLBACK EnumWndProc(HWND hwnd,LPARAM lParam) 的回調函數(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.調用(這個回調函數(shù)回自動遞歸的便利所有可見窗口,直到完畢) ::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); //獲得窗口標題 CString strWindowText = _T(""); ::GetWindowText(m_wnd,strWindowText.GetBuffer(256),256); }
|
|