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作为回调函数传递进去,这样就可以枚举所有顶层窗口,并对每个窗口进行标题和句柄的打印操作。

C++编程API库