2011-08-30 17 views

risposta

9

EnumWindows() blocchi mentre è in corso l'enumerazione. Quando EnumWindows() termina l'enumerazione attraverso le finestre, restituisce un BOOL.

Il seguente frammento di codice:

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

mi dà un output come questo:

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

Così EnumWindows() enumera sicuramente in modo sincrono.

+0

come ho provato, non blocca, solo dopo circa 1-> 2 secondi quindi l'elenco delle finestre è completamente elencato, qualsiasi altra idea? – jondinham

+2

@Paul: deve esserci un errore. Puoi pubblicare il codice che usa 'EnumWindows()'? L'ho anche testato e blocca e ritorna solo dopo aver terminato di enumerare attraverso le finestre. –

+0

ho controllato di nuovo, mio ​​errore. blocca. :) – jondinham

Problemi correlati