久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

根據(jù)進(jìn)程ID枚舉所有窗口獲得窗口句柄

 @IT小小鳥@ 2012-02-28

根據(jù)進(jìn)程ID枚舉所有窗口獲得窗口句柄

查找資料后整理如下

  1. /******************************************************************** 
  2.     created:    2010/03/09 
  3.     created:    9:3:2010   10:03 
  4.     file base:  CWindowIterator 
  5.     file ext:   h 
  6.     author:     zhangwf 
  7.      
  8.     purpose:    封裝枚舉窗口類 
  9. *********************************************************************/  
  10. #ifndef _CWINDOW_ITERATOR_ZWF_H_  
  11. #define _CWINDOW_ITERATOR_ZWF_H_  
  12. //////////////////////////////////////////////////////////////////////////  
  13. #include <vector>  
  14. using namespace std;  
  15. //////////////////////////////////////////////////////////////////////////  
  16. class CWindowIterator  
  17. {  
  18. public:  
  19.     // 構(gòu)造析構(gòu)函數(shù)  
  20.     CWindowIterator();  
  21.     ~CWindowIterator();  
  22.   
  23. public:  
  24.     // 接口函數(shù)  
  25.     void EnumWnds();                        // 枚舉窗口  
  26.     unsigned long GetWndCounts();           // 獲得窗口總數(shù)  
  27.     HWND First();                           // 獲得第一個(gè)窗口句柄  
  28.     HWND Next();                            // 獲得下一個(gè)窗口句柄  
  29.     HWND GetHWnd(unsigned long wndIndex);   // 根據(jù)索引獲得窗口句柄         
  30.   
  31. protected:  
  32.     vector<HWND> m_hWndArray;               // 存放枚舉得到的窗口句柄  
  33.     unsigned long m_nCurrentWndIndex;       // 當(dāng)前窗口句柄  
  34.   
  35.     // 枚舉窗口回調(diào)函數(shù)  
  36.     static BOOL CALLBACK EnumWndProc(HWND hwnd, LPARAM lp);  
  37.   
  38.     // virtual enumerator  
  39.     virtual BOOL AddWnd(HWND hwnd);  
  40.   
  41.     // override to filter different kinds of windows  
  42.     virtual BOOL IsTargetWnd(HWND hwnd) {return TRUE;}  
  43.   
  44. };  
  45. //////////////////////////////////////////////////////////////////////////  
  46. //////////////////////////////////////////////////////////////////////////  
  47. // 派生出主窗口類(只獲取進(jìn)程的主窗口)  
  48. class CMainHWnd : public CWindowIterator  
  49. {  
  50. public:  
  51.     // 構(gòu)造析構(gòu)函數(shù)  
  52.     CMainHWnd();  
  53.     CMainHWnd(unsigned long pid);  
  54.     ~CMainHWnd();  
  55.   
  56. public:  
  57.     // 接口函數(shù)  
  58.     void EnumWndsByPid(DWORD pid);  
  59.   
  60. protected:  
  61.     DWORD m_pid;  
  62.     virtual BOOL IsTargetWnd(HWND hwnd);  
  63.   
  64. };  
  65. //////////////////////////////////////////////////////////////////////////  
  66. #endif  

