Você está aqui: Delphi ::: Win32 API (Windows API) ::: Formulários e Janelas |
Como usar a função FindWindow() da API do Windows para retornar o handle de uma determinada janela de alto-nívelQuantidade de visualizações: 22260 vezes |
A função FindWindow() da API do Windows é muito útil quando precisamos obter o handle de uma determinada janela de alto-nível (esta função não nos permite localizar janelas-filhas). Veja sua assinatura:HWND FindWindow( LPCTSTR lpClassName, Esta função possui dois parâmetros: lpClassName - É um ponteiro para uma string terminada em null que especifica o nome de classe ou um átomo de classe criado por uma chamada anterior à função RegisterClass() ou RegisterClassEx(). O átomo deve estar no valor de baixa-ordem (low-order) de lpClassName e o valor de alta-ordem (high-order) deve ser zero. Se lpClassName apontar para uma string, ele especifica o nome de classe da janela. O nome de classe pode ser qualquer nome registrado anteriormente com uma chamada à RegisterClass() ou RegisterClassEx(), ou qualquer nome de classe dos controles pré-definidos. Se lpClassName for null, a funções encontrará todas as janelas cujos títulos sejam iguais ao parâmetro lpWindowName. lpWindowName - É um ponteiro para uma string terminada em null que especifica o nome da janela, ou melhor, o título da janela. Se este parâmetro for null, todas as janelas serão consideradas e a função FindWindow() retornará a primeira janela da lista. Veja um trecho de código no qual obtemos um handle para a janela do Bloco de Notas. procedure TForm1.Button1Click(Sender: TObject); var hNotepadWindow: HWND; begin hNotepadWindow := FindWindow('notepad', nil); Note que, se houver várias janelas do Bloco de Notas abertas, a função retornará apenas o handle para a primeira janela ou, mais comumente, a última janela a estar ativa. Desta forma, abra algumas janelas do Bloco de Notas e vamos fechar uma delas com o seguinte código: procedure TForm1.Button1Click(Sender: TObject); var hNotepadWindow: HWND; tituloJanela: array[0..255] of Char; tamTituloJanela: Integer; begin hNotepadWindow := FindWindow('notepad', nil); tamTituloJanela := 256; // vamos fechar a janela com o handle obtido // primeiro obtemos o título da janela a ser fechada GetWindowText(hNotepadWindow, tituloJanela, tamTituloJanela); Vejamos agora como encontrar uma janela fornecendo apenas o nome da janela (ou melhor, seu título). Veja: procedure TForm1.Button1Click(Sender: TObject); var hNotepadWindow: HWND; classeJanela: array[0..255] of Char; tamClasseJanela: Integer; begin // vamos localizar e fechar uma janela baseado apenas em seu título hNotepadWindow := FindWindow(nil, 'Sem título - Bloco de notas'); tamClasseJanela := 256; // encontramos a janela? if hNotepadWindow <> 0 then begin // vamos obter o nome de classe da janela GetClassName(hNotepadWindow, classeJanela, tamClasseJanela); // vamos perguntar ao usuário se ele deseja mesmo fechar a janela if Application.MessageBox(PChar('Deseja mesmo fechar a janela com o nome de classe: ' + Neste último trecho de código nós encontramos a janela de acordo com o título fornecido e em seguida usamos a função GetClassName() da API do Windows para obter o nome de classe de janela. Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009. |
![]() |
Desafios, Exercícios e Algoritmos Resolvidos de Delphi |
Veja mais Dicas e truques de Delphi |
Dicas e truques de outras linguagens |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |