Maison >développement back-end >C++ >Comment obtenir le handle de la fenêtre principale à partir d'un ID de processus en C ?

Comment obtenir le handle de la fenêtre principale à partir d'un ID de processus en C ?

DDD
DDDoriginal
2024-12-18 16:41:09378parcourir

How to Get the Main Window Handle from a Process ID in C  ?

Comment récupérer le handle de la fenêtre principale à partir d'un ID de processus

Question :

Comment pouvez-vous récupérer le handle de la fenêtre principale à partir d’un ID de processus donné ? Vous souhaitez mettre cette fenêtre particulière au premier plan, et Process Explorer semble effectuer cette action de manière transparente.

Réponse :

Enquêter sur le mécanisme utilisé par .NET pour déterminer la fenêtre principale a révélé qu'elle utilise la fonction EnumWindows(). Le code C suivant fournit une implémentation similaire :

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 parcourt toutes les fenêtres de niveau supérieur et vérifie si l'ID de processus de la fenêtre correspond à l'ID de processus souhaité. Si c'est le cas, il vérifie en outre si la fenêtre est une fenêtre principale (n'a pas de propriétaire et est visible) et renvoie son handle.

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