如何知道EnumWindows何时完成窗口列表?

5
如何知道EnumWindows何时完成窗口列表?因为EnumWindows接收一个回调函数作为参数,并且它会持续调用该函数,直到没有更多窗口需要列出。
1个回答

10

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() 明显以同步方式枚举。


根据我的测试,它并没有被阻止,只是大约需要1->2秒钟才能完全列出窗口列表,还有其他的想法吗? - jondinham
2
@Paul:一定是有误。你能发一下使用 EnumWindows() 的代码吗?我也测试过了,它会在枚举完窗口后才返回。 - In silico
我再次检查了,我的错误。它确实被阻止了。 :) - jondinham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接