C++ 如何知道EnumWindows何时完成其窗口列表?
如何知道EnumWindows何时完成其窗口列表?因为EnumWindows接收一个回调函数作为参数,它会一直调用该函数,直到不再列出任何窗口。C++ 如何知道EnumWindows何时完成其窗口列表?,c++,windows,visual-c++,C++,Windows,Visual C++,如何知道EnumWindows何时完成其窗口列表?因为EnumWindows接收一个回调函数作为参数,它会一直调用该函数,直到不再列出任何窗口。EnumWindows()在枚举过程中阻塞。当EnumWindows()通过窗口完成枚举时,它返回一个BOOL 以下代码段: #include <windows.h> #include <cstdio> BOOL CALLBACK MyEnumWindowsProc(HWND hwnd, LPARAM lparam) {
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;
}
#包括
#包括
BOOL回调MyEnumWindowsProc(HWND-HWND,LPARAM-LPARAM)
{
int&i=*(重新解释铸造(lparam));
++一,;
字符标题[256];
::GetWindowText(hwnd,title,sizeof(title));
::printf(“窗口#%d(%x):%s\n”,i,hwnd,title);
返回TRUE;
}
int main()
{
int i=0;
::printf(“正在启动EnumWindows()\n”);
::EnumWindows(&MyEnumWindowsProc,reinterpret_cast(&i));
::printf(“EnumWindows()已结束\n”);
返回0;
}
为我提供如下输出:
Starting EnumWindows()
Window #1 (<hwnd>): <title>
Window #2 (<hwnd>): <title>
Window #3 (<hwnd>): <title>
<and so on...>
EnumWindows() ended
正在启动EnumWindows()
窗口#1():
窗口#2():
窗口#3():
EnumWindows()已结束
所以
EnumWindows()
肯定是以同步方式枚举的。正如我测试的那样,它不会阻塞,只有在大约1->2秒后,窗口列表才完全列出,还有其他想法吗?@Paul:一定是搞错了。你能发布使用EnumWindows()的代码吗?我也测试过它,它只有在通过窗口完成枚举后才会阻塞并返回。我再次检查,我的错误。它不会阻塞。:)