C++:EnumWindows()函数
1. 函数概述
EnumWindows是一个Windows API函数,用于枚举所有屏幕上的顶层窗口。它会遍历系统中所有可见的顶层窗口,并且为每个窗口调用一个指定的回调函数。这个函数在需要获取系统中所有正在运行的应用程序窗口的信息,或者对多个窗口进行批量操作时非常有用。例如,在开发一个窗口管理工具或者系统监控软件时,可以使用EnumWindows来获取所有窗口的句柄,进而获取窗口标题、类名等信息。
2. 函数原型和参数
函数原型如下:
BOOL EnumWindows( WNDENUMPROC lpEnumFunc, LPARAM lParam );
参数说明:
lpEnumFunc:这是一个指向回调函数的指针。回调函数用于处理每个枚举到的窗口。这个回调函数有固定的参数格式,即BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam),其中hWnd是枚举到的窗口句柄,lParam是传递给EnumWindows函数的用户自定义参数。在回调函数中,可以对每个窗口进行检查、操作,如获取窗口标题、检查窗口状态等。
lParam:这是一个用户自定义的参数,它会被传递给lpEnumFunc指向的回调函数。这个参数可以用于在回调函数中传递一些额外的信息,比如用于区分不同的枚举操作或者传递一些数据结构的指针,方便在回调函数中使用。
3. 返回值
函数返回一个BOOL类型的值。如果函数成功地枚举了所有顶层窗口,返回值为非零(TRUE);如果出现错误,比如无法枚举窗口或者回调函数返回错误,返回值为零(FALSE)。
4. 使用示例
以下是一个简单的示例,用于枚举所有顶层窗口并打印出它们的标题和句柄:
#include <windows.h> #include <iostream> BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam) { char windowTitle[MAX_PATH]; GetWindowText(hWnd, windowTitle, MAX_PATH); std::cout << "窗口标题: " << windowTitle << ", 句柄: " << hWnd << std::endl; return TRUE; } int main() { EnumWindows(EnumWindowsProc, 0); return 0; }
在这个示例中,首先定义了一个回调函数EnumWindowsProc。在这个回调函数中,使用GetWindowText函数获取窗口的标题,并将窗口标题和句柄打印出来。然后在main函数中调用EnumWindows函数,将EnumWindowsProc作为回调函数传递进去,这样就可以枚举所有顶层窗口,并对每个窗口进行标题和句柄的打印操作。