利用findwindowex函数寻找指定窗口句柄的方法详解

作者:鸡西麻将开发公司 阅读:192 次 发布时间:2025-06-29 12:57:52

摘要:利用FindWindowEx函数寻找指定窗口句柄的方法详解在Windows编程中,有时候我们需要获取某个窗口的句柄以便进行操作。如果已知窗口类名或窗口标题,可以使用FindWindow或FindWindowEx函数来获取窗口句柄。本文将详细介绍FindWindowEx函数的使用方法。1....

利用FindWindowEx函数寻找指定窗口句柄的方法详解

利用findwindowex函数寻找指定窗口句柄的方法详解

在Windows编程中,有时候我们需要获取某个窗口的句柄以便进行操作。如果已知窗口类名或窗口标题,可以使用FindWindow或FindWindowEx函数来获取窗口句柄。本文将详细介绍FindWindowEx函数的使用方法。

1. FindWindowEx函数概述

FindWindowEx函数的定义如下:

```C++

HWND FindWindowEx(HWND hwndParent, HWND hwndChildAfter, LPCTSTR lpszClass, LPCTSTR lpszWindow)

```

其中,各参数的含义如下:

- hwndParent:要查找的窗口的父窗口句柄。如果此参数为NULL,则函数在所有桌面窗口和所有可见非桌面窗口(即该窗口具有WS_VISIBLE样式)之间进行查找。

- hwndChildAfter:要从哪个子窗口开始查找。如果此参数为NULL,则函数从hwndParent的第一个子窗口开始查找。

- lpszClass:要查找窗口的类名。如果此参数为NULL,则返回与窗口标题匹配的第一个窗口句柄。

- lpszWindow:要查找窗口的标题。如果此参数为NULL,则返回与窗口类名匹配的第一个窗口句柄。

FindWindowEx函数返回找到的窗口句柄,如果找不到,则返回NULL。

2. 使用示例

下面给出一个简单的示例来演示如何使用FindWindowEx函数来查找记事本窗口。

```C++

#include

#include

int main()

{

// 查找记事本窗口

HWND hWnd = FindWindowEx(NULL, NULL, "Notepad", NULL);

if (hWnd == NULL)

{

printf("FindWindowEx failed!\n");

return -1;

}

// 向记事本窗口发送一条消息

SendMessage(hWnd, WM_SETTEXT, NULL, (LPARAM)"Hello World!");

return 0;

}

```

上述代码首先调用FindWindowEx函数查找记事本窗口的句柄,然后调用SendMessage函数向该窗口发送一条消息,将窗口标题改为“Hello World!”。

3. 参数详解

在上述示例中,我们使用了如下参数:

- hwndParent:NULL,表示查找所有可见窗口。

- hwndChildAfter:NULL,表示从第一个子窗口开始查找。

- lpszClass:"Notepad",表示查找类名为“Notepad”的窗口。

- lpszWindow:NULL,表示查找所有类名为“Notepad”的窗口。

在实际应用中,我们可能需要根据需要调整这些参数的值。下面分别介绍各参数的用法和注意事项。

3.1. hwndParent

hwndParent参数指定要在哪个父窗口或桌面窗口中查找子窗口。如果hwndParent为NULL,则函数在所有桌面窗口和所有可见非桌面窗口之间进行查找。例如:

```C++

// 查找桌面窗口的句柄

HWND hWnd = FindWindowEx(NULL, NULL, NULL, "Program Manager");

```

上述代码中,第三个参数和第四个参数都为NULL,表示查找所有可见窗口,而第四个参数为“Program Manager”,表示查找窗口标题为“Program Manager”的窗口,即桌面窗口。

3.2. hwndChildAfter

hwndChildAfter参数指定从哪个子窗口(不包括hwndChildAfter本身)开始查找下一个子窗口。如果hwndChildAfter为NULL,则函数从hwndParent的第一个子窗口开始查找。例如:

```C++

// 查找记事本窗口的句柄

HWND hWnd = FindWindowEx(NULL, NULL, "Notepad", NULL);

// 查找记事本编辑框的句柄

HWND hWndEdit = FindWindowEx(hWnd, NULL, "Edit", NULL);

```

