Maison > développement back-end > C++ > Comment puis-je obtenir un handle de fenêtre principale à partir d'un ID de processus dans .NET et C ?

Comment puis-je obtenir un handle de fenêtre principale à partir d'un ID de processus dans .NET et C ?

Barbara Streisand
Libérer: 2024-12-11 19:34:12
original
485 Les gens l'ont consulté

How Can I Get a Main Window Handle from a Process ID in .NET and C  ?

Récupération du handle de la fenêtre principale à partir de l'ID de processus

Dans le but de mettre une fenêtre spécifique au premier plan, une compréhension de la façon d'obtenir son Le handle de la fenêtre principale à partir de son ID de processus est crucial. Ce processus est généralement utilisé pour gérer les fenêtres et les mettre en évidence.

Solution utilisant .NET et EnumWindows()

Il existe une implémentation .NET qui utilise EnumWindows() pour identifier la fenêtre principale. Cette fonction énumère toutes les fenêtres de niveau supérieur du système, vous permettant de trouver celle associée à un processus particulier.

Implémentation du code en C

Voici un code C extrait qui démontre la même approche que l'implémentation .NET :

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 code crée une fonction de rappel qui vérifie l'ID de processus de chaque fenêtre et son statut de visibilité pour déterminer s'il s'agit de la fenêtre principale. S'il correspond à l'ID de processus et aux critères de visibilité spécifiés, le handle de fenêtre est stocké dans la structure handle_data.

En appelant EnumWindows() avec cette fonction de rappel, vous pouvez parcourir toutes les fenêtres de niveau supérieur, identifier la principale fenêtre pour l’ID de processus spécifié et obtenez son handle. Cette poignée peut ensuite être utilisée pour amener la fenêtre vers l'avant ou effectuer d'autres opérations liées à la fenêtre.

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!

source:php.cn
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