2010-02-17 16 views
6

Potrzebuję przechwycić konkretne okna procesu innej firmy. Mogę znaleźć uchwyt okna głównego jako Process.MainWindowHandle, ale co mogę użyć do wyświetlenia innych okien?Jak wyliczyć wszystkie okna w procesie?

Używam C#/.NET

Odpowiedz

3

3rd party aplikacja uruchomiła inne okna nie jak okien potomnych.

Możliwe jest sprawdzenie, jaka jest struktura za pomocą narzędzia Spy ++ dołączonego do programu Visual Studio.

Po tym, byłem w stanie znaleźć niezbędne okna przy użyciu funkcji FindWindowEx korzystając WindowClassName (zaczerpnięte z Spy ++): lastWindows = FindWindowEx (IntPtr.Zero, lastWindows, m.WindowClassName, null);

2

Użyj API Win32 EnumWindows (a jeśli chcesz EnumChildWindows)

[DllImport("user32.dll", CharSet=CharSet.Auto, SetLastError=true)] 
public static extern bool EnumWindows(EnumThreadWindowsCallback callback, IntPtr extraData); 

Następnie sprawdzić, które przetwarza każde okno należy do za pomocą API Win32 GetWindowThreadProcessId

[DllImport("user32.dll", CharSet=CharSet.Auto, SetLastError=true)] 
public static extern int GetWindowThreadProcessId(HandleRef handle, out int processId); 
Powiązane problemy