segunda-feira, 21 de janeiro de 2008

Automatize Tarefas Com O Poderoso AutoIt

AutoIt é basicamente uma linguagem de script com sintaxe parecida com basic feita para automatizar tarefas do windows. O grande diferencial do AutoIt é o controle que ele tem para interagir com as janelas do windows, ele pode simular clicks em botões, interação com formulários, etc. Ele também pode fazer chamadas para DLL externas e para a API do windows.

Ele é um canivete suíço para um heavy user que deseja/precisa automatizar tarefas.

Algumas características:

  • Fácil aprendizado.
  • Simula interações com teclados e mouse.
  • Manipula janelas e processos.
  • Interage com todos os controles padrão do windows.
  • Os scripts podem ser compilados em executáveis.
  • Pode criar interfaces gráficas.
  • Suporte a expressões regulares.

Eu tomei conhecimento dele, ao pesquisar sobre como modificar meu CD de instalação do windows, para que ele instalasse programas durante a instalação, e vi em foruns que usavam o AutoIt para criar um programa que executasse a instalação de um aplicativo de maneira automática.

Vou tentar a partir de um tutorial simples mostrar o uso desta linguagem.

Antes de iniciar o tutorial, vocês precisam fazer download do AutoIt e do seu editor:
http://www.autoitscript.com/autoit3/downloads.shtml

Escolhi fazer um script que instalasse de maneira automática o Foxit PDF Reader, um leitor de PDF leve e gratuito. Vocês podem fazer download do instalador nesta pagina: http://www.foxitsoftware.com/pdf/rd_intro.php

A primeira linha de nosso script será executar o instalador:

Run("FoxitReader22_setup.exe")

Um programa com somente esta linha, vai executar o instalador e acabar a execução, porém queremos mais que isso. Precisamos que o script pausa sua execução, até que a janela do instalador tenha surgido, para que o script possa interagir com ela.

O comando WinWaitActive(String tituloJanela, String textoJanela) faz isso, ele vai pausar o script até que fique ativa uma janela com o titulo informado e que possua em algum lugar dela o texto. É simples olhar para a janela de nosso instalador e saber qual o nome do titulo dela e ver outro texto que pode ser usado. Mas para facilitar nossa vida e saber todas as informações uteis desta janela, usaremos o indispensavel Window Info que pode ser executado a partir de Iniciar / Programas / AutoIt v3 / AutoIt Window Info.

Como podemos ver na imagem abaixo, ele pode obter informações de todos os objetos da janela (Texto, Botoões, Checkbox, etc):



Com este utilitário, podemos obter e selecionar para copiar / colar as informações que queremos: O título da pagina e o texto de um elemento e podemos escrever a linha de código abaixo:

WinWaitActive("Foxit Reader Install Wizard", "&Next>")


Com essas duas linhas scritas o programa vai executar o instalador e ficará pausado até essa janela ficar ativa.

Depois disso vamos enviar um comando para que avance para a proxima janela:

Send("!n")

Este comando vai enviar um Alt + n que fará com que o instaaldor passe para a proxima janela, que veremos possui a mesma aparência básica desta desta (mesmo titulo e também possui um botão next) então podemos repetir os comandos:

WinWaitActive("Foxit Reader Install Wizard", "&Next>")
Send("!n")


Que fará com que apareça a proxima janela que, a pessoa aceita a licença de uso, que não possui botao Next, mas possui o botão de “aceito” que é o que desejamos que seja executado, então escreveremos essas duas linhas:

WinWaitActive("Foxit Reader Install Wizard", "I &agree")
Send("!a")


Agora chegamos em uma janela, em que o botão não aceita um HotKey como o Alt + n, então usaremos outro método, que é muito mais preciso, pois usa um identificador para o botão.

Antes de usar este método vamos identyificar que a janela esta ativa com o comando:

WinWaitActive("Foxit Reader Install Wizard", "< &Back")


Feito isso vamos abrir o programa de informações e obter as informações do botão 'Default':



Com as informações obtidas podemos usar o método:
ControlClick("Foxit Reader Install Wizard", "< &Back", 1014)

Que é semelhante ao WinWaitActive( mas que possui um argumento a mais, que é o ID do Controle que a gente quer que seja executado.

Seguindo o que foi mostrado aqui, podemos terminar o script com o resto do código abaixo:

WinWaitActive("Foxit Reader Install Wizard", "&Install")
ControlClick("Foxit Reader Install Wizard", "&Install", 1)
WinWaitActive("Foxit Reader Install Wizard", "&Run Foxit Reader")
;Desmarcar o checkbox
ControlClick("Foxit Reader Install Wizard", "&Run Foxit Reader", 1008)
ControlClick("Foxit Reader Install Wizard", "&Run Foxit Reader", 1)


Usar um ControlClick é preferivel ao Send, porque no ControlClick, temos o controle do ID do que queremos interagir.

Espero que está mini tutorial seja util para vocês e eu escrevi voltado para uma pessoa que conhece algo de programação.

[]'s

Rodrigo Menezes

Código fonte do exemplo

4 comentários:

SouzaRM disse...

Obrigado pelo beabá!
Simples e direto!
Parabéns!
Gosto mais do AutoHotKey, depois do WinBatch, em seguida do PowerPro e por último o AutoIt (paizão do AutoHotKey)

alberto marlboro disse...

Vlw pelo tuto, acho o AutoHotKey + simples, mas o AutoIt tem mais recursos (foi a primeira impressão q tive).
----------
Agora vou ver estes q o colega falor (WinBatch e PowerPro)

Unknown disse...

Realmente o autohotkey é mais facil, o Autoit é algo mais profissional porque possui uma infinidade de ferramentas.

Eu estou enfrentando um problema complicado e gostaria de ajuda.

Tenho um aplicativo que sempre fica com o mesmo texto na barra de titulo, por exemplo: Microsoft Internet Explorer.

Só que o que esta dentro desta pagina nao dá para selecionar portanto nao da para identificar como no tutorial, para estes casos existe alguma alternativa?

Christhian disse...

olá tenho um programa q só atualiza quando eu clico em atualizar mas eu gostaria de não precisar clicar mais em atualizar...rsrs Como Faço?? obrigado!!