Cómo usar AutoHotkey (VII): control y manejo de ventanas en Windows

En esta nueva entrega sobre AutoHotkey explicaremos algo tan útil e interesante como es el manejo de ventanas de Windows en una macro.

En primer lugar veremos cómo detectar si una determinada ventana se encuentra abierta y en tal caso activarla (enviarla a primer plano).

Para comprobar si una ventana está abierta disponemos de los comandos IfWinExist y IfWinNotExist en los cuales indicaremos el título de la ventana que deseamos comprobar.

En el siguiente ejemplo comprobamos si la calculadora se encuentra abierta y en caso contrario la abre, activándola luego con el comando WinActivate:

; {CTRL}{MAYÚSCULAS}{M} Activa la ventana de la calculadora o la abre si no se encuentra abierta:
^+m::
    IfWinExist Calculadora
    {
        WinActivate
    }
    else
    {
        MsgBox Pulsa para abrir la calculadora...
        Run Calc
        WinWait Calculadora
        WinActivate
    }
return

El comando WinWait hace que la ejecución de la macro se detenga unos instantes hasta que la ventana haya sido abierta y esté operativa (observa que también se le pasa el título como parámetro).

Como veremos a continuación, una vez abierta una ventana podremos realizar acciones varias acciones con ella.

En este otro ejemplo se abre la calculadora si no lo está ya, y a continuación mediante el comando Send se envían de forma automática pulsaciones de teclado con el fin de borrar el contenido que pueda tener, escribir dos números y sumarlos:

; {CTRL}{MAYÚSCULAS}{N} Activa o abre la calculadora y realiza una suma:
^+n::
    IfWinNotExist Calculadora
    {
        Run Calc
        WinWait Calculadora
    }

    WinActivate Calculadora

    Send {Del}
    Send 350
    Send {NumpadAdd}
    Send 150
    Send {NumpadEnter}
return

Con {NumpadAdd} y {NumpadEnter} se envían a la calculadora las pulsaciones de las teclas ‘+’ y Enter del teclado numérico.

Manejando la ventana AutoHotkey

Veamos ahora otro ejemplo en el que se abre el bloc de notas si no está abierto, y a continuación mediante el comando Send se inserta una línea de texto:

; {CTRL}{MAYÚSCULAS}{B} Activa una ventana del block de notas e inserta un texto:
^+b::
    IfWinNotExist Sin título: Bloc de notas
    {
        Run Notepad
        WinWait Sin título: Bloc de notas
    }

    WinActivate Sin título: Bloc de notas

    Send Escribiendo en el bloc de notas de AutoHotkey.`n
return

Con `n se insertará una nueva línea.

Escribir en una ventana

La siguiente es una macro que resultará muy útil a más de uno, ya que permite tener una ventana siempre visible (en este caso la calculadora de Windows), para lo cual utilizaremos en este caso el comando Winset:

; {CTRL}{MAYÚSCULAS}{V} Dejar siempre visible la calculadora
^+v::
    IfWinNotExist Calculadora
    {
        Run Calc
        WinWait Calculadora
    }

    WinActivate Calculadora

    Winset Alwaysontop, On, Calculadora
return

Este otro código mantendrá siempre visible la ventana que se encuentre activa en el momento de pulsar la combinación de teclado especificada:

; {CTRL}{MAYÚSCULAS}{C} Deja siempre visible la ventana que se encuentre activa
^+c::Winset, Alwaysontop, On, A

Con esta macro es posible tener varias ventanas que estén siempre visibles.

Para que una ventana deje de estar siempre visible, tras hacer clic sobre ella para activarla pulsaremos de nuevo la misma combinación de teclado.

Por otro lado, si deseamos mover una ventana a otra posición de la pantalla utilizaremos el comando WinMove indicando las coordenadas X e Y (fila y columna) relativas a la parte superior izquierda de la pantalla respectivamente:

; {CTRL}{MAYÚSCULAS}{X} Abrir y mover ventana
^+x::
    Run Calc
    WinWait Calculadora

    WinMove 50, 100
return

Mediante los comandos WinMinimize y WinClose podemos minimizar y cerrar ventanas:

; {CTRL}{MAYÚSCULAS}{Z} Abrir y minimizar ventana
^+z::
    Run Calc

    MsgBox Haz clic en Aceptar para minimizar la calculdora...
    WinMinimize Calculadora

    MsgBox Haz clic en Aceptar para cerrar la calculadora...
    WinClose Calculadora
return

¿Que necesitas mostrar y ocultar una ventana? no hay problema, con AutoHotkey también podrás hacerlo con los comandos WinHide y WinShow:

; {CTRL}{MAYÚSCULAS}{A} Mostrar y ocultar ventana
^+a::
    Run Calc

    MsgBox Haz clic en Aceptar para ocultar la calculadora...
    WinHide Calculadora

    MsgBox Haz clic en Aceptar para volver a mostrar la calculadora...
    WinShow Calculadora
    WinActivate Calculadora
return

Por último veamos otro ejemplo en el que con una macro escribimos texto en una venta oculta del block de notas, y con otra mostramos dicha ventana:

; VARIABLE GLOBAL
idventana2 = ""

; {CONTROL}{MAYÚSCULAS}{B} Escribe en una ventana del block de notas oculta
^+b::
    if( idventana2 == "" )
    {
        Run Notepad,,, idventana2
        WinWait Sin título: Bloc de notas
        WinHide ahk_pid %idventana2%
    }

    ; Activar la ventana (para poder escribir en ella)
    WinActivate ahk_pid %idventana2%

    ; Escribir el texto
    Send Escribiendo en el bloc de notas de AutoHotkey.`n
return

; {CONTROL}{MAYÚSCULAS}{d} Muestra la ventana oculta
^+d::
    WinShow ahk_pid %idventana2%
return

En este caso se ha creado una variable global para almacenar el identificador de la ventana (que será guardado en ella por el comando Run).

Si bien los comandos mencionados en este post son los de uso más habitual, AutotHotkey dispone de otros con los que es posible realizar otra clase de acciones.

Si has llegado a este post y te interesa el tema pero te encuentras un poco perdido, te recomiendo que comiences por este primer post de la serie sobre AutoHotkey en el que describimos algunos aspectos de uso básicos.