terça-feira, 19 de janeiro de 2016

Automatizando Tarefas no Windows - Parte 2


Oi, galera. Hoje continuaremos estudando sobre AutoIt. Iremos fazer nossa primeira automatização, iremos abrir um programa externo, interagir com ele e fechá-lo. Tudo isso aprendendo mais 5 comandos! Se você perdeu nosso último post, não se desespere! Clique aqui...
Tudo começa criando-se um novo arquivo no SciTE. Vou chamar o meu de teste e vou salvá-lo na minha Área de Trabalho. Agora vamos repetir o que fizemos no último post:

MsgBox(0, "Olá Mundo!!!", "Tudo começa aqui")

Agora vou explicar o que isso faz:
  • MsgBox - É uma função que exibe uma  caixa de diálogo
  • 0 (Zero) - É o primeiro parâmetro que diz como será a caixa de diálogo
  • "Olá Mundo!!!" - Segundo parâmetro que é o título da caixa de diálogo
  • "Tudo começa aqui" - Terceiro parâmetro que é o texto da caixa de diálogo
Essa função, ou comando, que não parece tão simples, aceita ainda mais parâmetros. Como eu sei disso? Está na ajuda do AutoIt. Coloque o cursor de edição sobre o comando MsgBox e aperte F1 ... A ajuda do AutoIt será inicializada e posicionada sobre esse comando.

Vamos escrever agora um outro script (você pode reaproveitar o script atual, basta apagar o que já escrevemos), um pouco mais complicado. O código vai abaixo:

Run("notepad.exe")
WinWaitActive("Untitled - Notepad")
WinClose("Untitled - Notepad") 

Caso seu Windows seja em português, use o código seguinte:
Run("notepad.exe")
WinWaitActive("Sem título - Bloco de notas")
WinClose("Sem título - Bloco de notas")

Pronto! Fomos capazes de abrir e fechar o Notepad! Vamos para as explicações:

O comando Run permite rodar um comando externo, isto é, de fora do AutoIt. Você precisa passar todo o caminho até esse programa (algo como "C:\Program Files (x86)\Mozilla Firefox\firefox.exe") a menos que exista uma variável de ambiente (falarei sobre isso em outro post) com o caminho, desse modo só passamos o nome do programa ("firefox.exe" no exemplo).

Já o comando WinWaitActive espera até que a janela informada esteja ativa ... Isso quer dizer que, no script de exemplo, esperamos até o Notepad abrir para depois fechá-lo. Isso é importante, pois pequenos scripts executam muito rápido, as vezes mais rápido que o abrir de um programa. Por isso usamos esse comando, ele pausa o script e espera até a janela que você especificou aparecer. E se colocarmos o nome errado? Ele ficará pausado eternamente :) ... Mas não se preocupem, por isso usamos o SciTE, para testarmos antes. Em todo caso, o WinWaitActive usa uma busca aproximada ... No nosso exemplo podemos usar como parâmetro "Untitled - Notepad", "Untitled" ou "Notepad" que funcionaria da mesma maneira (se estiver em dúvida, teste e veja). No entanto é sempre bom ter o título completo. No caso do seu Windows estar em português e digitar o título em inglês como no primeiro código, simplesmente o script não vai funcionar da forma esperada e o script vai pausar como se tivesse escrito o título errado, pois para o computador é apenas um grupo de caracteres sem significado e que não se correspondem entre si, o título informado e o título da janela aberta.

O WinClose é bem simples ... Ele fecha uma janela. A janela que se quer fechar não precisa estar ativa, e o critério de correspondência do nome da janela é o título completo. Se houver mais de uma janela que corresponda ao critério será fechada aquela que estava ativa (em foco) mais recentemente. Mais a frente mostrarei como fechar uma janela sem precisar saber o nome dela.

Bom, é muito legal abrir e fechar o Notepad, mas o que mais podemos fazer? Podemos escrever no Notepad com nosso script? E a resposta é SIM! Veja abaixo

Run("notepad.exe")
WinWaitActive("Untitled - Notepad")
Send("Olá Mundo")
WinClose("Untitled - Notepad")

Lembre-se, caso seu Windows seja em português, use o código seguinte:
Run("notepad.exe")
WinWaitActive("Sem título - Bloco de notas")
Send("Olá Mundo")
WinClose("Sem título - Bloco de notas")

O comando Send simula alguém usando o teclado na JANELA ATIVA, isto é, a janela que está em foco no momento. Por isso temos que esperar o Notepad abrir antes de enviar o texto, senão seria enviado ao próprio SciTE. Podemos enviar qualquer tecla ou combinação de teclas (a única limitação é que o Windows não permite a simulação da combinação Crtl + Alt + Del). Enviar teclas especiais, como as F1...F12, ou enviar a mesma tecla repetidas vezes (veremos isso mais tarde) é um trabalho simples. Mas quando vamos fechar o Notepad aparece a mensagem de salvar... Como eu posso evitar isso (supondo que não quero salvar)?

Há duas maneiras, vou ensinar uma agora (a mais fácil :) ) e no próximo post ensino a outra. Existe um comando que força o fechamento de uma janela, fazendo com que se perca tudo que tinha feito nela se não foi salvo antes. Esse comando é o WinKill. Vamos só substituir o WinClose por WinKill e ver funcionando.

Run("notepad.exe")
WinWaitActive("Untitled - Notepad")
Send("Olá Mundo")
WinKill("Untitled - Notepad")

Não se esqueça... Caso seu Wind... Bem, você já sabe...
Run("notepad.exe")
WinWaitActive("Sem título - Bloco de notas")
Send("Olá Mundo")
WinKill("Sem título - Bloco de notas")

Bom, sei que este foi um post longo, e espero que tenham entendido. No próximo post usaremos quase todos os comandos visto aqui. Qualquer dúvida podem deixar nos comentários que responderei o mais breve possível. Até a próxima.

Nenhum comentário:

Postar um comentário