Obtention d’un handle de fenêtre de console (HWND)

Cet article explique comment obtenir un handle de fenêtre de console (HWND).

Version du produit d’origine :   Windows Server 2012 R2
Numéro de la base de connaissances initiale :   124103

Résumé

Il peut être utile de manipuler une fenêtre associée à une application de console. L’API Win32 n’offre aucune méthode directe permettant d’obtenir le handle de fenêtre associé à une application console. Toutefois, vous pouvez obtenir le handle de fenêtre en appelant FindWindow() . Cette fonction récupère un handle de fenêtre en fonction d’un nom de classe ou d’un nom de fenêtre.

Appelez GetConsoleTitle() pour déterminer le titre de la console actuelle. Ensuite, fournissez le titre de la console actuelle FindWindow() .

Informations supplémentaires

Étant donné que plusieurs fenêtres peuvent avoir le même titre, vous devez remplacer le titre de la fenêtre de console actuelle par un titre unique. Ce qui permet d’éviter le renvoi d’un descripteur de fenêtre incorrect. Permet SetConsoleTitle() de modifier le titre de la fenêtre de console actuelle. Voici le processus :

  1. Appeler GetConsoleTitle() pour enregistrer le titre de la fenêtre de console actuelle.

  2. Appeler SetConsoleTitle() pour remplacer le titre de la console par un titre unique.

  3. Mettre en veille (40) pour vous assurer que le titre de la fenêtre a été mis à jour.

  4. Call FindWindow (null, uniquetitle), pour obtenir le HWND cet appel renvoie le HWND--ou la valeur null si l’opération a échoué.

  5. Appelez SetConsoleTitle() avec la valeur récupérée à partir de l’étape 1 pour restaurer le titre de la fenêtre d’origine.

Vous devez tester le HWND résultant. Par exemple, vous pouvez vérifier si le HWND renvoyé correspond au processus en cours en appelant GetWindowText() le HWND et en comparant le résultat avec GetConsoleTitle() .

Il n’est pas garanti que le HWND résultant soit approprié pour toutes les opérations de gestion des fenêtres.

Exemple de code

La fonction suivante récupère le handle de fenêtre d’application console (HWND) actuel. Si la fonction réussit, la valeur renvoyée est le handle de la fenêtre de console. Si la fonction échoue, la valeur renvoyée est NULL. Une vérification des erreurs est omise, par souci de concision.

HWND GetConsoleHwnd(void)
   {
       #define MY_BUFSIZE 1024 // Buffer size for console window titles.
       HWND hwndFound;         // This is what is returned to the caller.
       char pszNewWindowTitle[MY_BUFSIZE]; // Contains fabricated
                                           // WindowTitle.
       char pszOldWindowTitle[MY_BUFSIZE]; // Contains original
                                           // WindowTitle.

       // Fetch current window title.

       GetConsoleTitle(pszOldWindowTitle, MY_BUFSIZE);

       // Format a "unique" NewWindowTitle.

       wsprintf(pszNewWindowTitle,"%d/%d",
                   GetTickCount(),
                   GetCurrentProcessId());

       // Change current window title.

       SetConsoleTitle(pszNewWindowTitle);

       // Ensure window title has been updated.

       Sleep(40);

       // Look for NewWindowTitle.

       hwndFound=FindWindow(NULL, pszNewWindowTitle);

       // Restore original window title.

       SetConsoleTitle(pszOldWindowTitle);

       return(hwndFound);
   }