如何知道EnumWindows何时完成窗口列表?因为EnumWindows接收一个回调函数作为参数,并且它会持续调用该函数,直到没有更多窗口需要列出。
EnumWindows()
在枚举窗口时会阻塞。当 EnumWindows()
枚举完窗口后,它会返回一个BOOL
值。
以下是代码片段:
#include <windows.h>
#include <cstdio>
BOOL CALLBACK MyEnumWindowsProc(HWND hwnd, LPARAM lparam)
{
int& i = *(reinterpret_cast<int*>(lparam));
++i;
char title[256];
::GetWindowText(hwnd, title, sizeof(title));
::printf("Window #%d (%x): %s\n", i, hwnd, title);
return TRUE;
}
int main()
{
int i = 0;
::printf("Starting EnumWindows()\n");
::EnumWindows(&MyEnumWindowsProc, reinterpret_cast<LPARAM>(&i));
::printf("EnumWindows() ended\n");
return 0;
}
执行后会输出以下内容:
开始 EnumWindows() 窗口 #1 (<hwnd>):<title> 窗口 #2 (<hwnd>):<title> 窗口 #3 (<hwnd>):<title> <诸如此类...> EnumWindows() 结束
因此,EnumWindows()
明显以同步方式枚举。
EnumWindows()
的代码吗?我也测试过了,它会在枚举完窗口后才返回。 - In silico