Problema na função SendMessage()

652660
Por 652660
em Pascal (Delphi)

652660

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 11/08/17Posts: 2Gênero: Masculino

Primeiramente boa dia/tarde/noite.
Fiz um programa para enviar mensagens de comando para uma outra aplicação (programa). Pesquisei muito sobre o assunto e encontrei nada a respeito do meu problema. 
O que eu acontece é o seguinte: O programa só manda o comando para a aplicação quando o parâmetro é 'WM_CHAR', quando tentei o parâmetro 'WM_KEYDOWN' ele não reproduz dentro da aplicação. Porém isso ocorre apenas na aplicação na qual e eu desejo que funcione. Testei em outros lugares e funciona perfeitamente, ou seja, o problema não está no código, mas sim em alguma resistência (barreira) da aplicação em questão.
Ou seja, pra ficar mais claro: 
 
Essa linha de comando é representada na aplicação:
SendMessage(h, WM_CHAR, B, 0);
 
Essa linha de comando não é representada na aplicação:
SendMessage(h, WM_KEYDOWN, VK_RETURN, 1);
SendMessage(h, WM_KEYUP, VK_RETURN, 1);

 

OBS: 'h' é a Handle da aplicação em questão.
 
Na hora de dar o ENTER (RETURN) ele simplesmente não envia, assim como qualquer outra tecla que não seja uma letra. Então se eu colocar no campo 'Edit' a palavra 'olá!' ele fica escrevendo a palavra infinitamente e não envia.
Gostaria que alguém me ajudasse a achar alguma alternativa (de repente mudar a função usada, ou captar o comando na aplicação, usar mensagens de notificação, enviar mensagem para a handle filha).
Grato !

Poccnn

Enquanto houver armas no mundo, haverá guerra!
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 07/03/16Posts: 1418Gênero: Masculino

Verificou se existe os eventos fornecidos? se eles estão corretos?

"Deus é amor, mas matou 99,99999% de todos os seres viventes do mundo com o diluvio.

Deus é misericórdia, mas condena as pessoas ao tormento eterno do inferno.

Deus é pai, mas abandonou seus filhos a servidão.

Deus é vida, mas condenou a humanidade a morte.

Deus é o senhor. Senhor das guerras, da morte, do ódio.

 

Ninguém que ame a humanidade, mataria 99,99999% da população, não só de humanos, bem como dos demais animais, por amor. Isso não é amor, é doença, psicose de um sádico que gosta de ver sua 'criação' sofrer e ainda quer 'pagar' de misericordioso, de deus amor.

 

Não quero seu amor; não quero sua misericórdia, não quero ser seu filho, não quero sua vida, não quero que seja meu senhor.

Tu és um psicótico, doente, hipócrita, assassino; não me venha querer se passar por bondoso, amoroso, misericordioso."

Leoxtibia

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 22/06/08Posts: 489Gênero: Masculino

Algumas aplicações bloqueiam essas ações com SendMessage e funções afins. No entanto, existem alternativas como tentar utilizar o BM_CLICK no SendMessage.

 

Const BM_CLICK As Long = &HF5&

 

Ou, você pode tentar o PostMessage e algo como:

 

PostMessage(hWindow, WM_KEYUP, VK_RETURN, (MapVirtualKey(VK_RETURN, MAPVK_VK_TO_VSC)) * 0x10000 + 0xC0000000 + 1)
PostMessage(hWindow, WM_KEYDOWN, VK_RETURN, (MapVirtualKey(VK_RETURN, MAPVK_VK_TO_VSC)) * 0x10000 + 1)

 

hWindow é o seu handle.

sergiped.gif

652660

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 11/08/17Posts: 2Gênero: Masculino
Em 15/08/2017 at 12:54, Leoxtibia disse:

Algumas aplicações bloqueiam essas ações com SendMessage e funções afins. No entanto, existem alternativas como tentar utilizar o BM_CLICK no SendMessage.

 

Const BM_CLICK As Long = &HF5&

 

Ou, você pode tentar o PostMessage e algo como:

 

PostMessage(hWindow, WM_KEYUP, VK_RETURN, (MapVirtualKey(VK_RETURN, MAPVK_VK_TO_VSC)) * 0x10000 + 0xC0000000 + 1)

PostMessage(hWindow, WM_KEYDOWN, VK_RETURN, (MapVirtualKey(VK_RETURN, MAPVK_VK_TO_VSC)) * 0x10000 + 1)

 

hWindow é o seu handle.

Leoxtibia, poderia me dar mais detalhes sobre isso ? Tentei incluir no meu código e não deu certo, cara. :( Preciso declarar algo antes ?

Leoxtibia

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 22/06/08Posts: 489Gênero: Masculino

O BM_CLICK você pode testar usando SendMessage mesmo. PostMessage, você tem que incluir a API no seu código, procura aí, acha easy.

sergiped.gif