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: 13166 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:BOOL EnumChildWindows( HWND hWndParent, WNDENUMPROC lpEnumFunc, 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: // 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); 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 |