2009-03-12 5 views

Antwort

12

Schauen Sie sich alle Prozesse an und überprüfen Sie die MainWindowTitle. (Sie können regexps verwenden oder StartsWith, etc)

foreach(Process proc in Process.GetProcesses()) 
{ 
    if(proc.MainWindowTitle.StartsWith("Some String")) 
    { 
     IntPtr handle = proc.MainWindowHandle; 
     // ... 
    } 
} 
+1

Interessant. Sollte in den meisten Fällen funktionieren. Was passiert aber, wenn ein Prozess mehr als ein Top-Laven-Fenster hat? –

+0

@Serge: Nicht genau sicher ... –

+0

Danke! Wow, ich wusste nie, dass du das umgehen und Win32 API Kludges vermeiden kannst. – Jonas

5

This CodeProject article beschreibt, wie Top-Level-Fenster aufgelistet werden (basierend auf Win32 API EnumWindows). Sie können es leicht ändern, um auf einen Teilfenstertitel zu filtern: Ändern Sie EnumWindowsCallBack.

HTH.

2

Get von Klassennamen und Eltern Fenstergriff. Zum Beispiel: Holen Sie den Startknopf mit win32api. Zuerst kennen Sie den Klassennamen des übergeordneten Fensters mit dem Tool spyxx.

[DllImport("user32.dll")] 
public static extern IntPtr FindWindowEx(IntPtr handleParent, IntPtr handleChild, string className, string WindowName); 
[DllImport("user32.dll")] 
public static extern IntPtr FindWindow(string className, string windowTitle); 

Verbrauch:

IntPtr handle = FindWindowEx(FindWindow("Shell_TrayWnd",null), new IntPtr(0), "Button", null); 
Verwandte Themen