El motivo principal por el cual se utiliza la herramienta AutoIt es para automatizar procesos del sistema operativo de Windows.
AutoIt trae consigo una herramienta independiente llamada AutoIt Window Info Tool que permite obtener información valiosa de una ventana específica para automatizarla de manera efectiva. La información que se puede obtener incluye:
- Título de ventanas.
- Texto en la ventana (visible u oculto).
- Tamaño de ventana y posición.
- Contenido de la barra de estado.
- Posición del puntero del mouse.
- Color de los píxeles debajo del puntero del mouse.
- Detalles del control del puntero del mouse.
Para usar AutoIt Window Info lo puede hacer de dos maneras.
- Primera forma: Puede ingresar al menú de inicio y en él escribir “AutoIt Window Info”, le saldrá la misma aplicación, pero en distintas versiones (32 bits y 64 bits), usted elige cual abrir dependiendo del sistema que posea.
- Segunda forma: Nos dirigimos a la ruta en donde se instaló AutoIt (en mi caso la ruta es C:\Program Files (x86)\AutoIt3, una vez en ella, buscamos los ejecutables Au3Info (32 bits) y Au3Info_x64 (64 bits), dependiendo del sistema operativo
que tenga elija una de las dos opciones.
Usando cualquiera de las dos formas nos debería arrojar la misma ventana que se mostrará a continuación, con la diferencia si es de 32 o 64 bits.
Para ver como se utiliza AutoIt Window Info, abrimos el bloc de notas. Luego utilizando el círculo que aparece en “Finder Tool” lo arrastramos hacia la ventana del bloc de notas y la soltamos.
Una vez hecho esto, veremos cómo en AutoIt Window Info aparecen las propiedades que nos proporciona el bloc de notas para poder automatizar esta aplicación de una manera más cómoda.
En este punto ya sabemos cómo usar AutoIt Window Info para conseguir información útil de la ventana o control para automatizar. A parte de esto, AutoIt nos ofrece funciones para trabajar con ciertos tipos de controles como botones, cuadros de lista, campos
de edición y texto estático. Este tipo de funciones son conocidas como Funciones de Control (no confundir con Controles GUI, tema visto anteriormente en el curso).
Para estas funciones especiales se puede usar una descripción especial para ser usado como el parámetro controlID. Esta descripción se utiliza para identificar un control mediante las siguientes propiedades:
- ID: La ID es el identificador numérico interno que Windows le da a un control.
- TEXT: El texto de un control.
- CLASS: El nombre de la clase de control interno.
- CLASSNN: El valor de ClassnameNN usado en versiones anteriores de AutoIt.
- NAME: El nombre interno de .NET Framework WinForms (si está disponible).
- REGEXPCLASS: Controla el nombre de clase usando una expresión regular.
- X \ Y \ W \ H: La posición y tamaño de un control.
- INSTANCE: La instancia basada en 1 cuando todas las propiedades dadas coinciden.
Se pueden utilizar una o más propiedades en el parámetro controlID siguiendo el siguiente formato:
1
|
[PROPIEDAD1: Valor1; PROPIEDAD2: Valor2]
|
Ahora mencionaremos algunas de estas funciones.
- ControlSend: Envía una cadena de caracteres a un control. La sintaxis se muestra a continuación.
1
|
ControlSend("title","text",controlID,"string"[,flag=0])
|
- Los corchetes representan la parte de la sintaxis que es opcional.
- title es el título/variable/clase de la ventana para acceder.
- text es el texto que tiene la ventana para poder acceder.
- controlID es la identificación del control con el que se desea interactuar.
- string es la cadena de caracteres que se va a enviar al control.
- flag cambia la forma en la que las “claves” son procesadas: $SEND_DEFAULT (0) = El texto contiene caracteres especiales (es el valor por defecto). $SEND_RAW (1): Las claves se envían sin formato. Para usar las constantes $SEND_DEFAULT y
$SEND_RAW debe incluir el archivo “AutoItConstants.au3” en su script.
- La función retorna 1 si se envió la cadena de caracteres al control especificado, de lo contrario retorna 0.
- ControlSend() funciona de manera similar a Send(), pero la diferencia es que ControlSend() envía pulsaciones de teclas al control o ventana especificado, mientras que Send() solo lo hace a la ventana que este activa.
- En algunos casos podría necesitar usar el comando ControlFocus() para establecer el foco a un control antes de usar ControlSend(), estos casos se pueden ver cuando se hace referencia a un controlID creado por el script mismo.
- ControlSetText: Establece el texto de un control. La sintaxis se muestra a continuación.
1
|
ControlSetText("title","text",controlID,"new text"[,flag=0])
|
- Los corchetes representan las partes de las sintaxis que son opcionales.
- title es el título/variable/clase de la ventana para acceder.
- text es el texto que tiene la ventana para poder acceder.
- controlID es la identificación del control con el que se desea interactuar.
- new text es el nuevo texto que colocará en el control.
- flag es una bandera que cuando es diferente de 0 (es el valor predeterminado) forzará a redibujar la ventana de destino.
- La función retorna 1 si se estableció la cadena de caracteres en el control especificado, de lo contrario retorna 0.
- ControlClick: Simula un clic del ratón a un control especificado. La sintaxis es la siguiente.
1
|
ControlClick("title","text",controlID[,button="left"[,clicks=1[,x[,y]]])
|
- Los corchetes representan la parte de la sintaxis que es opcional.
- title es el título/variable/clase de la ventana para acceder.
- text es el texto que tiene la ventana para poder acceder.
- controlID es la identificación del control con el que se desea interactuar.
- button es el botón para hacer clic. Los posibles valores son: “left”, “right”, “middle”, “main”, “ enú”, “primary” y “secondary”. El botón por defecto es “left”.
- clicks son la cantidad de veces que se hace clic con el mouse. El valor predeterminado es 1.
- x es la posición sobre este eje para hacer clic dentro del control. El valor por defecto es en el centro.
- y es la posición sobre este eje para hacer clic dentro del control. El valor por defecto es en el centro.
- La función retorna 1 si se logra da clic en el control, de lo contrario retorna 0.
Las funciones de control mostradas anteriormente no son todas las que existen, pero son las más utilizadas. Si desea saber más sobre las otras funciones puede buscar en la documentación de AutoIt.
Adicional, existen otras funciones que son de utilidad a la hora de realizar una automatización. A continuación, mencionaremos algunas.
- Run: Esta función nos permite ejecutar un programa externo como por ejemplo: bloc de notas, calculadora, etc. La sintaxis es la siguiente.
1
|
Run("program"[,"workingdir"[,show_flag[,opt_flag]]])
|
- Los corchetes representan las partes de la sintaxis que son opcionales.
- program es la ruta completa del programa que desea ejecutar. Las extensiones que permite correr esta función son: EXE, BAT, COM o PIF.
- workingdir es el directorio de trabajo, cuando se coloca en blanco (“”) indica que se está utilizando el directorio de trabajo actual. Esta no es la ruta hacia el programa a ejecutar.
- show_flag es una bandera la cual tiene las siguientes opciones: @SW_HIDE = oculta la ventana, @SW_MINIMIZE = muestra la venta minimizada y @SW_MAXIMIZE = muestra la ventana maximizada.
- opt_flag es una bandera que controla varias opciones relacionadas con la forma en que interactúan los procesos primarios y secundarios.
- Cuando se ejecuta correctamente la aplicación, la función retorna el PID del proceso que fue ejecutado, de lo contrario devuelve 0 y establece la macro @error con un valor distinto a cero.
Nota: Hay aplicaciones en la que solamente debemos colocar el nombre y la extensión en vez de toda la ruta, como, por ejemplo: Bloc de notas -> notepad.exe y la Calculadora -> calc.exe. Esto se debe a que estas aplicaciones tienen
su ejecutable en la carpeta System32.
- Send: Esta función envía pulsaciones de teclas simuladas a la ventana activa. A continuación, se puede visualizar su sintaxis.
- keys, secuencia de teclas simuladas que se va a enviar.
- flag, bandera que permite cambiar cómo se procesan las “claves”: $SEND_DEFAULT (0) = El texto contiene caracteres especiales (es el valor por defecto). $SEND_RAW (1): Las claves se envían sin formato. Para usar las constantes $SEND_DEFAULT
y $SEND_RAW debe incluir el archivo “AutoItConstants.au3” en su script.
- La función no retorna ningún valor.
- Si desea ver la lista completa de teclas que puede simular gracias a esta función, puede ingresar al siguiente enlace Teclas Simuladas.
- MouseClick: Simula una operación de clic en el mouse. La sintaxis se visualiza a continuación.
1
|
MouseClick("button"[,x,y[,clicks=1[,speed=10]]])
|
- Los corchetes representan las partes de la sintaxis que son opcionales.
- button, es el botón con el que se va a dar clic: $MOUSE_CLICK_LEFT (“left”), $MOUSE_CLICK_RIGHT (“right”), $MOUSE_CLICK_MIDDLE (“middle”), $MOUSE_CLICK_MAIN (“main”), $MOUSE_CLICK_MENU (“menu”), $MOUSE_CLICK_PRIMARY (“primary”), $MOUSE_CLICK_SECONDARY
(“secondary”). Para utilizar las constantes dentro del parámetro button debe incluir el archivo “AutoItConstants.au3” en su script.
- x,y, son las coordenadas para poder mover el ratón. Si no se especifica ninguna coordenada, entonces se usa la posición actual (esto viene por defecto).
- clicks, representa el número de veces que el ratón va a dar clic. El valor por defecto es 1.
- speed, es la velocidad con la que se mueve el mouse. El rango de velocidad es entre 1 (más rápido) y 100 (más bajo). Una velocidad de 0 moverá el ratón instantáneamente. La velocidad por defecto es 10.
- Si en el parámetro button se ingresa una cadena vacía (“”), se hará clic con el botón izquierdo.
- La función retorna 1 en caso exitoso, es decir, si logra dar clic en la coordenada especificada. Retorna 0 si button no es válido o si las coordenadas no son correctas, como por ejemplo ingresar la coordenada en X sin la coordenada en Y.
- WinActivate: Activa (enfoca) la ventana especificada. La sintaxis es la siguiente.
1
|
WinActivate("title"[,"text"])
|
- Los corchetes representan la parte de la sintaxis que es opcional.
- title, es el título/variable/clase de la ventana para activar.
- text, representa el texto de la ventana para activar. El valor predeterminado es una cadena vacía.
- La función retorna 0 si no se encuentra la ventana o no se pudo activar.
- Puede utilizar la función WinActive() para verificar si WinActivate() tuvo éxito ya que WinActive() chequea si existe la ventana especificada y si está activa actualmente.
- Si existen varias ventanas que tengan las mismas propiedades, la ventana que estuvo más recientemente es la activada.
- WinActivate() funciona en ventanas minimizadas.
- Después de una activación exitosa, la macro @extended cambia a 1 si la ventana ya estaba activa, en caso de que no estuviera activa el valor cambiaría a 2.
- WinWaitActive: Pausa la ejecución del script hasta que la ventana solicitada este activa. Su sintaxis se mostrará a continuación.
1
|
WinWaitActive("title"[,"text"[,timeout=0]])
|
- Los corchetes representan las partes de la sintaxis que son opcionales.
- title, es el título/variable/clase de la ventana para verificar.
- text, es el texto de la ventana para verificar.
- timeout, el tiempo de espera en segundos si la ventana no está activa. El valor por defecto es 0, es decir, sin tiempo de espera.
- La función en caso de éxito retorna un identificador para la ventana solicitada, de lo contrario retorna 0, es decir, se agotó el tiempo de espera y no apareció la ventana.
- WinClose: Cierra la ventana. La sintaxis es la siguiente.
1
|
WinClose("title"[,"text"])
|
- Los corchetes representan la parte de la sintaxis que es opcional.
- title, es el título/variable/clase de la ventana que se va a cerrar.
- text, es el texto de la ventana para cerrar. El valor predeterminado es una cadena vacía.
- La función retorna 1 si cierra la ventana. Retorna 0 si no se encuentra la ventana.
Ejemplo: En este video que se mostrará a continuación, se realiza una automatización utilizando los temas vistos anteriormente incluyendo la herramienta AutoIt Window Info y otras funciones que puede investigar por aparte. Esta automatización abrirá
un bloc de notas, ingresará varias líneas de texto y por último guardará el archivo en el escritorio con el nombre “Mi Primera Automatización”.
Nota: La macro @DesktopDir devuelve la ruta al escritorio del usuario actual.