2010-06-03 4 views
0

EnumWindows를 사용하여 창을 열거 할 때, 바탕 화면의 열린 창당 하나가 아닌 수백 개의 핸들이 있습니다.Issue with EnumWindows

먼저 올바른 동작인지 궁금합니다.

둘째, 프로세스 시작 전후에 열려있는 창 사이의 차이점을 얻으 려하면 15-20 개의 새 핸들이 반환됩니다. 일부 플래그를 기반으로 필터링 할 수있는 방법이 있는지 궁금 해서요, 정말 메인 윈도우 핸들이 필요합니다.

아이디어가 있으십니까?

답변

1

프로세스의 기본 창을 가져 오려면 Process.MainWindowHandle property을 사용하십시오.

질문에 대답하기 위해 모든 핸들이 Spy ++를 사용하고 있는지 확인할 수 있습니다.
간단히 말해서 응용 프로그램은 메시지 루프를 실행하기 위해 숨겨진 창을 만듭니다.

+1

+1, 여전히 프로세스의 "주 윈도우"같은 것은 없다는 것을 명심하십시오. IIRC MainWindowHandle은 발견 할 수있는 응용 프로그램에 의해 생성 된 첫 번째 최상위 표시 윈도우를 검색합니다. 일반적으로 큰 문제는 아니지만 여러 가지 최상위 창 (예 : Outlook)을 만드는 애플리케이션의 경우 잘못된 결과가 발생할 수 있습니다. –

0

보이지 않는 시스템/메시지 싱크 창을 무시하고 IsWindowVisible() &을 선택하여 열거 콜백 내에서 필터링 할 수 있습니다.