none
Api windows RRS feed

  • Pergunta

  • Estou tentando escrever um aplicação que manda clicks de mouse para outra aplicação. Ex: enviar um click na coord x,y e esse click por exemplo aperta o numero 8 da calculadora.

    Bom no caso eu consigo pegar o handle da janela, e estou tentando enviar via SendMessage(handle, WM_LBUTTONDOWN, MK_LBUTTON, coordenate);

    Engraçado que quando eu altero os parâmetros para WM_RBUTTONDOWN e MK_RBUTTON ele envia o botao direito corretamente para a aplicação que peguei o handle.

    Alguém já passou por algo parecido?

    Obrigado pela atenção.
    terça-feira, 11 de março de 2008 13:30

Todas as Respostas

  • Francis,

     

    só vi seu post agora, e por isso a demora de responde-lo.

     

    Isso é uma caracteristica do windows, no seu caso, considerando a calculadora. Voce tem a janela principal com dezenas de objetos buttons dentro dela.

     

    Voce diz ter capturado o handle da janela, no entanto, para enviar um WM_LBUTTONDOWN, voce tem que enviar para o controle BUTTON que representa o numero 8, e não para a janela Parent (a janela mãe que contem o botão 8). Ao ser clickado, o botão notifica a janela parent, mas quem controla os eventos de mouse é a windowproc do botão e o WndProc do parent recebe BN_CLICKED em WM_COMMAND.

     

    Voce precisa pegar o handle do controle aonde o mouse está em cima(ou aonde voce quer emular o click do mouse), e então dar SendMessage(..) para o controle.

     

    Voce pode estudar a funçao da API do Win32, SendInput(..), já que voce sabe a coordenada, basta emular um click do mouse corretamente, e não enviar uma mensagem para a janela.

    http://msdn2.microsoft.com/en-us/library/ms646310(VS.85).aspx

     

     

    Abraços, cox

     

     

     

    segunda-feira, 28 de abril de 2008 17:48