Maison >développement back-end >C++ >Comment récupérer un handle de fenêtre principale à partir de son ID de processus à l'aide d'EnumWindows() ?

Comment récupérer un handle de fenêtre principale à partir de son ID de processus à l'aide d'EnumWindows() ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-15 19:50:16131parcourir

How to Retrieve a Main Window Handle from its Process ID using EnumWindows()?

Récupération du handle de la fenêtre principale à partir de l'ID de processus à l'aide d'EnumWindows()

Dans divers scénarios, il devient nécessaire de récupérer le handle de la fenêtre principale associé à un ID de processus spécifique. Cela vous permet de manipuler le comportement de la fenêtre, par exemple en la plaçant au premier plan ou en interagissant avec ses contrôles.

Semblable à l'approche adoptée par le framework .NET, vous pouvez exploiter la fonction EnumWindows() pour y parvenir. . Voici comment l'implémenter :

Implémentation en C/C :

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);
}

Ce code définit une structure d'assistance, handle_data, pour stocker à la fois l'ID du processus et la poignée de la fenêtre. La fonction find_main_window() utilise EnumWindows() pour énumérer toutes les fenêtres de niveau supérieur, vérifie l'ID de processus associé à chaque fenêtre et filtre les fenêtres qui ne sont pas des fenêtres principales à l'aide de la fonction is_main_window(). Si la fenêtre principale est trouvée, le code stocke son handle dans la structure handle_data et le renvoie.

En suivant cette approche, vous pouvez récupérer le handle de la fenêtre principale à partir d'un ID de processus, vous permettant de contrôler son apparence ou comportement selon les besoins.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn