2011-08-30 127 views

回答

9

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; 
} 

給了我這樣的輸出:

 
Starting EnumWindows() 
Window #1 (<hwnd>): <title> 
Window #2 (<hwnd>): <title> 
Window #3 (<hwnd>): <title> 
<and so on...> 
EnumWindows() ended 

所以EnumWindows()絕對列舉以同步的方式。

+0

正如我測試,它不阻止,只有約1-> 2秒後,窗口列表完全列出,任何其他的想法? – jondinham

+2

@保羅:一定有一個錯誤。你可以發佈使用'EnumWindows()'的代碼嗎?我也測試過它,它只有在通過窗口枚舉完成後纔會阻塞並返回。 –

+0

我再次檢查,我的錯誤。它阻止。 :) – jondinham