Gostaria de usar um script para enviar eventos como entrada de teclado ou mouse para automatizar outro programa. Pense em um bot que joga um jogo, por exemplo (embora eu não jogue videogame).
Quero fazer isso com vários pares (script, programa) ao mesmo tempo.
Eu sabia que posso automatizar meu mouse e teclado no Windows usando o autoit ou a API win32, mas o Windows tem o conceito de "janelas ativas": há apenas uma janela ativa por vez, e essas são as janelas que podem receber entrada.
Devido a esse conceito de "janela ativa", não consigo automatizarmúltiploprogramas de uma só vez.
Que alternativa eu tenho?
EDITAR:Preciso automatizar os programas sem ter que esperar por outro programa. Mudar a janela ativa usando atalhos de teclado não resolverá isso. Também quero usar o computador enquanto os programas são automatizados em segundo plano.
Responder1
Atualizado para incluir alternativas para restringir a entrada do usuário atual
Autoit Usando o autoit você poderia fazer algo semelhante a
Opt("WinTitleMatchMode", 2)
While WinActive('Search')
Send("{ALT DOWN}")
Send("{TAB}")
Send("{ALT UP}")
WEnd
Onde 'pesquisar' contém parte do título da janela.
Se você souber a ordem do foco da janela, poderá simplesmente enviar tab vezes extras suficientes para chegar à janela especificada.
A ordem de alt+tab é sempre na ordem inversa do foco.
Win32 Isso foi respondido em outros tópicos e se aprofunda na programação. Se você quiser seguir esse caminho, terá que enviar as mensagens do Windows para o processo que deseja. Eu olharia para:Como envio teclas digitadas para uma janela sem precisar ativá-la usando a API do Windows?
Não parece ser confiável e teria muitas armadilhas. Devem ser feitas suposições sobre a forma como a entrada do teclado é tratada em determinados aplicativos.
Não sabendo o que você está tentando alcançar, posso sugerir o uso de uma máquina virtual e permitir que essa instância execute as macros/scripts. Isso deve permitir que o usuário continue a usar o computador sem ocupar a área de trabalho que está usando.