quarta-feira, 27 de janeiro de 2016

Automatizando Tarefas no Windows - Parte 3

Logotipo 7-Zip


Olá, Pessoal ... Hoje faremos uso dos comandos ensinados no último post. Se você perdeu, volta lá e dá uma conferida. No tutorial de hoje você aprenderá a instalar um programa de maneira automática. Nós usaremos o software 7-Zip, um utilitário Open Source de compactação e descompactação para Windows e Linux/Unix, semelhante ao WinZip ou ao WinRAR, porém, gratuito e de excelente qualidade.


Sua instalação é bem simples, no entanto os conhecimentos adquiridos aqui podem ser usados em quaisquer outras instalações (posteriormente faremos a instalação automática de um software mais complexo).
É possível baixá-lo clicando aqui. Escolha a versão adequada ao seu sistema. Se você não sabe se seu Sistema Operacional é 32 ou 64 bits, não tem problema. Vamos pedir uma ajuda para o AutoIt???.

MsgBox(0, "Arquitetura", "Arc: " & @OSArch)

No AutoIt, coisas que começam com "@... " são chamadas de Macros, ou seja, são variáveis internas do AutoIt que não podem ser alteradas. Existem diversas Macros, cada uma trás uma informação importante do sistema. Só há três valores que podem ser mostrados por @OSArch, mas dois representam a mesma coisa:
  • x86 - Sistema Operacional 32 bits
  • x64 ou IA64 - Sistema Operacional 64 bits
Veja o meu resultado:

Agora que sabemos qual o tipo de arquivo baixar, vá na página e baixe-o. Precisaremos instalar apenas uma vez o 7-Zip, para saber quais são as perguntas que serão feitas. Baseados nelas, faremos o script que irá instalar automaticamente nos outros computadores.
Eu vou adiantar o trabalho de vocês e colocar todas as telas que aparecem durante a instalação do 7-Zip, vejam abaixo:
1a tela

2a tela

Simples, não é???? Mas imagine que existem mais do que duas telas, com vários botões e opções.... O que faremos agora é extensível para que possamos automatizar qualquer instalação.
Primeiro renomearemos o arquivo de instalação para algo mais simples. Vamos chamá-lo de "7Zip.exe". O script que vamos criar agora tem que estar na mesma pasta que o instalador, e o que precisamos fazer é :

  • Abrir o instalador,
  • clicar no botão Install e...
  • clicar no botão Close, assim ....

Run("7Zip.exe")
WinWaitActive("7-Zip")
Send("")
WinWaitActive("7Zip", "is installed")
Send("")

O comando Send, como vimos antes, é o responsável por "clicar" nos botões. Isso porque existe teclas de atalho na maioria dos instaladores de softwares. Agora temos que descobrir qual é a tecla de atalho do botão Install, pois são esses atalhos que colocaremos no comando Send para que ele "clique". Para isso contaremos com a ajuda de um programa que vem junto com o AutoIt, o Au3Info. É possível encontrá-lo no menu iniciar na pasta AutoIt v3 com o nome de AutoIt Window Info. Com este pequeno utilitário, é possível extrair informações ocultas sobre quaisquer janelas abertas e botões contidos nelas. Dessa forma, execute o programa com o instalador do 7-Zip aberto e o botão Install a mostra. Quando a mira estiver em cima do botão, ele ficará destacado. Clique e arraste a mira até o botão Install.


Não está aparecendo, mas a mira está sobre o botão Install. Uma vez que a mira esteja sobre o "alvo", libere o botão do mouse. Clique na aba Control e localize o item Text. Vocês verão o seguinte:


Veem o &Install???? Isso indica que a tecla de atalho para acessar o botão Install é Alt + I, que é a letra logo após o &. Agora, como fazer o Send enviar a combinação de teclas Alt + I para o instalador? Olhando no arquivo de ajuda sobre o comando Send, vemos que o equivalente ao Alt é o "!" ... Isso significa que só precisamos colocar "!i" dentro do primeiro Send. Façamos isso.

Run("7Zip.exe")
WinWaitActive("7-Zip")
Send("!i")
WinWaitActive("7Zip", "is installed")
Send("") 

Funcionou?? Se você está usando Windows XP, funcionou... Mas no Windows Vista/7/8/10 existe um nível extra de segurança, você tem que confirmar que está querendo instalar algo. Como resolver isso? Coloque a linha abaixo no início do script:

#RequireAdmin

Isso faz com que o script seja executado com permissão de administrador, assim ele poderá instalar sem ser perturbado. Falta pouco ... Vamos completar o código:

#RequireAdmin
Run("7Zip.exe")
WinWaitActive("7-Zip")
Send("!i")
WinWaitActive("7-Zip", "You must restart")
Send("!n")
WinWaitActive("7-Zip", "is installed")
Send("!c")

Pronto..... Se vocês rodarem o script verão que ele instala completamente, clicando em todos os botões que nos escolhemos. Para mim apareceu um diálogo extra perguntando se quero reiniciar o sistema, e a resposta é não. Usei a mesma técnica do primeiro botão para descobrir qual o atalho dos demais botões. (Alt + N)
Quanto ao comando WinWaitActive, ele pausa o script até que uma determinada janela esteja ativa. Como funciona? Simples, o primeiro argumento é o título da janela (ou parte do título), e o segundo argumento é algum texto que existe nessa janela que a diferencie de outra.

Olhando as duas imagens (do inicio desse post) o instalador do 7-Zip mantém o titulo da janela, a única diferença é somente um texto que aparece quando a barra de progresso está cheia e o botão Close que fica disponível. Então como saber se o botão Close apareceu? Temos que esperar aparecer o texto "7-Zip ..... is installed". E assim usamos o comando Send  para que ele "clique" no botão Close.

Por enquanto é só pessoal!!! Nos vemos no próximo post, e não se esqueçam... Dúvidas, reclamações ou sugestões são sempre bem vindas, deixem nos comentários!

Nenhum comentário:

Postar um comentário