652660 0 Postado Agosto 13, 2017 Share Postado Agosto 13, 2017 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 ! Link para o comentário Compartilhar em outros sites More sharing options...
Poccnn 385 Postado Agosto 13, 2017 Share Postado Agosto 13, 2017 Verificou se existe os eventos fornecidos? se eles estão corretos? Link para o comentário Compartilhar em outros sites More sharing options...
Leoxtibia 137 Postado Agosto 15, 2017 Share Postado Agosto 15, 2017 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. Link para o comentário Compartilhar em outros sites More sharing options...
652660 0 Postado Agosto 17, 2017 Autor Share Postado Agosto 17, 2017 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 ? Link para o comentário Compartilhar em outros sites More sharing options...
Leoxtibia 137 Postado Agosto 17, 2017 Share Postado Agosto 17, 2017 O BM_CLICK você pode testar usando SendMessage mesmo. PostMessage, você tem que incluir a API no seu código, procura aí, acha easy. Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados