2009-12-17 6 views
4

스레드가 주어진 프로세스에 대해 Windows 핸들을 프로그램 방식으로 감지 할 수 있습니까?스레드에 Windows 핸들이 있는지 어떻게 알 수 있습니까?

spy ++는이 정보를 제공하지만 프로그래밍 방식으로 처리해야합니다.

. C#에서이 작업을 수행해야하지만 .net 진단 라이브러리는이 정보를 제공하지 않습니다. 나는 스파이가 ++에 대해 모르는 몇몇 윈도우 API 호출을 사용하고 있다고 상상한다.

디버깅하려는 시스템의 코드에 액세스 할 수 있습니다. 타이머가 호출하는 코드를 주기적으로 임베드하여 얼마나 많은 스레드가 윈도우를 처리하고이 정보를 기록 하는지를 탐지합니다.

감사

답변

3
당신이 승리 API 함수를 사용할 수 있다고 생각

: EnumWindowsProc를 창 핸들을 반복하고 GetWindowThreadProcessId

가 확인하시기 바랍니다 처리 주어진 윈도우와 관련된 스레드 ID 및 프로세스 ID를 얻을 수 있습니다 예를 들어 아래한다면 당신을 위해 일하십시오 :

이 코드는 System.Diagnostics를 사용하여 프로세스와 스레드를 반복합니다.

... 
process chrome b70 
    thread b78 
     window 2d04c8 
     window 10354 
... 
    thread bf8 
    thread c04 
... 
: 위의이 같은 콘솔 떨어지게에 덤프해야하는 코드의

private IntPtr[] GetWindowHandlesForThread(int threadHandle) 
{ 
    _results.Clear(); 
    EnumWindows(WindowEnum, threadHandle); 
    return _results.ToArray(); 
} 

private delegate int EnumWindowsProc(IntPtr hwnd, int lParam); 

[DllImport("user32.Dll")] 
private static extern int EnumWindows(EnumWindowsProc x, int y); 
[DllImport("user32.dll")] 
public static extern int GetWindowThreadProcessId(IntPtr handle, out int processId); 

private List<IntPtr> _results = new List<IntPtr>(); 

private int WindowEnum(IntPtr hWnd, int lParam) 
{   
    int processID = 0; 
    int threadID = GetWindowThreadProcessId(hWnd, out processID); 
    if (threadID == lParam) _results.Add(hWnd); 
    return 1; 
} 

결과 : 나는 GetWindowHandlesForThread 함수를 호출하고있어 각 스레드 ID를

foreach (Process procesInfo in Process.GetProcesses()) 
{ 
    Console.WriteLine("process {0} {1:x}", procesInfo.ProcessName, procesInfo.Id); 
    foreach (ProcessThread threadInfo in procesInfo.Threads) 
    { 
     Console.WriteLine("\tthread {0:x}", threadInfo.Id); 
     IntPtr[] windows = GetWindowHandlesForThread(threadInfo.Id); 
     if (windows != null && windows.Length > 0) 
      foreach (IntPtr hWnd in windows) 
       Console.WriteLine("\t\twindow {0:x}", hWnd.ToInt32()); 
    } 
} 

GetWindowHandlesForThread 구현 (아래 코드 참조)

+0

많은 감사 !!! 그것이 내가 필요한 것입니다. –

관련 문제