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() 相同;
 
例如:
  1. void Find()
  2. {
  3. HWND hwnd = NULL;
  4. HWND AfterHwnd = NULL;
  5. while(true)
  6. {
  7. hwnd = ::FindWindowEx(NULL, AfterHwnd, _T("#32770"), NULL);
  8. if(!hwnd)
  9. {
  10. break;
  11. }
  12. else
  13. {
  14. TCHAR szTitle[MAX_PATH] = {0};
  15. ::GetWindowText(hwnd, szTitle, MAX_PATH))
  16. if(wcsstr(strTitle, _T("Test")) != 0)
  17. {
  18. //...相关代码
  19. }
  20. }
  21. AfterHwnd = hwnd;
  22. }
  23. }

Findwind() Enumwindow()的更多相关文章

  1. C#调用windows API的一些方法

    使用C#调用windows API(从其它地方总结来的,以备查询) C#调用windows API也可以叫做C#如何直接调用非托管代码,通常有2种方法: 1.  直接调用从 DLL 导出的函数. 2. ...

  2. Delphi 查找标题已知的窗口句柄,遍历窗口控件句柄(转)

    用我的方法来控制其他程序窗体上的窗口控件,必须先了解什么是 回调函数.我的理解是这样的: 回 调函数写出来不是自己的程序去调用的,反而是让其他的东西去调用,比如windows操作系统,比如其他的程序等 ...

  3. Javascript-回调函数浅谈

    回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数.回调函数不是由该函数的实现方直接调用,而是在特定 ...

  4. (C/C++) Callback Function 回调(diao)函数

    原文: http://www.codeguru.com/cpp/cpp/cpp_mfc/callbacks/article.php/c10557/Callback-Functions-Tutorial ...

  5. 【转】MFC窗口句柄各类指针获取函数

    原文网址:http://www.pythonschool.com/CPP_JHK/5003.html 获取所在类窗口的句柄 this->m_hwnd; // this是一个指针,指向当前类的实例 ...

  6. 【转】vc中使用SendMessage正确发送自定义消息的方法--不错

    原文网址:http://zhoumf1214.blog.163.com/blog/static/5241940200910265532959/ 最近在用VC2008做开发,后来由于要用到消息的发送,而 ...

  7. Callback函数详解(我感觉,回掉函数的本质是函数指针,在业务做循环处理的时候,调用一下通知外部)

    2010年的最后一天了,转载一篇自己认为还不错的文章与大家分享.希望对大家有所帮助. 一,回调函数 我们经常在C++设计时通过使用回调函数可以使有些应用(如定时器事件回调处理.用回调函数记录某操作进度 ...

  8. (转载博文)VC++API速查

    窗口处理 2.1 窗口简介 2.2.1 创建普通窗口(CreateWindow.CreateWindowEx) 2.2.2 关闭窗口(CloseWindow) 2.2.3 销毁窗口(DestroyWi ...

  9. (转载博文)MFC 窗口句柄获取

    句柄获取方法(获取该窗口的句柄后,即可向该窗口类类发送消息.处理程序):0.获取所在类窗口的句柄: this->m_hwnd 1.主窗口的句柄: 无论在主窗口类内,还是子窗口类内,获取主窗口句柄 ...

随机推荐

  1. spring boot 尚桂谷学习笔记08 Docker ---Web

    ------Docker------ 简介:Docker是一个开元的应用容器引擎,性能非常高 已经安装好的软件打包成一个镜像放到服务器中运行镜像 MySQL容器,Redis容器...... Docke ...

  2. LeetCode 数组中两个数的最大异或值

    题目链接:https://leetcode-cn.com/problems/maximum-xor-of-two-numbers-in-an-array/ 题目大意: 略. 分析: 字典树 + 贪心. ...

  3. vue2.0---最近总结

    1.用脚手架给运维部门搞了个小东西,重新温习了一遍牛逼又方便的vue-cli. webpack的东西不必关心太多,而且webpack最近也是出了最新的4.0版本.还是改变挺多的,对一些代码的格式要求更 ...

  4. C++中的多重继承(二)

    1,本文分析另一个多重继承问题及其工程中的解决方案,单继承加多接口实现的开发方式: 2,多重继承的问题三: 1,多重继承可能产生多个虚函数表: 1,实际工程中可能造成不可思议的问题,并且这些问题很难以 ...

  5. 理解 TCP/IP 三次握手与四次挥手

    TCP建立连接为什么是三次握手,而不是两次或四次? TCP,名为传输控制协议,是一种可靠的传输层协议,IP协议号为6. 顺便说一句,原则上任何数据传输都无法确保绝对可靠,三次握手只是确保可靠的基本需要 ...

  6. js自增++与自减--运算符

    /** * 自增(++)与自减(--)运算符 */ // 自增示例 var a = 1, c, d, e; console.log(`a++ = ${a++}`); // a++ = 1 consol ...

  7. NHibernet Unable to locate persister for the entity

    第一 xml文件必须为 *.hbm.xml 第二  设置xml文件为嵌入的资源,用鼠标点击右键 然后生成操作里 选择嵌入的资源即可解决. https://www.cnblogs.com/lyj/

  8. Nginx的应用之虚拟主机

    开始前请确保selinux关闭,否则当配置完虚拟主机后,尽管权限或者网站目录都正确,访问的结果也是403 nginx的虚拟主机有三种方式: 一.基于域名的虚拟主机 (1)创建对应的web站点目录以及程 ...

  9. web storage 简单的网页留言版

    html <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <ti ...

  10. html+jquery+php实现文件上传全过程

    本例子采用html+jquery+php实现上传功能 html部分 <!DOCTYPE html> <html> <head> <meta charset=& ...