Jak získat popisovač okna (HWND) konzoly

Souhrn

Může být užitečné pro práci s oknem přidružené aplikace konzoly. Win32 API poskytuje žádné přímé metodu, jak získat popisovač okna přidružené aplikace konzoly. Však můžete získat popisovač okna pomocí volání FindWindow(). Tato funkce načte popisovač okna na základě názvu třídy nebo název okna.


Volání GetConsoleTitle() zjistit aktuální název konzoly. Zadejte aktuální název konzoly pro FindWindow().

Další informace

Více oken může mít stejný název, a proto byste měli změnit na jedinečný název aktuální název okna konzoly. To pomůže zabránit vracených popisovač okna chybný. Chcete-li změnit aktuální záhlaví okna konzoly pomocí SetConsoleTitle(). Zde je postup:

  1. Volání GetConsoleTitle() uložit aktuální záhlaví okna konzoly.
  2. Volání SetConsoleTitle() změna názvu konzoly jedinečný název.
  3. Volání Sleep(40) Chcete-li zajistit, aby že byl aktualizován název okna.
  4. Volání FindWindow (NULL, uniquetitle), získat HWND toto volání vrátí HWND--nebo NULL Pokud operace se nezdařila.
  5. Volání SetConsoleTitle() s hodnotou načtena z kroku 1, chcete-li obnovit původní záhlaví okna.
Je vhodné otestovat výsledný HWND. Například můžete otestovat zobrazíte, pokud výsledný HWND odpovídá aktuální proces voláním GetWindowText() na HWND a porovnání výsledků s GetConsoleTitle().


Není zaručeno, že výsledný HWND být vhodné pro všechny operace popisovač okna.

Ukázkový kód

Následující funkce vyhledá aktuální konzoly aplikace popisovač okna (HWND). Pokud funkce úspěšná, vrácená hodnota je popisovač okna konzoly. Pokud selže funkce, vrácená hodnota je NULL. Některé kontroly chyb je vynechán, pro stručnost.

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

Vlastnosti

ID článku: 124103 - Poslední kontrola: 10. 1. 2017 - Revize: 1

Váš názor