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

Comment obtenir le handle de la fenêtre principale à l'aide d'un ID de processus ?

Patricia Arquette
Libérer: 2024-12-08 14:51:11
original
239 Les gens l'ont consulté

How to Get the Main Window Handle Using a Process ID?

Comment récupérer le handle de la fenêtre principale à l'aide de l'ID de processus :

Pour récupérer le handle de la fenêtre principale d'un processus, vous pouvez utiliser les éléments suivants étapes :

  1. Utilisez la fonction EnumWindows() pour énumérer toutes les fenêtres de niveau supérieur dans le système.
  2. Dans la fonction de rappel enum_windows_callback(), vérifiez si l'ID de processus associé à la fenêtre actuelle correspond à l'ID de processus cible.
  3. Si une correspondance est trouvée, déterminez si la fenêtre actuelle est une fenêtre principale en vérifiant qu'elle n'a pas de propriétaire (GetWindow(handle, GW_OWNER) == (HWND)0) et qu'elle est visible (IsWindowVisible(handle) == TRUE).
  4. Une fois la fenêtre principale identifiée, stockez son handle dans la structure handle_data et renvoyez FALSE pour arrêter l'énumération.

Voici un exemple de code qui met en œuvre ces étapes :

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);
}
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal