• FindWindow

函数原型:HWND FindWindow(LPCSTR lpClassName,LPCSTR lpWindowName);

C#.NET声明如下:

[DllImport("user32.dll")]

public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

功能:用于查找顶层窗口句柄,不搜索子窗口。

第一个参数lpClassName是要查找的窗口类名(不区分大小写);第二个参数lpWindowName是要查找窗口的名称/标题(不区分大小写);返回找到的窗口句柄(没找到返回0)。

如果存在多个匹配项,只返回第一个找到的项,lpClassName可设为NULL代表不指定类名,同样lpWindowName也可设为NULL不指定标题名称,两个都为NULL代表匹配所有将返回第一个窗口(切记,NULL并不是""空字符串,是有区别的)。

  • FindWindowEx

函数原型:HWND FindWindowEx(HWND hWndParent,HWND hWndChildAfter,LPCSTR lpszClass,LPCSTR lpszWindow);

C#.NET声明如下:

[DllImport("user32.dll")]

public static extern IntPtr FindWindowEx(IntPtr hWndParent,IntPtr hWndChildAfter,string lpszClass, string lpszWindow);

功能:在控件列表中寻找与指定条件相符的第一个子控件 。

hWndParent要查找的父控件句柄;hWndChildAfter父控件的子控件句柄,将从此子控件之后开始查找;lpszClass目标子控件类名(不区分大小写);lpszWindow目标子窗口的名称/标题(不区分大小写);返回找到的窗口句柄(没找到返回0)。

如果存在多个匹配项,只返回第一个找到的项,hWndParent可设为IntPtr.Zero表示从桌面中查找顶层窗口不搜索子窗口,类似FindWindow(如果hwndParent是HWND_MESSAGE,函数仅查找所有消息窗口);hWndChildAfter可设为IntPtr.Zero表示从第1个子控件开始搜索;lpszClass可设为NULL代表不指定类名,同样lpszWindow也可设为NULL不指定标题名称(切记,NULL并不是""空字符串,是有区别的)。

  • EnumWindows

函数原型:BOOL EnumWindows(WNDENUMPROC lpEnumFunc, LPARAM lParam);

回调函数原型:BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam);

C#.NET声明如下:

[DllImport("user32.dll")]
public static extern bool EnumWindows(CallBack lpEnumFunc, int lParam);

public delegate bool CallBack(IntPtr hwnd, int lParam);//回调函数声明,后续还要实现回调函数实体。

功能:枚举所有屏幕上的顶层窗口,并将窗口句柄传送给应用程序定义的回调函数,回调函数返回FALSE将停止枚举,否则继续到所有顶层窗口枚举完为止。

EnumWindows中的参数:lpEnumFunc回调函数,lParam参数传递给回调函数的lParam。回调函数中的参数:hwnd枚举到的窗口句柄,lParam为EnumWindows传递过来的参数。

C#.NET调用示例:

IntPtr theHandle;
        public bool EnumWindowsProc(IntPtr hwnd,int lParam)
        {
            int len=GetWindowTextLength(hwnd);
            if (len > 10)
            {
                theHandle = hwnd;
                return false;//返回FALSE停止枚举
            }
            return true;
        }
        public void test()
        {
            CallBack cbEnumWindows = new CallBack(EnumWindowsProc);
            EnumWindows(cbEnumWindows, 0);
        }

  • EnumChildWindows

函数原型:BOOL EnumChildWindows(HWND hWndParent, WNDENUMPROC lpEnumFunc, LPARAM lParam);

回调函数原型:BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam);

C#.NET声明如下:

[DllImport("user32.dll")]
public static extern bool EnumChildWindows(IntPtr hWndParent, CallBack lpEnumFunc, int lParam);
public delegate bool CallBack(IntPtr hwnd, int lParam);
//回调函数声明,后续还要实现回调函数实体。

功能:枚举指定控件下的所有子控件,并将子控件句柄传送给应用程序定义的回调函数,回调函数返回FALSE将停止枚举,否则一直到所有子控件枚举完为止。

EnumChildWindows中的参数:hWndParent为目标控件所在的父控件句柄;lpEnumFunc为回调函数;lParam传递给回调函数。回调函数中的参数:hwnd枚举到的子控件句柄,lParam为EnumChildWindows传递过来的参数。

如果hWndParent参数为NULL,则此函数等效于EnumWindows。(调用示例参考上面EnumWindows中的示例)


写在最后,EnumWindows/EnumChildWindows配合API函数GetWindowText与GetClassName可实现FindWindow/FindWindowEx的相同功能,EnumWindows对应FindWindow查询顶层窗口,EnumChildWindows对应FindWindowEx搜索子控件。另外,出于安全考虑或其它因素部分控件只可针对类名进行查询处理,无法查询标题内容,如:自绘控件的标题、外部程序的普通编辑框(标题即为编辑框内容)、密码编辑框等等。

