Você está aqui: Delphi ::: Win32 API (Windows API) ::: Formulários e Janelas |
Listando todas as janelas (ou controles) filhas a partir do handle de uma janela paiQuantidade de visualizações: 13291 vezes |
Em algumas situações nós precisamos listar todas janelas filhas (ou controles) pertencentes a uma determinada janela pai, talvez com a intenção de obter ou enviar conteúdo a estas janelas ou controles. Isso pode ser feito com o auxílio da função EnumChildWindows() da API do Windows. Veja sua assinatura:---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- BOOL EnumChildWindows( HWND hWndParent, WNDENUMPROC lpEnumFunc, LPARAM lParam ); Veja que a função requer um handle para a janela pai e um ponteiro para uma função de Callback, que será chamada a cada vez que uma nova janela filha for encontrada. No argumento lParam nós podemos passar informações adicionais para a função. No exemplo abaixo eu passei um TMemo, para facilitar a exibição do ID, nome de classe e título (caption) da janela filha. Eis o código: ----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
// Função de Callback usada para listar todas as janelas
// filhas a partir do handle de uma janela pai
function EnumChildProc(wnd: HWND; Memo: TMemo): BOOL; stdcall;
var
buf, caption: array[0..255] of char;
id_control: Integer;
begin
// vamos obter o nome da classe da janela filha
GetClassName(wnd, buf, SizeOf(buf) - 1);
// vamos obter o título da janela filha
SendMessage(wnd, WM_GETTEXT, 256, Integer(@Caption));
// vamos obter o ID da janela (ou controle) filha
id_control := GetDlgCtrlID(wnd);
// vamos adicionar as informações ao TMemo
Memo.Lines.Add('ID: ' + IntToStr(id_control) + ' - ' +
' Classe: ' + buf + ' - Caption: ' + caption);
// continue com a próxima janela
Result := True;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Clear;
// vamos listar as janelas (ou controles) filhos a
// partir do handle de uma janela pai. Aqui eu estou
// passando o valor do handle. você pode consultar minhas
// outras dicas nesta seção para aprender a obter o handle
// de uma janela pai
EnumChildWindows(3740682, @EnumChildProc, Integer(Memo1));
end;
Aqui eu rodei um código adicional para obter o handle da Calculadora do Windows e listei todos os seus controles. O resultado foi algo como: ID: 403 - Classe: Edit - Caption: 0, ID: 113 - Classe: Button - Caption: MC ID: 114 - Classe: Button - Caption: MR ID: 115 - Classe: Button - Caption: MS ID: 116 - Classe: Button - Caption: M+ ID: 131 - Classe: Button - Caption: 7 ID: 128 - Classe: Button - Caption: 4 ID: 125 - Classe: Button - Caption: 1 ID: 124 - Classe: Button - Caption: 0 ID: 132 - Classe: Button - Caption: 8 ID: 129 - Classe: Button - Caption: 5 ID: 126 - Classe: Button - Caption: 2 ID: 80 - Classe: Button - Caption: +/- ID: 133 - Classe: Button - Caption: 9 ID: 130 - Classe: Button - Caption: 6 ID: 127 - Classe: Button - Caption: 3 ID: 85 - Classe: Button - Caption: . ID: 90 - Classe: Button - Caption: / ID: 91 - Classe: Button - Caption: * ID: 93 - Classe: Button - Caption: - ID: 92 - Classe: Button - Caption: + ID: 112 - Classe: Button - Caption: = ID: 83 - Classe: Button - Caption: Backspace ID: 82 - Classe: Button - Caption: CE ID: 81 - Classe: Button - Caption: C ID: 401 - Classe: Static - Caption: ID: 107 - Classe: Button - Caption: 1/x ID: 103 - Classe: Button - Caption: sqt ID: 109 - Classe: Button - Caption: % ID: 1000 - Classe: Static - Caption: Você pode usar algumas das funções documentadas nesta seção para obter o handle da janela pai cujas janelas filhas você deseja listar. 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 |





