Heim >Backend-Entwicklung >C++ >Wie erhalte ich das Hauptfenster-Handle von einer Prozess-ID in C?

Wie erhalte ich das Hauptfenster-Handle von einer Prozess-ID in C?

DDD
DDDOriginal
2024-12-18 16:41:09377Durchsuche

How to Get the Main Window Handle from a Process 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn