Script em janela minimizada Topic is solved

Tire suas dúvidas sobre programação em AutoHotkey

Moderator: Gio

josueh
Posts: 11
Joined: 08 Feb 2020, 06:07
GitHub: Josueh

Script em janela minimizada

29 Jul 2020, 01:16

Bom dia pessoal!

Eu gostaria de executar um script em uma janela minimizada. Eu queria que ele pressionasse duas teclas em loop, da seguinte maneira:

Loop {

Send {F1}

Send {F2}

Sleep, 1000

}
O problema é que não sei como fazer isso rodar em segundo plano.
User avatar
Gio
Posts: 1060
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Script em janela minimizada

29 Jul 2020, 07:54

Bom dia Josueh.

Em primeiro lugar preciso mencionar que existe uma diferença grande entre uma janela em segundo plano e uma janela efetivamente minimizada (uma janela em segundo plano pode ser uma janela X que estava aberta e depois você abriu outra janela em cima ou então uma janela Y que estava aberta e depois você apertou alt+tab e fez vir outra para cima dela, por exemplo. Já uma janela efetivamente minimizada é aquela onde você apertou a caixinha com o símbolo _ e ela fez aquela animação de descer até a barra de tarefas). A diferença é que a janela efetivamente minimizada perde algumas propriedades interativas. Por isso, tente trabalhar com janelas em segundo plano (e não janelas minimizadas) para facilitar a elaboração de scripts que trabalhem com programas em segundo plano.

Com relação ao comando Send, este comando envia os comandos de teclas para a janela atualmente ativa no seu computador. Desta forma, se quiser enviar comandos de tecla para uma janela inativa (ou seja, em segundo plano), você vai precisar utilizar outros comandos, tais como SendMessage e ControlSend.

No caso do SendMessage, você pode encontrar um tutorial aqui (você pode traduzi-lo automaticamente usando o tradutor do Google Chrome). A mensagem WM_KEYDOWN corresponde à constante 0x100. Também é possível encontrar um tutorial em inglês no youtube aqui.

Em ambos os casos (SendMessage e ControlSend) você pode ter efeitos de a janela em segundo plano se auto-ativar, então precisa testar com cuidado e ir elaborando seu script conforme as coisas funcionem ou não funcionem. Este é um tópico um pouco avançado, mas sinta-se livre para fazer perguntas caso tenha dúvidas durante a elaboração do script.
josueh
Posts: 11
Joined: 08 Feb 2020, 06:07
GitHub: Josueh

Re: Script em janela minimizada

17 Aug 2020, 16:12

Muito obrigado pela resposta Gio.

Eu pesquisei sobres essas duas funções, mas achei a descrição delas complexa.
Você poderia me dar um exemplo de como escrever uma mensagem, pode ser "Oi". Em um bloco de notas minimizado ou em segundo plano? (Pode ser qualquer um dos dois)

A partir de um exemplo eu poderia entender melhor e elaborar o meu script.
User avatar
Gio
Posts: 1060
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Script em janela minimizada  Topic is solved

17 Aug 2020, 18:35

Boa tarde Josueh.

Segue um exemplo utilizando o ControlSend. Abra uma nova janela do bloco de notas (cujo título conterá "Sem título") e depois deixe-a aberta e em segundo plano (ou seja, clique em outra janela ao invés de minimizá-la) sem salvar o documento. Depois, execute o script abaixo e aperte F2 algumas vezes. Depois, clique na janela novamente e veja se a mensagem foi escrita.

Code: Select all

F2::
SetTitleMatchMode, 2 ; Isto é só porque após a primeira mensagem o título da janela acrescente um asterisco antes, então usamos o SetTitleMatchMode em 2 para encontrá-lo também.
ControlSend, , mensagem escrita com sucesso, Sem título
SetTitleMatchMode, 1
Return

Segue outro exemplo, dessa vez usando PostMessage para escrever a mensagem "exemplo" letra a letra usando mensagens WM_KeyDown enviadas diretamente para a janela do Bloco de Notas. Abra o bloco de notas sem salvar da mesma forma como fez antes, execute o scritp abaixo e clique o F2 algumas vezes (esperando aproximadamente 2 segundos entre os cliques). Depois veja se foi escrito no notepad a mensagem "exemplo" algumas vezes.

Code: Select all

F2::
SetTitleMatchMode, 2
PostMessage, 0x100, 0x45,,Edit1, Sem título
Sleep 100
PostMessage, 0x100, 0x58,,Edit1, Sem título
Sleep 100
PostMessage, 0x100, 0x45,,Edit1, Sem título
Sleep 100
PostMessage, 0x100, 0x4d,,Edit1, Sem título
Sleep 100
PostMessage, 0x100, 0x50,,Edit1, Sem título
Sleep 100
PostMessage, 0x100, 0x4c,,Edit1, Sem título
Sleep 100
PostMessage, 0x100, 0x4f,,Edit1, Sem título
Sleep 100
SetTitleMatchMode, 1
Return

:arrow: No código acima, 0x100 é o código da mensagem WM_KeyDown, e 0x45 (por exemplo) é o código VK da letra "e" (por isso foi usado na primeira e na terceira chamadas ao comando PostMessage, já que "exemplo" contém o "e" na primeira e na terceira letra). Cada comando de tecla possui um código VK diferente.

Tente usar o código acima conforme descrito. Depois, tente modificá-lo. E se depois ainda tiver alguma dúvida, basta postar abaixo :thumbup:
josueh
Posts: 11
Joined: 08 Feb 2020, 06:07
GitHub: Josueh

Re: Script em janela minimizada

18 Aug 2020, 03:49

Funcionou perfeitamente Gio, consegui elaborar o meu script!

A propósito eu li o seu tutorial sobre ImageSearch, é excelente.

Return to “Ajuda e Suporte Geral”

Who is online

Users browsing this forum: No registered users and 2 guests