Cum se obține un ghidaj pentru fereastra consolei (HWND)


Rezumat


Poate fi util să manipulați o fereastră asociată cu o aplicație de consolă. API-ul Win32 nu oferă nicio metodă directă pentru obținerea ghidajului de fereastră asociat cu o aplicație de consolă. Cu toate acestea, puteți obține ghidajul ferestrei prin apelarea FindWindow (). Această funcție preia un ghidaj de fereastră pe baza unui nume de clasă sau a unei ferestre. Apelați GetConsoleTitle () pentru a determina titlul de consolă curent. Apoi, furnizați titlul consolei curente la FindWindow ().

Mai multe informații


Deoarece mai multe ferestre pot avea același titlu, ar trebui să modificați titlul ferestrei curente din consolă într-un titlu unic. Acest lucru vă va ajuta să împiedicați returnarea unui ghidaj de fereastră greșit. Utilizați SetConsoleTitle () pentru a modifica titlul ferestrei de consolă curentă. Iată procesul:
  1. Apelați GetConsoleTitle () pentru a salva titlul ferestrei de consolă curentă.
  2. Apelați SetConsoleTitle () pentru a modifica titlul consolei la un titlu unic.
  3. Apelați în repaus (40) pentru a vă asigura că titlul ferestrei a fost actualizat.
  4. Apelați FindWindow (NULL, uniquetitle) pentru a obține HWND acest apel returnează HWND-sau NULL dacă operațiunea nu a reușit.
  5. Apelați SetConsoleTitle () cu valoarea regăsită de la pasul 1, pentru a restaura titlul original al ferestrei.
Ar trebui să testați HWND rezultate. De exemplu, puteți să testați pentru a vedea dacă HWND returnată corespunde cu procesul curent, apelând GetWindowText () în HWND și comparând rezultatul cu GetConsoleTitle (). HWND rezultate nu sunt garantate pentru a fi potrivite pentru toate operațiile de tratare a ferestrei.

Exemplu de cod

Următoarea funcție preia handle-ul ferestrei aplicației consolă curentă (HWND). Dacă funcția reușește, valoarea returnată este ghidajul ferestrei consolei. Dacă funcția nu reușește, valoarea returnată este NULL. O verificare a erorilor este omisă, pentru concizie.
   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);   }