找寻窗口句柄

FindWindow

FindWindow这个函数检索顶级窗口的类名和窗口名称匹配指定的字符串。这个函数不搜索子窗口。

该函数是个宏,定义如下 

#ifdef UNICODE
#define FindWindow  FindWindowW
#else
#define FindWindow  FindWindowA
#endif // !UNICODE

 ​​​​​​FindWindowW 函数 (winuser.h) - Win32 apps | Microsoft Learn

 FindWindowA 函数 (winuser.h) - Win32 apps | Microsoft Learn

与其他A和W结尾的win32 api一样,只是Unicode与Asicii字符的区别。

HWND FindWindowW(
  [in, optional] LPCWSTR lpClassName,
  [in, optional] LPCWSTR lpWindowName
);

 参数说明:

 lpClassName:窗口类名

 lpWindowName:窗口标题

两个参数是可选的,提供任意一个,另一个设置为NULL,就可以找到想找的窗口句柄。

现在问题转化为如何找到窗口类名或者窗口标题。

何为窗口标题?如图,这位置包含标点符号在内的任何字符构成窗口标题。也可以通过EnumWindows 函数来找寻窗口类名和窗口标题。

窗口类名是创建窗口时候注册的系统的,没代码看不到。通过EnumWindows枚举窗口句柄可以找到目标窗口的窗口类名。

EnumWindows 

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

MSDN: EnumWindows | Microsoft Learnicon-default.png?t=N7T8https://learn.microsoft.com/en-us/previous-versions/aa925110(v=msdn.10)?redirectedfrom=MSDN

WINUSERAPI
BOOL
WINAPI
EnumWindows(
    _In_ WNDENUMPROC lpEnumFunc,
    _In_ LPARAM lParam);

参数说明

  • lpEnumFunc:
    [in] 回调函数指针,该函数会被系统调用,系统会设置HWND hwnd, LPARAM lParam 两个参数
  • lParam
    [in, out] 指定一个传递给回调函数的应用程序定义值,比如一个Vector,用来存储句柄

返回值

如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。

回调函数示例

BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) {
	// 获取窗口标题
	char title[256];
	GetWindowTextA(hwnd, title, sizeof(title));
	cout << title;

	// 获取窗口类名
	char className[256];
	GetClassNameA(hwnd, className, sizeof(className));

	cout << className << endl;
    // 继续枚举下一个窗口
	return TRUE;
}

相关推荐

  1. 泄露(handle leakage)

    2024-06-10 07:38:03       21 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-10 07:38:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-10 07:38:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-10 07:38:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-10 07:38:03       18 阅读

热门阅读

  1. 哈夫曼树详解

    2024-06-10 07:38:03       6 阅读
  2. UML的用例图

    2024-06-10 07:38:03       8 阅读
  3. SASS控制指令与循环

    2024-06-10 07:38:03       6 阅读
  4. sass详解

    2024-06-10 07:38:03       14 阅读
  5. 设备安装施工的一点总结

    2024-06-10 07:38:03       6 阅读
  6. conda常见命令

    2024-06-10 07:38:03       7 阅读
  7. Elasticsearch 详细介绍和经典应用

    2024-06-10 07:38:03       8 阅读
  8. 【数据结构】队列的应用(详解)

    2024-06-10 07:38:03       9 阅读
  9. 使用Spring Boot实现Redis多数据库缓存

    2024-06-10 07:38:03       11 阅读
  10. 小米测开面经

    2024-06-10 07:38:03       9 阅读