Este artigo explica em detalhes como o Delphi obtém identificadores e envia mensagens na forma de exemplos. As instruções de uso específicas são as seguintes:
Encontre o identificador de outra janela:
handle := FindWindow(nil,PChar('Título da janela'));//Encontre o identificador do formulário
Encontre subformulários:
childHandle := FindWindowEx(handle,0,'classe do subformulário','título do subformulário');
Também existe uma API para enumerar subformulários.
EnumChildWindows(identificador do corpo principal, função @callback, parâmetros do usuário);
Para usar esta função, você mesmo precisa escrever uma função de retorno de chamada, como:
function EnumChildProc(ahWND:HWND; param:LPARAM):boolean;stdcall;sendmessage(handle,message,wl,rl)
unidade Unit1; interface usa Windows,Messages,Tlhelp32,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls;type TForm1=class(TForm)procedure FormCreate(Sender: TObject); end; var Form1: TForm1;implementação{ $R *.DFM}procedimento TForm1.FormCreate(Sender: TObject);var a,b:PAnsiChar;h:HWND;beginh:= FindWindow(nil,'abc.txt - Notepad');h:= FindWindowEx(h,0,'edit', nil );SendMessage(h,WM_SETTEXT,255,Integer(PChar('Estou aqui para medir')));ShowMessage( IntToStr(h));fim;
SendMessage(TreeView.Handle,TVM_SETBKCOLOR,0,RGB(255,0,0)); Defina a cor de fundo da TV SendMessage(Button.Handle,WM_LBUTTONDOWN,0,0); , 0,0); Levante o botão esquerdo do mouse SendMessage(Edit.Handle,WM_SETTEXT,255,Integer(PChar('abc'))); Passe o texto SendMessage(Edit.Handle,WM_Char,Wparam('Q'),2); SendMessage( Button.Handle,BM_SETSTYLE,BS_RADIOBUTTON,1); Alterar estilo do botão SendMessage(ComboBox.Handle,CB_SETDropPEDWIDTH,300,0 Alterar CBDownWidth);
WM_CUT, WM_COPY e WM_PASTE recortar, copiar, colar
Implemente qualquer combinação de teclas:
keybd_event(ord('V'), MapVirtualKey(ord('V'), 0), 0, 0);keybd_event(ord('V') , MapVirtualKey(ord('V'), 0), KEYEVENTF_KEYUP, 0);keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), KEYEVENTF_KEYUP, 0);
Descrição SendMessageA: Chame a função de janela de uma janela para enviar uma mensagem para essa janela. Esta função não retorna a menos que a mensagem seja processada
SendMessage contém 4 parâmetros:
1. A janela de identificador de janela hwnd de 32 bits pode ser qualquer tipo de objeto de tela, porque o Win32 pode manter identificadores para a maioria dos objetos visuais
2. wMsg é um valor constante usado para distinguir outras mensagens. Essas constantes podem ser constantes predefinidas em unidades Windows ou constantes personalizadas.
3. wParam geralmente é um valor constante relacionado à mensagem ou pode ser o identificador da janela ou controle
4. lParam geralmente é um ponteiro que aponta para dados na memória. Como WParm, lParam e Pointer são todos de 32 bits, eles podem ser convertidos entre si.
Descrição detalhada da função wMsg:
★WM_Create cria uma janela
★WM_DESTROY Enviado quando uma janela é destruída
★WM_MOVE Mover uma janela
★WM_SIZE Alterar o tamanho de uma janela
★WM_ACTIVATE Uma janela é ativada ou desativada
★WM_SETFOCUS Uma janela ganha foco
★WM_KILLFOCUS Uma janela perde o foco
★WM_ENABLE altera uma janela para o estado Habilitado
★WM_SETREDRAW Defina se a janela pode ser redesenhada
★WM_SETTEXT A aplicação envia esta mensagem para definir o texto de uma janela
★WM_GETTEXT A aplicação envia esta mensagem para copiar o texto da janela correspondente para o buffer.
★WM_GETTEXTLENGTH Obtém o comprimento do texto relacionado a uma janela (excluindo caracteres nulos)
★WM_PAINT pede para uma janela se repintar
★WM_CLOSE envia um sinal quando uma janela ou aplicativo deve ser fechado.
★WM_QUERYENDSESSION O usuário escolhe encerrar a caixa de diálogo ou o próprio programa chama a função ExitWindows
★WM_QUIT é usado para finalizar a execução do programa
★WM_QUERYOPEN Quando a janela do usuário for restaurada ao seu tamanho e posição anteriores, envie esta mensagem para um ícone
★WM_ERASEBKGND Quando o fundo da janela deve ser apagado (por exemplo, quando a janela muda de tamanho)
★WM_SYSCOLORCHANGE Quando a cor do sistema mudar, envie esta mensagem para todas as janelas de nível superior
★Após a mensagem WM_QUERYENDSESSION, esta mensagem é enviada ao aplicativo para avisar se a conversa terminou.
★WM_SHOWWINDOW Esta mensagem é enviada para esta janela quando a janela é ocultada ou exibida.
★WM_ACTIVATEAPP envia esta mensagem para a aplicação qual janela está ativa e qual está inativa.
★WM_FONTCHANGE Esta mensagem é enviada para todas as janelas de nível superior quando a biblioteca de recursos de fontes do sistema é alterada.
★WM_TIMECHANGE Envie esta mensagem para todas as janelas de nível superior quando a hora do sistema mudar
★WM_CANCELMODE Envie esta mensagem para cancelar um modo em andamento (operação)
★WM_SETCURSOR Se o mouse fizer com que o cursor se mova em uma janela
★WM_ENDSESSION Quando o processo do sistema falha e a entrada do mouse não é capturada, uma mensagem é enviada para uma janela.
★WM_MOUSEACTIVATE envia esta mensagem para a janela atual quando o cursor está em uma janela inativa e o usuário está pressionando o botão do mouse.
★WM_CHILDACTIVATE Envie esta mensagem para a janela filha MDI quando o usuário clicar na barra de título desta janela ou quando a janela for ativada, movida ou redimensionada
★WM_QUEUESYNC Esta mensagem é enviada por um programa de treinamento baseado em computador, e a mensagem de entrada do usuário é separada pelo programa de gancho de WH_JOURNALPALYBACK
★WM_GETMINMAXINFO Esta mensagem é enviada para a janela quando ela está prestes a mudar de tamanho ou posição.
★WM_PAINTICON Enviado para uma janela minimizada quando seu ícone está prestes a ser redesenhado
★WM_ICONERASEBKGND Esta mensagem é enviada para uma janela minimizada somente se seu fundo precisar ser redesenhado antes de desenhar o ícone.
★WM_NEXTDLGCT★Envie esta mensagem para um programa de caixa de diálogo para alterar a posição do foco
★WM_SPOOLERSTATUS Esta mensagem é emitida sempre que um trabalho é adicionado ou subtraído da fila de gerenciamento de impressão.
★WM_DRAWITEM Enviado quando a aparência visual do botão, caixa de combinação, caixa de listagem, menu muda
★WM_MEASUREITEM Quando um botão, caixa de combinação, caixa de listagem, controle de visualização de lista ou item de menu é criado
★WM_VKEYTOITEM Esta mensagem possui um estilo LBS_WANTKEYBOARDINPUT emitido para seu proprietário em resposta à mensagem WM_KEYDOWN
★WM_CHARTOITEM Esta mensagem é enviada por uma caixa de listagem no estilo LBS_WANTKEYBOARDINPUT para seu proprietário em resposta à mensagem WM_CHAR
★WM_SETFONT Ao desenhar um texto, o programa envia esta mensagem para obter a cor a ser utilizada pelo controle.
★WM_GETFONT A aplicação envia esta mensagem para obter a fonte do texto desenhado pelo controle atual.
★WM_SETHOTKEY A aplicação envia esta mensagem para associar uma janela a uma tecla de atalho.
★WM_GETHOTKEY A aplicação envia esta mensagem para determinar se a tecla de atalho está associada a uma janela
★WM_QUERYDRAGICON Esta mensagem é enviada para uma janela minimizada Quando esta janela está prestes a ser arrastada e solta e não há nenhum ícone definido em sua classe, a aplicação pode retornar um ícone ou identificador de cursor. o usuário arrasta e solta o ícone.
★WM_COMPAREITEM Envie esta mensagem para determinar a posição relativa dos itens recém-adicionados na caixa de combinação ou caixa de listagem
★WM_COMPACTING mostra que a memória está muito baixa.
★WM_WINDOWPOSCHANGING Envie esta mensagem para a função setwindowpos ou outras funções de gerenciamento de janela quando o tamanho e a posição da janela estiverem prestes a ser alterados.
★WM_WINDOWPOSCHANGED Envie esta mensagem para a função setwindowpos ou outras funções de gerenciamento de janela quando o tamanho e a posição da janela forem alterados.
★WM_POWER Esta mensagem é enviada quando o sistema está prestes a entrar no estado de pausa.
★WM_COPYDATA Esta mensagem é enviada quando um aplicativo passa dados para outro aplicativo
★WM_CANCELJOURNA Quando um usuário cancela o estado de ativação do log do programa, envie esta mensagem ao programa
★WM_NOTIFY Quando ocorre um evento de um controle ou o controle precisa obter alguma informação, esta mensagem é enviada para sua janela pai.
★WM_INPUTLANGCHANGEREQUEST Quando o usuário seleciona um idioma de entrada ou a tecla de atalho do idioma de entrada muda
★WM_INPUTLANGCHANGE Esta mensagem é enviada para a janela de nível superior afetada quando a cena da plataforma for alterada.
★WM_TCARD Esta mensagem é enviada à aplicação quando o programa inicializa a rotina de ajuda do Windows.
★WM_HELP Esta mensagem mostra que o usuário pressionou F1 Se um menu estiver ativado, esta mensagem será enviada para o menu associado a esta janela. Caso contrário, será enviada para a janela com foco. mensagem será enviada para a janela atualmente ativa.
★WM_USERCHANGED Esta mensagem é enviada para todas as janelas depois que o usuário efetua login ou logout. Quando o usuário efetua login ou logout, o sistema atualiza as informações de configuração específicas do usuário. O sistema envia esta mensagem imediatamente quando o usuário atualiza as configurações.
★WM_NOTIFYFORMAT Controles públicos, controles personalizados e suas janelas pai usam esta mensagem para determinar se o controle usa estrutura ANSI ou UNICODE.
function EnumChildWindowsProc(hwnd, lparam: Integer): Boolean; buffer var: array[0..255] de char; start Resultado:= True; começar SendMessage(hwnd,WM_GETTEXT,256,lparam Resultado:=Falso fim; fim do procedimento TForm1.Button1Click (Sender: TObject); (hwnd,@EnumChildWindowsProc,Longint(@buffer[0])); StrPas(buffer); fim;