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
Patricia Arquetteoriginal
2024-12-08 14:51:11186parcourir

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

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