FindWindow、FindWindowEx、EnumWindows、EnumChildWindows使用详解相关推荐

  1. FindWindow,FindWindowEx,EnumWindows,EnumChildWindows的用法和区别

    FindWindow() HWND FindWindow(LPCSTR lpClassName, LPCSTR lpWindowName); 功能:查找与指定窗口类名和窗口名称相匹配的顶级窗口,这个函 ...

  2. 怎么在桌面上嵌入窗口(使用FindWindow(),FindWindowEx(),EnumChildWindows())

    怎么在桌面上嵌入窗口(使用FindWindow(),FindWindowEx(),EnumChildWindows()) 打开spy++ 我们可以发现桌面窗口是一个位于Progman的类名下的类名为S ...

  3. C#FindWindowEx参数详解

    FindWindowEx参数详解 本函数的其他内容在网络上都比较多,这里主要说一下它的参数设置和搜索结果的区别. 函数功能:在窗口列表中寻找与指定条件相符的第一个子窗口.该函数获得一个窗口的句柄,该窗 ...

  4. Windows API函数大全---附:windows运行命令详解

    1. API之网络函数             WNetAddConnection 创建同一个网络资源的永久性连接             WNetAddConnection2 创建同一个网络资源的连 ...

  5. python截图黑屏_对Python获取屏幕截图的4种方法详解

    Python获取电脑截图有多种方式,具体如下: PIL中的ImageGrab模块 windows API PyQt pyautogui PIL中的ImageGrab模块 import time imp ...

  6. python获取屏幕文字_详解:四种方法教你对Python获取屏幕截图(PyQt , pyautogui)...

    前言: 今天为大家带来的内容是详解:四种方法教你对Python获取屏幕截图(PyQt , pyautogui)本文具有不错的参考意义,希望能够帮助到大家! Python获取电脑截图有多种方式,具体如下 ...

  7. 5 获取窗口位置_详解:四种方法教你对Python获取屏幕截图(PyQt , pyautogui)

    前言: 今天为大家带来的内容是详解:四种方法教你对Python获取屏幕截图(PyQt , pyautogui)本文具有不错的参考意义,希望能够帮助到大家! Python获取电脑截图有多种方式,具体如下 ...

  8. 初级游戏外挂编程详解 windows运行原理+游戏辅助编程 游戏外挂编程

    @TOC初级游戏外挂编程详解 windows运行原理+游戏辅助编程 游戏外挂编程 [1]什么是windows API Windows API 中文翻译过来就是windows应用程序接口(Applica ...

  9. WPF WinAPI 编程详解(四 实例 )

    QQ/微信定时发送消息 1--检测QQ/微信窗口 今天先来说说第一步:怎样检测QQ和微信窗口. 1,思路:首先获取QQ和微信的进程ID,中间要注意两个注意点 <1>请保证要群发的QQ/微信 ...

最新文章

  1. 微软苹果服务器宕机,苹果服务器宕机,iPhone用户别做这两项操作,微软特斯拉也中招...
  2. 宁‘内卷‘,勿‘躺平‘
  3. 【Windows 逆向】OD 调试器工具 ( CE 中获取子弹动态地址前置操作 | OD 中调试指定地址的数据 )
  4. 【Linux】一步一步学Linux——whatis命令(14)
  5. 这款耳机堪比千元级的AirPods
  6. 即时通讯应用战争开打,到底谁能最终定义我们的交流方式?
  7. 干了三年的Java,你竟然还不会MySQL性能优化
  8. 高通msm8909 平台camera 系统软件架构
  9. android 平方常规字体,android - Android将Roboto字体设置为粗体,斜体,常规,…(类似于自定义字体系列) - 堆栈内存溢出...
  10. 对象转json时,Date类型字段处理。
  11. python统计pdf字数_使用python统计tex字数(一):最精简版本
  12. 批量处理word文档向下箭头
  13. PAT(甲级)2020年春季考试 7-2 The Judger (25 分) 经验分享与心路历程
  14. 【计算机网络 (谢希仁) 习题题解】第6章 应用层 (1)——域名系统DNS
  15. 大四学年软件公司实习感悟
  16. 什么是阿里云服务器ECS?阿里云服务器的用途
  17. 写一个简单的登录页面!!!(html)
  18. 信息技术基础2(课程笔记)
  19. Java--计算奇数和偶数例子
  20. 759页14万字智慧大楼弱电智能化规划设计方案

热门文章

  1. 【硬件相关】网卡bond配置
  2. static java 内存_final, static,final static 分别放在jvm内存的什么地方?
  3. mysql通配符大全
  4. CSS设置选中网页文字时的背景和颜色
  5. 经典SQL题练习(MySQL版)
  6. 三八妇女节html5,三八妇女节活动主题
  7. C# FileSystemWatcher使用方法简述
  8. PHP设计模式之迭代器模式
  9. thinkpad x1 carbon 黑苹果macOS Mojave 10.14.6 安装
  10. mysql有关权限表有哪几个, 以及各有什么作用 详解.