Cada vez que me paso por la librería de cualquier centro comercial ojeo por encima las novelas más recientes pero tardo bien poco en correr a la sección de productividad e informática. Me apasiona la gestión del tiempo y las miles de técnicas de automatización que podemos introducir en nuestro día a día para exprimir cada minuto. Hoy quiero compartir con vosotros una que llevo utilizando desde hace tiempo sin la cual ya no concibo mi trabajo diario: los shorcuts o atajos de teclado personalizados de autohotkeys.
Todos hemos utilizado el Ctr+C/Ctr+V y no dudamos de su eficacia y su conveniencia. Ahora bien, las tareas más frecuentes no son iguales para todos y por ello, los sistemas operativos como Microsoft crean atajos de teclado que son útiles para el público general pero quizás, hay una acción que repites en tu jornada laboral muchas veces y es posible que puedas automatizarla para ahorrar más tiempo. Es aquí donde entra Autohotkeys, un proyecto de software libre para Microsoft Windows que te permite programar un script de macros para tu ordenador. La primera pregunta que surge es ¿qué es un macro?. Un macro es una serie de acciones que se ejecutan secuencialmente cuando una condición inicial es satisfecha. Por ejemplo, el Ctr+C es un macro en tanto que al pulsar simultáneamente ambas teclas, la condición inicial es satisfecha y nuestro ordenador busca el texto seleccionado y lo copia al clipboard (sección de memoria temporal dedicada a la información obtenida por copia, cortar y otras funciones).
Autohotkeys soporta la creación de macros de teclado, de cursor de ratón e incluso joystick. De esta forma podemos crear un script con el que al pulsar la tecla windows y la tecla T nos lance por ejemplo el programa Adobe Reader. Las posibilidades son inmensas y os quiero traer algunos ejemplos de scripts que os pueden ser útiles. Un ejemplo es un multiclipboard, que nos permite copiar varios fragmento de texto a varios clipboards independientes que resultan muy útiles si tenemos que estar trabajando con URLs o varias IPs. Otro ejemplo son los hotstrings que nos autocompletan el texto escrito en el ordenador de la misma forma que el autocompletar del teléfono móvil. Para concluir, recuerda que Autohotkeys es un proyecto de software libre, esto implica que si te creas tu propio script ajustado a tus necesidades lo vas a poder emplear en cualquier máquina con Windows y para siempre.
Instalación y creación del primer script
Para comenzar acudimos a la página de autohotkeys e instalamos el programa. Una vez concluida la instalación con los ajustes relevantes sugiero que creemos una carpeta accesible con nuestros scripts y demos click derecho > nuevo > AutoHotkey Script . Le ponemos un nombre que nos guste, yo lo he llamado main.ahk y le damos click derecho y lo editamos con bloc de notas. Aquí podéis emplear cualquier editor de texto como Visual Studio o Notepad++ y podéis buscar en internet plug ins que resalten palabras clave del código para que sea más sencillo de tratar con el. No obstante no me voy a meter con ello ahora.
El script incluye un encabezado relacionado con compatibilidad y velocidad de ejecución que dejaremos como está. El primer comando que vamos a introducir va a ser una combinación de teclas que nos permita abrir la ayuda del programa.
Para entender mejor el funcionamiento del programa de AutoHotkeys vamos a repasar un momento que pasa cuando pulsamos dos teclas simultáneamente. Si realizamos el comando Ctr+C el sistema, al notar que se está presionando la tecla control, esperará a ver cual es la siguiente tecla pulsada y en caso que esta sea C, lanzará el macro asociado a Ctr+C (copiar). Este funcionamiento desentraña un riesgo, si deseamos poner por ejemplo la tecla A como primera tecla en nuestros macros, cuando deseemos escribir ‘vaca’ al pulsar la segunda letra ‘a’ el sistema no escribirá sino que esperará a ver que tecla pulsas simultáneamente para ver que macro quieres ejecutar. En resumen, debemos emplear de tecla lanzador de macros una que no usemos nunca o una tecla que esté duplicada. Mi configuración personal es que, dado que las teclas Ctr están duplicadas, hay una en la izquierda que es la que uso para las funciones predeterminadas asociadas a control y el control de la derecha que es la tecla que voy a establecer como tecla lanzadora de macros personales. Con esto, conservo todas las funciones Ctr+Cualquier tecla que me proporciona mi sistema operativo Windows empleando la tecla control izquierda y puedo lanzar todos mis macros empleando la tecla control derecha. Para completar la explicación, si yo le programo un Ctr(derecha)+C a mi script el sistema con Ctr(izquierda)+C ejecutará el comando copiar usual, pero si pulso Ctr(derecha)+C mi script realiza un override a la función predeterminada del sistema (en este caso copiar) y ejecuta mi macro personal.
Una vez tenemos lo superior claro, vamos a realizar nuestro primer hotkey. Como cualquier lenguaje, es posible la introducción de comandos mediante el punto y coma ‘;’. Introduciendo un título que me aclare la función y las teclas utilizadas, la sintaxis de este lenguaje script es la siguiente: la tecla ‘>’ implica que la siguiente tecla, si está duplicada, emplee como hotkey la tecla de la derecha; la tecla ‘^’ simboliza la tecla control; ahora, ‘a’ simboliza la tecla ‘a’ (que he escogido para que se asemeje a la ‘a’ de ayuda) de nuestro teclado y por último los dos puntos simbolizan el fin del hotkey. En la siguiente línea tenemos el comando ‘Run’ que ejecuta una ruta de sistema o un hipervínculo. En este caso le introducimos la localización por defecto de la guía del programa (revisad si la ruta es distinta en caso de que hayáis cambiado el directorio de instalación) y por último el comando ‘return’ es esencial que marca el fin del macro y pone al script de nuevo alerta en busca de si introducimos otro macro distinto.
De esta forma nuestro hotkey busca ‘Tecla Derecha de…’ ‘Control’ + ‘a’ y ejecuta la ayuda del programa.
Hotstrings y nuestro propio autocorrector de texto
Ahora vamos a ir con los hotstrings. Un hotstring es una secuencia de caracteres que el programa busca para sustituirlos por otros que nosotros le hemos introducido por defecto. Ponemos de ejemplo que el sistema nos sustituya ‘Blanco’ por ‘Negro’. Para ello la sintaxis es la siguiente:
::Blanco::Negro
¿Sencillo verdad? Existen aplicaciones que ya incorporan esta función como algunos correos (gmail). Si al día tienes que responder 100 correos y en todos ellos pones “Hola, buenos días.” puedes sustituir todo el texto por “bd” que el sistema te lo sustituye por “Hola, buenos días” sin fallos, ahorrando así unos segundos. Por último para completar la explicación de los hotstrings, el sistema al introducir el hotstring “Blanco” esperará a que introduzcas un carácter de separación como la barra espaciadora o un enter y procederá a eliminar el hotstring y sustituirlo por lo que le hayas especificado en el script. Si por ejemplo quieres que la sustitución sea inmediata tendrías que modificar el comportamiento del hotstring, para ello, es necesario introducir un carácter entre los dos primeros puntos de la sintaxis del hotstring. Por ejemplo, introducir un asterisco :*:bd::Buenos días hace que no sea necesario introducir una tecla de separación para que el programa actúe.
Para concluir esta sección vamos a introducir algún hotstring que nos ayude a no tener faltas de ortografía. El resultado final de nuestro primer script con algunos Hotstrings quedaría algo similar a esto:
Complicamos el script, un multiclipboard que nos ayude a automatizar el trabajo.
Para concluir con esta introducción a todo lo que puede hacer AutoHotkeys vamos a programar el multiclipboard del que hablábamos en la introducción.
Para este proyecto introducimos varios conceptos nuevos. El primero, es el comando ‘Send’ este comando toma el argumento que le proporcionemos, en este caso ‘^c’ Ctr+C y lo ejecuta como si lo pulsásemos manualmente. El segundo son los box de Autohotkeys, cajas que nos permiten interactuar con el script (Una caja con mensajes de información, una caja que nos pregunte si continuar con el programa o no, etc.). Y el último son las variables del sistema que nos permiten almacenar información para que los macros interactúen entre ellos.
En este caso nuestro proyecto está conformado por dos partes. En la primera buscamos como guardar la información en una variable tipo array del sistema de AutoHotkeys. Esta primera parte la denominé Smart Copy y la podéis ver aquí:
En primer lugar al teclear Ctr(derecha)+C inicia el macro en el que el sistema primero copia el texto seleccionado al clipboard. El sistema después pregunta en una caja de pregunta si deseamos guardar el clipboard en un array y, si le indicamos que sí, tiene dos opciones: si la variable no está inicializada la crea y guarda, en su primer elemento, el contenido del clipboard con el método Push ‘variables.Push(clipboard). Si la variable ya está inicializada simplemente agrega el contenido a la primera sección disponible del array. Es importante darse cuenta que AutoHotkeys tiene variables de sistema por defecto que interactúan con el propio funcionamiento de Windows. En este caso la variable ‘clipboard’ almacena la misma información que el clipboard de Windows luego es conveniente usarla en este caso. Con esto conseguimos, cada vez que damos Ctr(derecha)+C copiar el texto que tenemos a un array interno de autohotkeys. ¿Cómo accedemos ahora a esta información?
La forma más sencilla de realizar esto es de nuevo ejecutando hotkeys que envíen el valor de la variable con el comando ‘Send’ para que el sistema crea que lo estamos tecleando nosotros. Esto es lo que da menos problemas puesto que escribe la string tal y como la hemos copiado. Algunos puntos a tener en cuenta de este código:
- Siempre es necesario en AutoHotkeys poner el comando return en un macro a menos que este ejecute una sola acción, en cuyo caso se puede poner todo en la misma línea.
- Los metacaracteres ‘ >^+1::’ denotan // >=’Tecla Derecha de…’ /^=’Control’ /+=’Tecla Shift’ /1=’El número 1′ /:: = ‘Fin del hotkey’.
- El ‘%’ después de Send significa que no tiene que tipear ‘variables[1]’ sino el contenido almacenado en la posición 1 del array variables.
- También denotar que en AutoHotkeys la indexación empieza en 1 a diferencia de otros idiomas.
- Por último, el comando ‘ >^+0::’ es un bucle en el que el sistema elimina uno a uno todos los valores almacenados en el array para ponerlo a cero.
Esta es una forma de realizar el clipboard y pese a que no tenga funcionalidades programadas como eliminar un valor copiado específico o sustituirlo es importante tener en cuenta que los clipboards son concebidos como memoria temporal y de esta forma cumplen de forma funcional, eficaz y sin complicar demasiado el código.
En resumen, su funcionamiento es seleccionar un fragmento de texto que queremos copiar, darle a copiar de forma usual pero con el control derecho y afirmar en el box emergente que lo queremos guardar. Tras indicarnos la posición, en vez de usar control pegar, presionamos el control derecho, la tecla mayúsculas y la posición en la que se haya guardado el elemento y listo! Ya tenemos un multiclipboard funcional.
¿Qué te ha parecido? ¿Qué le incluirías para que se ajuste a tus necesidades?
Conclusiones
AutoHotkeys es una herramienta de macros y automatización extremadamente útil. Permite desde cosas sencillas como ejecutar un programa con una combinación de teclas hasta automatización de procesos internos al ordenador como aimbots de videojuegos o autoinputs sensibles a la distribución de la información en una página web. Está claro que es útil, potente, sencillo para empezar y de software libre! ¿Te animas a probarlo?
Te dejo por aquí el código empleado para que lo introduzcas en tu script si te animas a probarlo. Copialo a tu archivo “name.ahk” y dale doble click para ejecutarlo. En la barra de herramientas, en la caja de aplicaciones en ejecución deberías ver una H verde que corresponde a tu script de Hotkeys. Puedes guardar el archivo .ahk y dar click derecho en la H>’Reload this script’ para relanzar tu programa con los cambios introducidos. Mucho ánimo y para cualquier problema no dudes en contactarme.
Miguel G
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn ; Enable warnings to assist with detecting common errors.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
;Los porcentajes actúan de separación entre los fragmentos
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;Comando para activar el help (a)
>^a::
Run C:\Program Files\AutoHotkey\AutoHotkey.chm
return
;Abrir el buscador de google
>^g::
Run https://www.google.es/
return
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
::bd::Hola buenos días.
::ç1::midireccióndecorreo@queesmuylargaparagastartiempoescribiendo.com
::llendo::yendo
::engenier::engineer
:*:sinespacio::este_hotstring_se_sustituye_sin_caracter_de_separación
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
SmartCopy
>^c::
Send ^c
MsgBox, 36,, Deseas guardar el clipboard? (press Yes or No)
IfMsgBox Yes
{
if (variables="")
{
variables:=[]
variables.Push(clipboard)
MsgBox % "Almacenado //" variables[variables.Length()] "// en posición :" variables.Length()
}else
{
variables.Push(clipboard)
MsgBox % "Almacenado //" variables[variables.Length()] "// en posición :" variables.Length()
}
}
return
;Multiclipboard
>^+1::Send % variables[1]
>^+2::Send % variables[2]
>^+3::Send % variables[3]
>^+4::Send % variables[4]
>^+5::Send % variables[5]
>^+6::Send % variables[6]
>^+7::Send % variables[7]
>^+8::Send % variables[8]
>^+9::Send % variables[9]
>^+0::
Loop 9
{
variables.Pop()
}
MsgBox % "Variables set to: " variables.Length()
return
;%%%%%%%%%%%%%%%%%