Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何知道EnumWindows何时完成其窗口列表?_C++_Windows_Visual C++ - Fatal编程技术网

C++ 如何知道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接收一个回调函数作为参数,它会一直调用该函数,直到不再列出任何窗口。

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()的代码吗?我也测试过它,它只有在通过窗口完成枚举后才会阻塞并返回。我再次检查,我的错误。它不会阻塞。:)