乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

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

       @IT小小鳥@ 2012-02-28

      根據(jù)進程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();                           // 獲得第一個窗口句柄  
      28.     HWND Next();                            // 獲得下一個窗口句柄  
      29.     HWND GetHWnd(unsigned long wndIndex);   // 根據(jù)索引獲得窗口句柄         
      30.   
      31. protected:  
      32.     vector<HWND> m_hWndArray;               // 存放枚舉得到的窗口句柄  
      33.     unsigned long m_nCurrentWndIndex;       // 當前窗口句柄  
      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. // 派生出主窗口類(只獲取進程的主窗口)  
      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. // 獲得第一個窗口句柄  
      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. // 獲得下一個窗口句柄  
      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.     // 不是目標窗口  
      146.     return FALSE;  
      147. }  

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

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多