2011-08-30 5 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

@Paul : 실수가 있어야합니다. EnumWindows()를 사용하는 코드를 게시 할 수 있습니까? 또한 테스트를 거쳤으며 창을 통해 열거 된 후에 만 ​​차단되고 반환됩니다. –

+0

내 실수를 다시 확인했습니다. 그것은 차단합니다. :) – jondinham

관련 문제