源文件

  1. /******************************************************************** 
  2.     created:    2010/03/09 
  3.     created:    9:3:2010   10:10 
  4.     file base:  CWindowIterator 
  5.     file ext:   cpp 
  6.     author:     zhangwf 
  7.      
  8.     purpose:    封裝枚舉窗口類 
  9. *********************************************************************/  
  10. //////////////////////////////////////////////////////////////////////////  
  11. #include <Windows.h>  
  12. #include "CWindowIterator.h"  
  13. //////////////////////////////////////////////////////////////////////////  
  14. // 構(gòu)造函數(shù)  
  15. CWindowIterator::CWindowIterator()  
  16. {  
  17.     // 初始化變量  
  18.     m_hWndArray.clear();  
  19.     m_nCurrentWndIndex = 0;  
  20. }  
  21.   
  22. // 析構(gòu)函數(shù)  
  23. CWindowIterator::~CWindowIterator()  
  24. {  
  25.   
  26. }  
  27.   
  28. //////////////////////////////////////////////////////////////////////////  
  29. // 接口函數(shù)  
  30. // 獲得窗口總數(shù)  
  31. unsigned long CWindowIterator::GetWndCounts()  
  32. {  
  33.     return m_hWndArray.size();  
  34. }  
  35.   
  36. // 獲得第一個(gè)窗口句柄  
  37. HWND CWindowIterator::First()  
  38. {  
  39.     if (m_hWndArray.size() != 0)  
  40.     {  
  41.         m_nCurrentWndIndex = 0;  
  42.         return m_hWndArray[m_nCurrentWndIndex];  
  43.     }  
  44.   
  45.     return NULL;  
  46. }  
  47.   
  48. // 獲得下一個(gè)窗口句柄  
  49. HWND CWindowIterator::Next()  
  50. {  
  51.     if (m_nCurrentWndIndex+1 < m_hWndArray.size())  
  52.     {  
  53.         m_nCurrentWndIndex += 1;  
  54.         return m_hWndArray[m_nCurrentWndIndex];  
  55.     }  
  56.   
  57.     return NULL;  
  58. }  
  59.   
  60. // 根據(jù)索引獲得窗口句柄  
  61. HWND CWindowIterator::GetHWnd(unsigned long wndIndex)  
  62. {  
  63.     if (wndIndex < m_hWndArray.size())  
  64.     {  
  65.         return m_hWndArray[wndIndex];  
  66.     }  
  67.   
  68.     return NULL;  
  69. }  
  70.   
  71. void CWindowIterator::EnumWnds()  
  72. {  
  73.     // 清除上次內(nèi)容  
  74.     m_hWndArray.clear();  
  75.   
  76.     // 枚舉所有窗口  
  77.     ::EnumWindows(EnumWndProc, (LPARAM)this);  
  78. }  
  79.   
  80. //////////////////////////////////////////////////////////////////////////  
  81. // 非接口函數(shù)  
  82. // 枚舉窗口回調(diào)函數(shù)  
  83. BOOL CALLBACK CWindowIterator::EnumWndProc(HWND hwnd, LPARAM lp)  
  84. {  
  85.     return ((CWindowIterator*)lp)->AddWnd(hwnd);  
  86. }  
  87.   
  88. // virtual enumerator  
  89. BOOL CWindowIterator::AddWnd(HWND hwnd)  
  90. {  
  91.     if (IsTargetWnd(hwnd) == TRUE)  
  92.     {  
  93.         m_hWndArray.push_back(hwnd);          
  94.     }  
  95.   
  96.     return TRUE;  
  97. }  
  98. //////////////////////////////////////////////////////////////////////////  
  99. //////////////////////////////////////////////////////////////////////////  
  100. // 派生出主窗口句柄類  
  101. // 構(gòu)造函數(shù)  
  102. CMainHWnd::CMainHWnd()  
  103. :CWindowIterator()  
  104. {  
  105.     m_pid = 0;  
  106. }  
  107.   
  108. // 帶參構(gòu)造函數(shù)  
  109. CMainHWnd::CMainHWnd(unsigned long pid)  
  110. :CWindowIterator()  
  111. {  
  112.     m_pid = pid;  
  113.     EnumWnds();  
  114. }  
  115.   
  116. // 析構(gòu)函數(shù)  
  117. CMainHWnd::~CMainHWnd()  
  118. {  
  119.   
  120. }  
  121.   
  122. //////////////////////////////////////////////////////////////////////////  
  123. // 接口函數(shù)  
  124. void CMainHWnd::EnumWndsByPid(DWORD pid)  
  125. {  
  126.     m_pid = pid;  
  127.     EnumWnds();  
  128. }  
  129. //////////////////////////////////////////////////////////////////////////  
  130. // 非接口函數(shù)  
  131. BOOL CMainHWnd::IsTargetWnd(HWND hwnd)  
  132. {  
  133.     // 頂層且可見  
  134.     if (::GetParent(hwnd)==NULL && ::IsWindowVisible(hwnd)==TRUE)   
  135.     {         
  136.         DWORD pidwin;  
  137.         ::GetWindowThreadProcessId(hwnd, &pidwin);  
  138.         if (pidwin == m_pid)  
  139.         {  
  140.               
  141.             return TRUE;  
  142.         }             
  143.     }  
  144.   
  145.     // 不是目標(biāo)窗口  
  146.     return FALSE;  
  147. }  

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(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ā)表

    請遵守用戶 評論公約

    類似文章 更多