2011-08-30 28 views

Trả lời

9

EnumWindows() khối trong khi điều tra đang diễn ra. Khi EnumWindows() kết thúc liệt kê thông qua các cửa sổ, nó trả về một BOOL.

Đoạn mã sau:

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

mang lại cho tôi một đầu ra như thế này:

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

Vì vậy, chắc chắn EnumWindows() liệt kê một cách đồng bộ.

+0

như tôi đã thử nghiệm, nó không chặn, chỉ sau khoảng 1-> 2 giây sau đó danh sách cửa sổ được liệt kê đầy đủ, bất kỳ ý tưởng nào khác? – jondinham

+2

@Paul: Phải có một sai lầm. Bạn có thể đăng mã sử dụng 'EnumWindows()'? Tôi cũng đã thử nghiệm nó và nó khối và trả về chỉ sau khi nó kết thúc liệt kê thông qua các cửa sổ. –

+0

Tôi đã kiểm tra lại, sai lầm của tôi. nó chặn. :) – jondinham

Các vấn đề liên quan