Der Titel ist teilweise statisch mit einem Variablensuffix. Zum Beispiel "Fenstertitel {- user_id}".Erhalten Sie den Griff eines Fensters mit nicht vollständig bekannten Titel. (C#)
Wie bekomme ich den Griff, ohne den genauen Titel zu kennen?
Der Titel ist teilweise statisch mit einem Variablensuffix. Zum Beispiel "Fenstertitel {- user_id}".Erhalten Sie den Griff eines Fensters mit nicht vollständig bekannten Titel. (C#)
Wie bekomme ich den Griff, ohne den genauen Titel zu kennen?
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;
// ...
}
}
Interessant. Sollte in den meisten Fällen funktionieren. Was passiert aber, wenn ein Prozess mehr als ein Top-Laven-Fenster hat? –
@Serge: Nicht genau sicher ... –
Danke! Wow, ich wusste nie, dass du das umgehen und Win32 API Kludges vermeiden kannst. – Jonas
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.
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);
Anhang? Ich denke du meinst Suffix. Ich werde es für dich reparieren. – Ray