zoukankan      html  css  js  c++  java
  • Findwind() Enumwindow()

    1. FindWindow()

    HWND FindWindow(LPCSTR lpClassName, LPCSTR lpWindowName);
    功能:查找与指定窗口类名和窗口名称相匹配的顶级窗口,这个函数不搜索子窗口。
    参数:如果lpClassName为null,将会寻找任何与lpWindowName参数匹配的窗口,如果lpWindowName为NULL,则匹配所有窗口名。
    返回值:成功返回窗口句柄。否则返回NULL。
     
     
    2.FindWindowEx()
    HWND
    WINAPI
    FindWindowExW(
        _In_opt_ HWND hWndParent,
        _In_opt_ HWND hWndChildAfter,
        _In_opt_ LPCWSTR lpszClass,
        _In_opt_ LPCWSTR lpszWindow);
     
    功能:
    在窗口列表中寻找与指定条件相符的第一个子窗口 。
    该函数获得一个窗口的句柄,该窗口的类名和窗口名与给定的字符串相匹配。
    这个函数查找子窗口,从排在给定的子窗口后面的下一个子窗口开始。在查找时不区分大小写。
    参数:
    (1)hwndParent:要查找的子窗口所在的父窗口的句柄
    如果设置了hwndParent,则表示从这个hwndParent指向的父窗口中搜索子窗口。
    如果hwndParent为 0 ,则函数以桌面窗口为父窗口,查找桌面窗口的所有子窗口。
    如果hwndParent是HWND_MESSAGE,函数仅查找所有消息窗口。
    (2)hwndChildAfter :子窗口句柄。查找从在Z序中的下一个子窗口开始。子窗口必须为hwndParent窗口的直接子窗口而非后代窗口。
    如果HwndChildAfter为NULL,查找从hwndParent的第一个子窗口开始。
    如果hwndParent 和 hwndChildAfter同时为NULL,则函数查找所有的顶层窗口及消息窗口。
    (3)lpszClass:指向一个指定了类名的空结束字符串,或一个标识类名字符串的成员的指针。
    (4)lpszWindow:指向一个指定了窗口名(窗口标题)的空结束字符串。如果该参数为 NULL,则为所有窗口全匹配。
    返回值:
    如果函数成功,返回值为具有指定类名和窗口名的窗口句柄。如果函数失败,返回值为NULL。
     
     
    3. EnumWindows()
    BOOL EnumWindows(WNDENUMPROC lpEnumFunc,LPARAM lParam)
    功能:
    该函数枚举所有屏幕上的顶层窗口,并将窗口句柄传送给应用程序定义的回调函数。
    回调函数返回FALSE将停止枚举,否则EnumWindows函数继续到所有顶层窗口枚举完为止。
    参数:
    lpEnumFunc:指向一个应用程序定义的回调函数指针
    lPararm:指定一个传递给回调函数的应用程序定义值
    返回值:
    如果函数成功,返回值为非零;如果函数失败,返回值为零。
     
    回调函数原型:
    BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam);
    hwnd:顶层窗口的句柄
    lparam:应用程序定义的一个值(即EnumWindows中lParam)
     
     
    4 EnumChildindows()
    BOOL EnumChildWindows(HWND hWndParent,WNDENUMPROC lpEnumFunc, LPARAM lParam);
    功能:
    枚举一个父窗口的所有子窗口。
    如果回调函数返回true,则枚举继续直到枚举完成;如果返回false,则将会中止枚举。
    参数:
    hWndParent: 父窗口句柄
    lpEnumFunc: 回调函数的地址
    lParam:          自定义的参数
    返回值:
    如果函数成功,返回值为非零;如果函数失败,返回值为零。
     
    回调函数原型:
    BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam);
    hwnd:顶层窗口的句柄
    lparam:应用程序定义的一个值(即EnumWindows中lParam)
     
     
    异同点:
    1. FindWindow 查找顶级窗口,不搜索子窗口。而FindWindowEx则是查找一个窗口的子窗口。
    相同点:都是只查找一次,找到返回窗口句柄,找不到返回NULL。 都可与while构成循环。
    2. EnumWindows 枚举屏幕上的所有顶层窗口; 而EnumChildWindows 则枚举一个父窗口的所有子窗口。
    相同点,都是通过回调函数实现,回调函数会阻塞直到枚举完成,或者枚举中止。
    3. FindWindow(NULL, NULL) 的While循环 与 EnumWindows() 相同;
    4. FindWindowEx(.., NULL, .., ..) 的While循环 与 EnumChildWindows() 相同;
     
    例如:
    [cpp] view plain copy
     
    1. void Find()    
    2. {    
    3.     HWND hwnd = NULL;    
    4.     HWND AfterHwnd = NULL;    
    5.   
    6.     while(true)    
    7.     {       
    8.         hwnd = ::FindWindowEx(NULL, AfterHwnd, _T("#32770"), NULL);    
    9.           
    10.         if(!hwnd)  
    11.         {  
    12.             break;  
    13.         }  
    14.         else    
    15.         {    
    16.             TCHAR szTitle[MAX_PATH] = {0};    
    17.             ::GetWindowText(hwnd, szTitle, MAX_PATH))    
    18.               
    19.             if(wcsstr(strTitle, _T("Test")) != 0)    
    20.             {    
    21.         //...相关代码  
    22.             }    
    23.         }   
    24.    
    25.         AfterHwnd = hwnd;    
    26.     }    
    27. }    
  • 相关阅读:
    “增绿”——气候变化减排之外中国提出新方法
    当资本遇见万科章程
    [转]最简单实现跨域的方法:用 Nginx 反向代理
    活在雾霾下
    为石墨烯弄套产业政策?且慢!
    2016年的A股变数:IPO重启、注册制与国企改革
    被指“造假” 京东喊冤 到底谁在卖“真褚橙”?
    在管理教练与管理之间寻找平衡
    聪明的CEO如何将战略付诸执行
    苹果公司如何推动整个产业的前进
  • 原文地址:https://www.cnblogs.com/oneway1990/p/8497078.html
Copyright © 2011-2022 走看看