sábado, 29 de marzo de 2008

AutoHotKey, usos y ejemplos (2): automatización de aplicaciones

Esta es la segunda parte de la serie de artículos sobre el AutoHotkey. En la primera parte vimos algunos de los ejemplos más sencillos de sustitución de textos y arranque de aplicaciones. Ahora vamos a ver algunos ejemplos de tareas más complejas.

Automatizar otras aplicaciones

Es en esta área donde el AutoHotkey pasó, para mí, de ser una sencilla tecla o texto rápido, a una poderosísima herramienta de productividad, para automatizar secuencias de tareas repetitivas o tediosas, que realizo en una o más aplicaciones de manera frecuente.

Búsquedas especializadas

Una de mis tareas diarias es la gestión de licencias de las aplicaciones que desarrolla mi empresa. Diariamente recibo correos o llamadas con solicitud de licencias, y consultas de clientes y códigos de activación. El histórico de licencias está guardado en una serie de archivos textos. El siguiente código, conjuntamente con otra herramienta llamada Windows Grep, me permite hacer estas búsquedas muy rápidamente, permitiéndome concentrar en las labores de servicio o gestión de las licencias, y no en los detalles de la búsqueda en sí.

clipboard = 
Send ^c
if clipboard <> 
{  Run "C:\Archivos de programa\Windows Grep\grep32.exe" "%clipboard%" *.txt "C:\Licencias"
  ExitApp
}

Gui, Add, Text,, Buscar:
Gui, Add, Edit, vBuscar ym
Gui, Add, Button, Default ym, Aceptar
Gui, Add, Button, xm, Cancelar
Gui, Show,, Buscar licencias
Return

Esc::
ButtonCancelar:
GuiClose:
  ExitApp

ButtonAceptar:
  Gui submit, nohide
  if Buscar <> 
  {
    Run "C:\Archivos de programa\Windows Grep\grep32.exe" "%Buscar%" *.txt "C:\Licencias"
    ExitApp
  }
  Gui, Show,, Buscar licencias
Return

Este código lo guardo en un archivo aparte ("Consultar.ahk", en este ejemplo), y lo llamo a través de una tecla rápida definida en un archivo junto con todas las otras teclas rápidas (como el que vimos en la primera parte):

#S::Run "C:\Licencias\Consultar.ahk"

La utilización es bastante sencilla: puedo marcar un texto (el nombre de un cliente, o un código de licencia, en un correo, o chat, por ejemplo), presionar las teclas Windows+S y de inmediato me aparece el resultado de la búsqueda (primeras siete líneas de código). Si no hay ningún texto seleccionado, se muestra una pequeña pantalla (las siguientes cinco líneas que empiezan con Gui) donde puedo escribir lo que deseo buscar y al darle aceptar me muestra el resultado (últimas 9 líneas del código).

Empaquetado y publicación de aplicaciones

Este es un ejemplo bastante específico de mis tareas diarias, así que dudo mucho que vayan a usar la secuencia de código exactamente igual como yo la uso. La incluyo aquí para mostrarles otro ejemplo de las cosas que se pueden hacer con el AutoHotkey para ahorrar tiempo y evitar errores.

Una de las aplicaciones que producimos en mi empresa está hecha en FoxPro 2.6. El proceso de compilación, empaquetado y publicación de cada revisión de la aplicación implica la ejecución de una secuencia de pasos, siempre los mismos y en el mismo orden. El proceso, hecho a mano, puede ser un poco fastidioso y propenso a errores (alguna vez olvidé ejecutar alguno de los pasos, con distintas consecuencias), así que este código me garantiza que siempre se hará de la misma manera y mucho más rápidamente de lo que yo lo hacía antes.

; Averiguar si está se está ejecutando el FoxPro. Si no, no se hace nada
IfWinExist, Microsoft FoxPro { WinActivate ; Ir a la ventana que encontró antes (FoxPro) ; Desactivar información del depurador antes de compilar Send !1 Send ^O Send !I{Enter} ; Marcar el ejecutable como Empresarial Send ^{F2} Send ^{End} Send Do ag.prg with .F.{Enter} ; Compilar Send !1 Send !G Send !E Send {Enter} Send {Enter} Send {Enter} ; Pausa para esperar que finalice la compilación de la aplicación MsgBox, Esperar que termine de compilar la aplicación WinActivate ; Volver a la ventana que encontró antes (FoxPro) ; Agregar el ícono Send ^{F2} Send ^{End} Send do \fpw26\addicon{Enter} Send C:\Productos\AdmInt\AdmInt.exe{Tab} Send C:\Productos\AdmInt\BMPS\AdmInt.ico{Tab}{Tab}{Tab} Send {Enter} ; Pausa para actualizar los archivos de actualización en el FTP MsgBox, Actualizar empaquetado en el FTP WinActivate ; Volver a la ventana que encontró antes (FoxPro) ; Marcar el ejecutable como Comercial Send ^{F2} Send ^{End} Send Do ag.prg with .T.{Enter} ; Compilar Send !1 Send !G Send !E Send {Enter} Send {Enter} ; Pausa para esperar que finalice la compilación de la aplicación MsgBox, Esperar que termine de compilar la aplicación WinActivate ; Volver a la ventana que encontró antes (FoxPro) ; Agregar el ícono Send ^{F2} Send ^{End} Send do \fpw26\addicon{Enter} Send C:\Productos\AdmInt\AdmInt.exe{Tab} Send C:\Productos\AdmInt\BMPS\AdmInt.ico{Tab}{Tab}{Tab} Send {Enter} ; Pausa para actualizar los archivos de actualización en el FTP MsgBox, Actualizar empaquetado en el FTP WinActivate ; Volver a la ventana que encontró antes (FoxPro) ; Reestablecer el ambiente de desarrollo ; Activar información del depurador antes de compilar Send !1 Send ^O Send !I{Enter} ; Marcar el ejecutable como Empresarial Send ^{F2} Send ^{End} Send Do ag.prg with .F.{Enter} ; Compilar Send !1 Send !G Send !A Send {Enter} Send {Enter} Send {Enter} }

