Heim >Backend-Entwicklung >C++ >Wie erhalte ich das Hauptfenster-Handle von einer Prozess-ID in C?
So rufen Sie das Hauptfenster-Handle von einer Prozess-ID ab
Frage:
Wie Können Sie das Hauptfenster-Handle von einer bestimmten Prozess-ID abrufen? Sie möchten dieses bestimmte Fenster in den Vordergrund bringen, und Process Explorer scheint diese Aktion nahtlos auszuführen.
Antwort:
Untersuchung des Mechanismus, den .NET zur Bestimmung verwendet Das Hauptfenster zeigte, dass es die Funktion EnumWindows() verwendet. Der folgende C-Code stellt eine ähnliche Implementierung bereit:
struct handle_data { unsigned long process_id; HWND window_handle; }; HWND find_main_window(unsigned long process_id) { handle_data data; data.process_id = process_id; data.window_handle = 0; EnumWindows(enum_windows_callback, (LPARAM)&data); return data.window_handle; } BOOL CALLBACK enum_windows_callback(HWND handle, LPARAM lParam) { handle_data& data = *(handle_data*)lParam; unsigned long process_id = 0; GetWindowThreadProcessId(handle, &process_id); if (data.process_id != process_id || !is_main_window(handle)) return TRUE; data.window_handle = handle; return FALSE; } BOOL is_main_window(HWND handle) { return GetWindow(handle, GW_OWNER) == (HWND)0 && IsWindowVisible(handle); }
Dieser Code durchläuft alle Fenster der obersten Ebene und prüft, ob die Prozess-ID des Fensters mit der gewünschten Prozess-ID übereinstimmt. Wenn dies der Fall ist, überprüft es weiter, ob das Fenster ein Hauptfenster ist (keinen Besitzer hat und sichtbar ist) und gibt sein Handle zurück.
Das obige ist der detaillierte Inhalt vonWie erhalte ich das Hauptfenster-Handle von einer Prozess-ID in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!