Comment obtenir un handle de fenêtre de console (HWND)

Résumé

Il peut être utile de manipuler une fenêtre associée à une application console. L’API Win32 fournit une méthode directe permettant d’obtenir le handle de fenêtre associé à une application console. Néanmoins, vous pouvez obtenir la poignée de fenêtre en appelant FindWindow (). Cette fonction récupère un handle de fenêtre en fonction du nom d’une classe ou du nom de la fenêtre. Appelez GetConsoleTitle () pour déterminer le titre actuel de la console. Fournissez ensuite le titre actuel de la console à 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 la console en tant que titre unique. Cela permet d’éviter que le handle de fenêtre incorrect ne soit retourné. Utilisez la fonction SetConsoleTitle () pour modifier le titre de la fenêtre de la console active. Le processus est le suivant :

  1. Appelez GetConsoleTitle () pour enregistrer le titre de la fenêtre de la console active.

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

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

  4. Appel de 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 extraite de l’étape 1 pour restaurer le titre de la fenêtre d’origine.

Testez le HWND obtenu. Par exemple, vous pouvez effectuer un test pour voir si le HWND renvoyé correspond au processus actuel en appelant GetWindowText () sur le HWND et en comparant le résultat avec GetConsoleTitle (). Le HWND obtenu ne peut pas être approprié pour toutes les opérations de gestion de fenêtre.

Exemple de code

La fonction suivante récupère le handle de fenêtre d’application console actuel (HWND). Si la fonction réussit, la valeur de retour est le handle de la fenêtre de la console. En cas d’échec de la fonction, la valeur de retour est NULL. Le contrôle des erreurs est omis 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);   }

Besoin d’aide ?

Développez vos compétences
Découvrez des formations
Accédez aux nouvelles fonctionnalités en avant-première
Rejoindre Microsoft Insider

Ces informations vous ont-elles été utiles ?

Nous vous remercions pour vos commentaires.

Merci pour vos commentaires. Il serait vraisemblablement utile pour vous de contacter l’un de nos agents du support Office.

×