Toda la tarea, hecha a mano, me podía tomar varios minutos, e incluso algunas veces repetía pasos, por temor a haber olvidado alguno. Ahora me toma menos de un minuto la publicación de cada revisión.

Gex Administrativo: carga de artículos con seriales

Nuestro producto Administrativo no maneja seriales de manera nativa, principalmente porque la gran mayoría de nuestros usuarios no lo requieren. Para los pocos que usan seriales en la carga de artículos, se desarrolló esta solución usando el AutoHotkey.

Gui, Add, Text,, Serial:
Gui, Add, Text,, Artículo:
Gui, Add, Edit, vSerial ym
Gui, Add, Edit, vArticulo
Gui, Add, Button, Default ym, Incluir
Gui, Add, Button, xm, Cerrar
Gui, Show,, Seriales
Return

Esc::
ButtonCerrar:
GuiClose:
  ExitApp

ButtonIncluir:
  Gui submit, nohide
  if Serial <> 
  {
    IfWinExist, Gex Administrativo ; Sin título ; 
      {
        WinActivate
        Send ^{Ins}
        WinActivate, Seriales
        WinActivate, Gex Administrativo
        Send %Articulo%
        Send {Tab}{Tab}{Tab}
        Send 1
        Send {Tab}{Tab}{Tab}{Tab}{Tab}{Tab}{Tab}{Tab}{Tab}{Tab}{Tab}
        Send %Serial%
        Send {Tab}{Tab}{Tab}{Tab}{Tab}
      }
    else
      {
        MsgBox No hay un Gex Administrativo ejecutándose para realizar esta operación
      }
    GuiControl, , Serial
  }
  Gui, Show,, Seriales
Return

Primero se muestra una pequeña pantalla donde se pide el código del artículo a incluir y el número de serial (o preferiblemente el código de barra, directamente desde una lectora de códigos de barra). El programa luego activa la ventana del Gex Administrativo (si no hay ninguna da un mensaje al usuario y vuelve a la pantalla anterior), incluye el artículo, le asigna 1 a la cantidad y coloca el número de serie en el campo de descripción del ítem (donde se puede tomar desde los reportes de la aplicación para hacer lo que sea que el usuario requiera de él).

Esto puede sonar como una tarea muy sencilla, pero si se requiere cargar varias docenas de artículos, con sus respectivos seriales, entonces esta solución le puede ahorrar una cantidad enorme de tiempo al transcriptor. Adicionalmente, es una manera de proporcionarle una solución a un usuario, sin tener que agregar más opciones (complicaciones innecesarias, la mayoría de las veces) a un producto de software.

Este ejemplo en particular se debe ejecutar desde el detalle de una factura de compras, y creando una tecla rápida como esta:

#X::Run "C:\Gex Administrativo\Seriales.ahk"

Soluciones como estas, con unas pocas líneas de código, pueden ahorrarnos mucho tiempo y errores en nuestras labores diarias. En el siguiente artículo de esta serie, veremos cómo podemos incluso crear aplicaciones completas con el AutoHotkey.

2 comentarios:

Antonio Gimenez Freitez dijo...

No entiendo nada pero me parece recontra-arrechisimo!!!!
Felicitaciones!!!

Artax dijo...

Junto con saludar, comento lo siguiente, tengo un arcade corriendo con hyperspin y siempre con el programa abierto xpadder (para el manejo de este frontend y algunos emuladores), el tema es que para juegos de PC xpadder no funciona, lo que necesito:
- Cerrar Xpadder
- Abrir el juego (pes2017)
- Al cerrar el juego que abra nuevamente Xpadder.

La idea es convertirlo a .exe y que haga todo.

Me podrían ayudar con eso por favor? :|

De antemano, muchas gracias!