Come ottenere un handle di finestra della console (HWND)
Questo articolo descrive come ottenere un handle di finestra della console (HWND).
Si applica a: Windows Server 2012 R2
Numero KB originale: 124103
Riepilogo
Può essere utile modificare una finestra associata a un'applicazione console. L'API Win32 non fornisce alcun metodo diretto per ottenere l'handle di finestra associato a un'applicazione console. È tuttavia possibile ottenere l'handle della finestra chiamando FindWindow()
. Questa funzione recupera un handle di finestra in base al nome di una classe o di una finestra.
Chiamare GetConsoleTitle()
per determinare il titolo della console corrente. Specificare quindi il titolo della console corrente a FindWindow()
.
Ulteriori informazioni
Poiché più finestre possono avere lo stesso titolo, è necessario modificare il titolo della finestra della console corrente in un titolo univoco. Ciò consentirà di evitare che venga restituito l'handle di finestra errato. Usare SetConsoleTitle()
per modificare il titolo della finestra della console corrente. Ecco il processo:
Chiamare
GetConsoleTitle()
per salvare il titolo della finestra della console corrente.Chiamare
SetConsoleTitle()
per modificare il titolo della console in un titolo univoco.Chiamare Sleep(40) per assicurarsi che il titolo della finestra sia stato aggiornato.
Chiamata
FindWindow
(NULL, uniquetitle) per ottenere l'HWND che questa chiamata restituisce HWND o NULL se l'operazione non è riuscita.Chiamare
SetConsoleTitle()
con il valore recuperato dal passaggio 1 per ripristinare il titolo della finestra originale.
È consigliabile testare l'HWND risultante. Ad esempio, è possibile verificare se l'HWND restituito corrisponde al processo corrente chiamando GetWindowText()
su HWND e confrontando il risultato con GetConsoleTitle()
.
L'HWND risultante non è sicuramente adatto a tutte le operazioni di handle della finestra.
Codice di esempio
La funzione seguente recupera l'handle della finestra dell'applicazione console corrente (HWND). Se la funzione ha esito positivo, il valore restituito è l'handle della finestra della console. Se la funzione ha esito negativo, il valore restituito è NULL. Per brevità, viene omesso un controllo degli errori.
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);
}
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per