2011-08-30 11 views

Respuesta

9

EnumWindows() bloques mientras se lleva a cabo la enumeración. Cuando EnumWindows() termina de enumerar a través de las ventanas, devuelve un BOOL.

El siguiente fragmento de código:

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

me da una salida como esta:

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

Así EnumWindows() definitivamente enumera de manera sincrónica.

+0

como probé, no bloquea, solo después de alrededor de 1> 2 segundos, la lista de ventanas está completamente enumerada, ¿alguna otra idea? – jondinham

+2

@Paul: Debe haber un error. ¿Puedes publicar el código que usa 'EnumWindows()'? También lo he probado y bloquea y vuelve solo después de que termine de enumerar a través de las ventanas. –

+0

he comprobado nuevamente, mi error. sí bloquea. :) – jondinham

Cuestiones relacionadas