上述代码中,第一个FindWindowEx函数调用查找记事本窗口的句柄,第二个FindWindowEx函数调用从记事本窗口的第一个子窗口开始查找下一个类名为“Edit”的子窗口的句柄,即记事本的编辑框。

需要注意的是,hwndChildAfter参数指定的窗口句柄必须是hwndParent的子窗口(不包括hwndChildAfter本身)。否则查找将会失败。例如:

```C++

// 查找计算器窗口的句柄

HWND hWndCalc = FindWindowEx(NULL, NULL, "CalcFrame", "Calculator");

// 查找计算器编辑框的句柄,但是因为hwndEdit不是hwndCalc的子窗口,所以返回的结果是错误的

HWND hWndEdit = FindWindowEx(hWndEdit, NULL, "Edit", NULL);

```

上述代码中,第一个FindWindowEx函数调用查找计算器窗口的句柄,第二个FindWindowEx函数调用从一个未知窗口开始查找下一个类名为“Edit”的子窗口的句柄,因为参数错误而返回了错误的结果。

3.3. lpszClass

lpszClass参数指定要查找窗口的类名。如果lpszClass为NULL,则返回与窗口标题匹配的第一个窗口句柄。例如:

```C++

// 查找便签窗口的句柄

HWND hWnd = FindWindowEx(NULL, NULL, "Notepad", "新建文本文档.txt - 记事本");

```

上述代码中,第三个参数是类名“Notepad”,表示查找类名为“Notepad”的窗口,第四个参数是窗口标题,表示查找标题为“新建文本文档.txt - 记事本”的窗口,即记事本中打开的新建文本文档。

需要注意的是,类名是大小写敏感的。例如,如果使用了错误的大小写形式,查找将会失败。

```C++

// 查找记事本窗口的句柄,但是因为lpszClass参数错误,所以返回NULL

HWND hWnd = FindWindowEx(NULL, NULL, "NotePad", NULL);

```

上述代码中,第三个参数变成了“NotePad”,与实际类名“Notepad”不匹配,所以查找失败。

3.4. lpszWindow

lpszWindow参数指定要查找窗口的标题。如果lpszWindow为NULL,则返回与窗口类名匹配的第一个窗口句柄。例如:

```C++

// 查找计算器窗口的句柄

HWND hWnd = FindWindowEx(NULL, NULL, "CalcFrame", "Calculator");

```

上述代码中,第三个参数是类名“CalcFrame”,表示查找类名为“CalcFrame”的窗口,第四个参数是窗口标题“Calculator”,表示查找标题为“Calculator”的窗口,即Windows自带的计算器应用程序。

需要注意的是,标题也是大小写敏感的。例如,如果使用了错误的大小写形式,查找将会失败。

```C++

// 查找计算器窗口的句柄,但是因为lpszWindow参数错误,所以返回NULL

HWND hWnd = FindWindowEx(NULL, NULL, "CalcFrame", "calculator");

```

上述代码中,第四个参数变成了“calculator”,与实际标题“Calculator”不匹配,所以查找失败。

4. 总结

FindWindowEx函数是一个非常重要的Windows API函数,可用于查找任何一个可见窗口句柄,并可以使用句柄对窗口进行操作。掌握好FindWindowEx函数的使用方法,对于Windows编程非常有帮助。

  • 原标题:利用findwindowex函数寻找指定窗口句柄的方法详解

  • 本文链接:https://qipaikaifa.cn/zxzx/194136.html

  • 本文由深圳中天华智网小编,整理排版发布,转载请注明出处。部分文章图片来源于网络,如有侵权,请与中天华智网联系删除。
  • 微信二维码

    ZTHZ2028

    长按复制微信号,添加好友

    微信联系

    在线咨询

    点击这里给我发消息QQ客服专员


    点击这里给我发消息电话客服专员


    在线咨询

    免费通话


    24h咨询☎️:157-1842-0347


    🔺🔺 棋牌游戏开发24H咨询电话 🔺🔺

    免费通话
    返回顶部