2010-11-30 3 views
0

안녕 얘들 아
저는 특정 프로세스의 모든 창을 열거 할 필요가있는 작은 응용 프로그램을 만들고 있습니다.
내가 그렇게 관리는 그러나 시스템의 모든 창문을 열거하고 그냥 내가vb.net/pinvoke : 특정 프로세스 창을 열거하십시오.

GetWindowThreadProcessId(hwnd, proc) 
Dim _Process = Process.GetProcessById(proc) 
Dim _name = _Process.ProcessName 
If (_name = "ProcessName") then 

하지만이 방법을 사용하여 얘기 나하고 있지 않다 과정 인 경우 테스트를 통해 많이 걸릴 것 같다 불필요한 시간. 거기에 특정 처리의 창을 열거 할 수있는 wind32 함수가 있습니다. 감사합니다.

+0

디스플레이에 표시되는 거의 모든 것이 '창'(예 : HWND 및 자체 이벤트 대기열 등)이기 때문입니다. Hans가 처음으로 프로세스의 스레드를 얻은 다음 스레드 * 당 Windows *를 열거하는 방식이 훨씬 효율적입니다. – dguaraglia

답변

1

이미 GetWindowThreadProcessId()를 사용하고 있습니다. 이 함수는 스레드 ID를 반환합니다.이 스레드를 EnumThreadWindows()와 함께 사용하면 스레드가 소유 한 모든 최상위 창을 가져올 수 있습니다. 필요한 경우 EnumChildWindows()는 각 최상위 윈도우가 소유 한 하위 창을 가져옵니다.

이 접근법은 프로세스의 다른 스레드가 소유 한 창을 제공하지 않습니다. 그러나 그것은 매우 드물기 때문에 일반적으로 그들에 대해 알고 싶지 않습니다. 그 전화 끊기 다음 Process.Threads 프로세스의 모든 스레드를 열거 할 ProcessThread.Id 스레드 ID를 가져옵니다.

관련 문제