Camaradas,
O SendMessage é uma função disponibilizada pela plataforma windows (API) que nos permite interagir sobre objetos Window, ou seja, todos os objetos que possuem Handle, seja esse handle de qual tipo for: HWND, HFILE, HMENU, HHOOK, HGLOBAL, HLOCAL, HINST e outros vários. Diante isso podemos entender que o acesso a certos objetos pode ser feito através da utilização dessa API.
| Delphi | | copy code | | ? |
| 1 | {$EXTERNALSYM SendMessage} |
| 2 | function SendMessage(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; |
Basicamente o SendMessage necessita apenas do Handle e da Mensagem ( Message ), os outros 2 parametros serão dependentes da Mensagem enviada.
Um exemplo:
| Delphi | | copy code | | ? |
| 1 | SendMessage(btn2.Handle, CN_COMMAND, BN_CLICKED, 0); |
Envia uma mensagem do tipo CN_COMMAND para o btn2 (no nosso caso esse é um TButton) com o parametro BN_CLICKED que faz o TButton btn2 entender que se deve executar o procedimento de click.
Outro exemplo interessante:
| Delphi | | copy code | | ? |
| 1 | SendMessage(form1.Handle, WM_SETTEXT, 0, Integer(PChar('Novo Título'))); |
O código acima modifica o título do TForm form1 para o valor “Novo Título”.
A infinidade de coisas que dá pra se fazer com essa pequena API é incalculável.
Se quiser ver como é vasta a capacidade proponha-me um problema! Eu ficarei grato pelo desafio.
Abraço a todos
Tags: API, BN_CLICKED, CN_COMMAND, Handle, HFILE, HGLOBAL, HHOOK, HINST, HLOCAL, HMENU, HWND, Message, SendMessage, Windows, WM_SETTEXT

Caro Gilberto.
Gostaria de conhecer mais sobre o poder desta função.
Se me permite propor um problema então lá vai:
Tenho dois executáveis rodando na mesma CPU e preciso realizar uma conversa bidirecional entre os dois. Isto é:
- O aplicativo A envia e recebe mensagem do aplicativo B, realizando alguns procedimentos em função das mensagens recebidas.
- Por sua vez o aplicativo B também envia e recebe mensagens do aplicativo A, realizando determinadas funções em função das mensagens recebidas.
Vc poderia desenvolver algum exemplo desta forma?
Esxplicando como funciona e como lidar com possíveis erros.
Grato.
Paulo Berti
Caro Gilberto,
Eu gostaria de saber como eu faço para encontrar o handle de um Componente dentro de outro programa que esteja sendo executado.
Grato.
Aurélio
Caro Gilberto,
Estou trabalhando em um editor html com o Twebbrowser, e gostaria de usar uma função igual a SelText do TRichtext, onde eu possa colocar no TWebBrowser o texto(Em tempo de execução) no lugar onde está o cursor.
Grato,
Hugo Luna
Olá Hugo,
A maneira de acesso mais viável a interface do TWebBrowser é via ActiveX mesmo. Não tem como lhe mandar o exemplo aqui, pois o código ficaria muito extenso, mas se ainda lhe interessa saber as facilidades que você pode ter, me diz ae que eu lhe explico melhor.
Abraços
Ótimo artigo, vem de encontro das minhas necessidades.
Poderias me ajudar com uma questão ?
Preciso enviar uma combinação de teclas, simulando o pressionamento de uma tecla (no caso a letra ‘1′ ou a tecla F1) para OUTRA aplicação.
Já consigo identificar a aplicação desejada, mas infelizmente não consigo enviar a mensagem.
Tenho tentado assim, sem sucesso:
SendMessage(myHandle, WM_SETTEXT, 0, VK_F1);
Tens alguma dica para mim ??
Grato !!
Moacir, não é muito difícil, mas está tarefa não envolve envio de mensagens, pois não é a maneira mais correta. O correto seria você simular um precionamento de tecla na janela apos colocar o foco nela.
Um código resumido seria assim:
varbeginUso: