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: 22379 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, LPCTSTR lpWindowName ); 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); ShowMessage('O handle da janela é: ' + IntToStr(hNotepadWindow)); end; 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); ShowMessage('Vou fechar a janela do Bloco de Notas com o título: ' + tituloJanela); // vamos fechar a janela SendMessage(hNotepadWindow, WM_SYSCOMMAND, SC_CLOSE, 0); end; 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: ' + classeJanela + '?'), 'Fechar', MB_ICONQUESTION + MB_YESNO + MB_DEFBUTTON2) = ID_YES then begin // vamos fechar a janela SendMessage(hNotepadWindow, WM_SYSCOMMAND, SC_CLOSE, 0); end; end else begin ShowMessage('Não foi possível obter o handle da janela'); end; end; 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 |