Como obter um HWND (Identificador de Janela do Console)
Este artigo descreve como obter um HWND (Console Window Handle).
Aplica-se a: Windows Server 2012 R2
Número de KB original: 124103
Resumo
Pode ser útil manipular uma janela associada a um aplicativo de console. A API win32 não fornece nenhum método direto para obter o identificador de janela associado a um aplicativo de console. No entanto, você pode obter o identificador de janela chamando FindWindow()
. Essa função recupera um identificador de janela com base em um nome de classe ou nome da janela.
Chame GetConsoleTitle()
para determinar o título atual do console. Em seguida, forneça o título do console atual para FindWindow()
.
Mais informações
Como várias janelas podem ter o mesmo título, você deve alterar o título da janela do console atual para um título exclusivo. O que ajudará a impedir que o identificador de janela errado seja retornado. Use SetConsoleTitle()
para alterar o título da janela do console atual. Aqui está o processo:
Chame
GetConsoleTitle()
para salvar o título da janela do console atual.Chame
SetConsoleTitle()
para alterar o título do console para um título exclusivo.Chame Sleep(40) para garantir que o título da janela seja atualizado.
Chamar
FindWindow
(NULL, uniquetitle), para obter o HWND, essa chamada retornará o HWND ou NULL se a operação falhar.Chame
SetConsoleTitle()
com o valor recuperado da etapa 1 para restaurar o título da janela original.
Você deve testar o HWND resultante. Por exemplo, você pode testar para ver se o HWND retornado corresponde ao processo atual chamando GetWindowText()
o HWND e comparando o resultado com GetConsoleTitle()
.
O HWND resultante não tem garantia de ser adequado para todas as operações de identificador de janela.
Código de exemplo
A função a seguir recupera o HWND (identificador de janela do aplicativo de console) atual. Se a função for bem-sucedida, o valor retornado será o identificador da janela do console. Se a função falhar, o valor retornado será NULL. Alguma verificação de erro é omitida, para brevidade.
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);
}
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários