2010-12-03 6 views
1

Windows API를 통해 현재 열려있는 모든 창 목록을 가져올 수 있지만 IntPtr이 특정 순서로 돌아 오지 않는 것으로 보입니다. 그들이 열리는 순서대로 창문을 얻을 수있는 방법이 있는지 궁금 해서요. 예를 들어 메모장 창 앞에 2 개의 IE 창을 열면 2 개의 IE 창을 메모장 창 앞에 표시하고 싶습니다. 나는 C#에서 이것을하고있다.열린 창 순서 결정

+0

Windows 목록을 반환하기 위해 사용하는 API 호출은 무엇입니까? – KevenK

+0

EnumDesktopWindows –

+1

창이 열리는 동안 앱이 실행 중이면 창을 열 때마다 호출되는 훅을 설치하고 직접 사물을 추적 할 수 있습니다. –

답변

3

핸들 값은 난독 화 된 포인터이므로, 값에 전혀 의존 할 수 없습니다. 그리고 그들은 재활용됩니다.

장거리 샷은 창을 소유 한 스레드의 ID를 가져 오는 GetWindowThreadProcessId()입니다. OpenThread() 핸들을 얻으려면. GetThreadTimes()를 사용하여 해당 스레드가 생성 된시기를 찾습니다. CloseHandle()을 사용하여 정리합니다. 결과는 그러나 추측이지만, 그런 질문을하고 싶어하지 마십시오. 선언에 대해서는 pinvoke.net을 방문하십시오.

+0

파이어 폭스를 제외한 거의 모든 응용 프로그램에서이 기능이 작동한다는 것은 재미 있습니다. 모든 파이어 폭스 창은 같은 스레드에서 생성 된 것 같습니다 (하지만 그 문제를 해결하기 위해 작성했습니다) –

관련 문제