Simular mouse movimento / clique / keyPress em um aplicativo que não está ativo
Pergunta
Eu sei como simular eventos de mouse e teclado, mas eles agem como se o usuário fez-los, então eles vão afetar a janela que estiver ativa. O que eu preciso é simular uma dessas entradas, mas em uma janela que não está ativo.
Eu não estou dizendo que ele é minimizado, imagine por exemplo, você tem MSPAINT, e bloco de notas. Bloco de notas está na frente da pintura. E você quiser cliques do mouse simular em certas coordenadas da janela de pintura, mas sem defini-lo ativo, tornando possível para o usuário para continuar usando o bloco de notas que é em frente de tinta.
Isto é possível em tudo? Obrigado!
Solução
Você pode fazer o seguinte:
1) obter o HWND
do interior janela que você deseja simular eventos. A fim de fazer isso, você pode usar a função FindWindow
, que tem dois parâmetros, sendo um nome de classe da janela (você pode usar NULL
) eo outro o nome da janela (consulte a documentação MSDN para mais detalhes);
2) enviar uma mensagem para a janela desejada usando a função SendMessage
. Os parâmetros são: a pega anterior obtido janela (HWND
), a mensagem (que pode ser, por exemplo WM_KEYDOWN
, ou WM_MOUSEMOVE
, WM_LBUTTONDOWN
etc), o WPARAM
da mensagem (que no caso de WM_KEYDOWN
é o código de tecla virtual da tecla ) e, finalmente, o LPARAM
da mensagem (que, em caso de WM_KEYDOWN
é bastante complexo e você deve verificar MSDN para detalhes).
Na minha opinião isso é suficiente para o que você pretende fazer.
Outras dicas
Bem, se você sabia JAVA você poderia usar a classe robôs.
Esta classe é usada para gerar eventos de entrada do sistema nativas para fins de automação de testes, demos de execução automática e outras aplicações onde é necessário o controle do mouse e do teclado
Talvez há algo simular em .net?