
Ya hemos hablado de abreviaturas de AutoHotkey en estos otros artículos de AutoHotkey.
Ahora tocaremos una parte especial de la macro de AutoHotkey: esta vez no van a ser los textos o acciones que se ejecutan cuando escribes una abreviatura en tu teclado, sino que es una parte del código que se ejecuta automáticamente al principio, en cuanto se lanza la macro, y ya no se vuelve a ejecutar más…
Es la parte del código que está arriba, en las primeras líneas de la macro, justo antes de la primera abreviatura: es la llamada sección autoejecutable.
Por ejemplo, si quieres que cada domingo se ejecute algo especial en tu ordenador, puedes tomar este código como plantilla:
;>>>>>>>>>>>>>>>>>>>> ; SECCIÓN AUTOEJECUTABLE DE AUTOHOTKEY ; Inicio de macro de AutoHotkey ;>>>>>>>>>>>>>>>>>>>> ;Inicio de la sección autoejecutable Run, outlook.exe Run, iexplore.exe ; Fin de la sección autoejecutable ; Aquí empiezan tus abreviaturas de AutoHotkey ::lmtt::la mosca tse-tsé ::ecp::el cernícalo primilla
Te enseño el archivo de extensión AHK completo, así que lo que ves es después de unos comentarios es que la línea 6 ejecuta la aplicación Outlook, y que la línea 13 ejecuta la aplicación Internet Explorer.
A partir de la línea 12 se tienen las abreviaturas que ya conocías.
Notas:
Hemos empleado la función Run en las líneas 6 y 7, pero si quieres ejecutar una aplicación que no está en la ruta de ejecución de Windows, necesitarás escribir la ruta completa antes del ejecutable (extensión EXE), ¿de acuerdo?
Antes se seguir, quería aclarar que la sección autoejecutable de AutoHotkey se ejecuta una sola vez, o casi una sola vez:
- al cargar la macro AutoHotkey;
- al recargar la macro, es decir, al hacer clic con el botón secundario del ratón en el icono de AutoHotkey dentro de la Bandeja del sistema y después seleccionar el menú Reload this script :

Así pues, al ejecutar esta macro de AutoHotkey, se ejecutarán estas dos aplicaciones automáticamente.
Fíjate bien en esta idea: si copias esta macro de AutoHotkey en la carpeta de Inicio de Windows, se ejecutarán todas las aplicaciones que quieras nada más arrancar Windows.
Está fenomenal, sí, pero no es para tirar cohetes, porque esto mismo lo puedes conseguir si copias los accesos directos de estas dos aplicaciones en la misma carpeta Inicio.
La ventaja de AutoHotkey es que si tienes varios ordenadores, puedes configurarlos todos de la misma forma con AutoHotkey.
Pero bueno, hay mucho que contar aún, y… atención, atención, que lo bueno empieza ahora…
Afinando la sección autoejecutable
Una vez vista una aplicación algo arcaica de la sección autoejecutable, vamos a emplear las funciones de fecha y hora vistas en los dos artículos anteriores:
Te pongo los enlaces por si quieres repasar los conceptos que aquí vamos a ver rápidamente.
Si ya estás ducho con las funciones de fecha y hora, puedes mirar este código y adivinar qué hace:
;>>>>>>>>>>>>>>>>>>>>
; SECCIÓN AUTOEJECUTABLE DE AUTOHOTKEY
; Inicio de macro de AutoHotkey
;>>>>>>>>>>>>>>>>>>>>
;Inicio de la sección autoejecutable
FormatTime, díaSemana, , WDay
;el domingo (día=1) se ejecutan estas líneas
if díaSemana = 1
{
Run, notepad
Sleep 200
Send Hoy es domingo: comprar el periódico{Enter}
}
; Fin de la sección autoejecutable
; Aquí empiezan las abreviaturas de AutoHotkey
::lmtt::la mosca tse-tsé
::ecp::el cernícalo primilla
Fíjate que en la línea 6 se emplea la función FormatTime para guardar el día de semana en la variable díaSemana.
Lo bueno llega en la línea 9: si el día de la semana es 1, es decir, si es domingo, se ejecutará el código entre llaves { y }.
En este caso, si es domingo se ejecutará la aplicación Bloc de notas (línea 11), se esperarán 200 milisegundos para que se active dicha aplicación (línea 12), y se escribirá en el bloc un texto que te recuerda que tienes que comprar el periódico (línea 13).
Fíjate que de esta manera puedes tener un listado a la vista con las tareas semanales que quieres hacer el domingo, todo ello, nada más encender el ordenador.
Preparar una macro para cada día de la semana no es complicado, ¿verdad?
Lo repito una vez más: esta parte (hasta la línea 17) se ejecuta una única vez, al iniciar la macro.
He hablado de que puedes colocar la macro (o un acceso a ella) en el menú Inicio de Windows, para que la macro se ejecute cada vez que enciendas el ordenador. Pero también puedes tener la macro AHK en alguna carpeta de tu ordenador y ejecutarla cuando quieras, y pasaría lo mismo con la sección autoejecutable: solo se ejecutaría una vez, al ejecutar la macro.
Si tienes un gestor de tareas, como Outlook, seguramente será más fácil si lo haces con una tarea de Outlook, pero si lo eres un monstruo de la productividad y necesitas abrir 20 cosas cada día, será más fácil y flexible si lo haces con AutoHotkey.
Por supuesto, puedes hacer que la anterior macro se ejecute solo en ciertas horas. Sería cuestión de utilizar la función FormatTime para asignar el valor a una variable hora.
Sería añadir esta línea:
FormatTime, hora, , H
Y dejar la línea 9 así:
if (díaSemana = 1 and (hora >=8 or hora <=11))
De esta forma, el código entre llaves se ejecutaría si, y solo si, lanzas la macro un domingo por la mañana entre las 8:00 y las 11:59.
Prueba este código para comprobar lo que digo, y cambia las horas y el día para hacer que funcione cuando tú quieres.
La siguiente macro sería más completa:
;>>>>>>>>>>>>>>>>>>>>
; SECCIÓN AUTOEJECUTABLE DE AUTOHOTKEY
; Inicio de macro de AutoHotkey
;>>>>>>>>>>>>>>>>>>>>
FormatTime, díaSemana, , WDay
FormatTime, hora, , H
;el domingo (día=1) se ejecutan estas líneas
if díaSemana = 1
{
Run, notepad
Sleep 200
Send Hoy es domingo: comprar el periódico{Enter}
}
; Los miércoles (día=4) antes de las 11:59 de la mañana,
; tengo que sacar al perro
if (díaSemana = 4 and (hora = 9 or hora = 10 or hora = 11))
{
IfWinExist, Sin título: Bloc de notas
WinActivate ;
else
Run, notepad
Sleep 200
Send Hoy es miércoles: sacar el perro a pasear{Enter}
}
;Los miércoles (día=4) antes de las 10 de la mañana,
if díaSemana = 4
{
IfWinExist, Sin título: Bloc de notas
WinActivate ;
else
Run, notepad
Sleep 200
Send Hoy es miércoles: clase de ajedrez{Enter}
}
;Los lunes (día 2) leemos información de Bolsa
if díaSemana = 2
Run www.ibex35.es
; Fin de la sección autoejecutable
; Aquí empiezan las abreviaturas
::lmtt::la mosca tse-tsé
::ecp::el cernícalo primilla
Se han añadido código a partir de la línea 15: si es miércoles y la hora de arranque del ordenador es antes entre las 9:00 y las 11:59, se añadirá al Bloc de notas un texto recordatorio de que tengo que sacar a pasear al perro. Antes, en la línea 19 se comprueba si ya se está ejecutando el Bloc de notas; si es así, lo activa en la línea 20. Si no se está ejecutando, lo ejecuta en la línea 22. Espera 200 milisegundos para darle tiempo a que se ejecute y active (función Sleep de la línea 23), y escribe el texto informativo en la línea 24 en el bloc.
De esta manera puedes añadir líneas de código para que cada día de la semana se te abra automáticamente un bloc con las tareas que te hayas programado.
Te puedo asegurar que uso esta funcionalidad con AutoHotkey, porque me da una flexibilidad que no me da Outlook para cosas más especiales.
En fin, para gustos no hay nada escrito.
¿Para qué uso la sección autoejecutable de AutoHotkey?
Es la pregunta del millón: ¿para qué puede servir la sección autoejecutable de AutoHotkey?
Uso mucho la sección autoejecutable para abrir páginas web automáticamente al empezar el día.
Tengo como 50 páginas web que me gusta leer, pero no cada día, porque son blogs o similares, que escriben con una cadencia mensual más o menos. Distribuyo esas 50 páginas web por todo el mes, para no agobiarme de lectura un día en concreto, y lo hago así:
;>>>>>>>>>>>>>>>>>>>>
; SECCIÓN AUTOEJECUTABLE DE AUTOHOTKEY
; Inicio de macro de AutoHotkey
;>>>>>>>>>>>>>>>>>>>>
;Inicio de la sección autoejecutable
FormatTime, día, , d
FormatTime, hora, , H
; se lanza el navegador Firefox
Run, firefox.exe
;el día 2 de cada mes se ejecuta este código
;si la hora está comprendida entre las 8:00 y las 10:59 am
if (día = 2 and (Hora = 8 or Hora = 9 or Hora = 10))
{
a1 = http://www.páginaweb_01.com
a2 = http://www.páginaweb_02.com
a3 = http://www.páginaweb_03.com
a4 = http://www.páginaweb_04.com
a5 = http://www.páginaweb_05.com
a6 = http://www.páginaweb_06.com
a7 = http://www.páginaweb_07.com
a8 = http://www.páginaweb_08.com
a9 = http://www.páginaweb_09.com
a10 = http://www.páginaweb_10.com
AbrirEnlacesEnFirefox ()
}
;el día 8 de cada mes se ejecuta este código
;si la hora está comprendida entre las 8:00 y las 10:59 am
if (día = 8 and (Hora = 8 or Hora = 9 or Hora = 10))
{
a1 = http://www.páginaweb_11.com
a2 = http://www.páginaweb_12.com
a3 = http://www.páginaweb_13.com
a4 = http://www.páginaweb_14.com
a5 = http://www.páginaweb_15.com
a6 = http://www.páginaweb_16.com
a7 = http://www.páginaweb_17.com
a8 = http://www.páginaweb_18.com
a9 = http://www.páginaweb_19.com
a10 = http://www.páginaweb_20.com
AbrirEnlacesEnFirefox ()
}
;el día 16 de cada mes se ejecuta este código
;si la hora está comprendida entre las 8:00 y las 10:59 am
if (día = 16 and (Hora = 8 or Hora = 9 or Hora = 10))
{
a1 = http://www.páginaweb_21.com
a2 = http://www.páginaweb_22.com
a3 = http://www.páginaweb_23.com
a4 = http://www.páginaweb_24.com
a5 = http://www.páginaweb_25.com
a6 = http://www.páginaweb_26.com
a7 = http://www.páginaweb_27.com
a8 = http://www.páginaweb_28.com
a9 = http://www.páginaweb_29.com
a10 = http://www.páginaweb_30.com
AbrirEnlacesEnFirefox ()
}
;Función que abre los enlaces de arriba en Firefox
AbrirEnlacesEnFirefox ()
{
;Esperar 15 segundos desde que se lanza el navegador
sleep 15000
;un retardo de -1 hace que la función Sleep
;vea si hay algo en la cola de mensajes.
;Si hay algo pendiente, se mirará ahora.
sleep -1
cadenaFirefox = firefox.exe -new-tab
Run %cadenaFirefox% "%a1%"
Run %cadenaFirefox% "%a2%"
Run %cadenaFirefox% "%a3%"
Run %cadenaFirefox% "%a4%"
Run %cadenaFirefox% "%a5%"
Run %cadenaFirefox% "%a6%"
Run %cadenaFirefox% "%a7%"
Run %cadenaFirefox% "%a8%"
Run %cadenaFirefox% "%a9%"
Run %cadenaFirefox% "%a10%"
return
}
; Fin de la sección autoejecutable
; Aquí empiezan las abreviaturas de AutoHotkey
::lmtt::la mosca tse-tsé
::ecp::el cernícalo primilla
La línea 10 ejecuta el navegador Firefox, el navegador que más empleo, nada más lanzar la macro, que la tengo en la carpeta Inicio de Windows, o sea que se ejecuta Firefox al arrancar Windows.
Después en la línea 14 se comprueba si estamos a 2 de mes y entre las 8 y las 11 de la mañana. Si es así, se ejecuta el código entre las llaves { y }.
Vamos a suponer que es así, y que se ejecuta ese código. Si te fijas, lo que hace es asignar unos enlaces a las variables a1 a a10. Estos enlaces son los blogs y páginas web que te comenté que había distribuido a lo largo de todo el mes.
En la línea 26 se llama a la función AbrirEnlacesEnFirefox que está casi al final de la sección autoejecutable, en la línea 64, ¿la ves?
Seguimos el hilo, y nos vamos a la línea 64, y vamos a ver lo que hace paso a paso:
- La línea 67 espera 15 segundos. Esto es para dar tiempo para que Firefox se ejecute y active en primer plano.
- La línea 71 hace una cosa especial: asegurarnos de que Windows no tiene nada en la cola de mensajes antes de continuar. Puede esta línea no sea necesaria, pero a mí me funciona bien así.
- La línea 72 guardar en la variables cadenaFirefox el nombre del ejecutable y un parámetro necesario para que cualquier enlace que se abra en Firefox se abra en una pestaña nueva.
- Las líneas 74 a 83 abren cada uno de los enlaces (guardados en las variables a1 a a10) con el navegador predeterminado. En mi caso, lo hace con Firefox, que es mi navegador predeterminado. Si tu navegador por defecto es Chrome, es posible que esta macro te funciones o que tengas que cambiar algo…
En fin, va abriendo cada enlace en una nueva pestaña de Firefox, y como he establecido el parámetro -new-tab, Firefox abrirá cada enlace en su pestaña.
Esta filosofía me simplifica mucho la vida, ya que sé que con tal de abrir mi PC a ciertas horas del día, iré viendo en mi navegador esas webs que no quiero perder de vista, pero que no tampoco quiero seguir cada día, porque no se actualizan diariamente.
Se entiende lo que quiero, ¿verdad?
La sección autoejecutable termina en la línea 89, ya que en la 90 está la primera abreviatura de AutoHotkey.
Otras aplicaciones de la sección autoejecutable de AutoHotkey
Piensa ahora en esta otra posibilidad:
Tienes una macro AHK guardada en tu disco duro como mis macros.AHK.
Fíjate bien: desde esta macro puedes lanzar otra macro distinta, llamada pedido.AHK, por ejemplo, en la que tienes programado realizar unas determinadas acciones cada vez que recibes un pedido: como abrir la hoja de cálculo donde guardas tus pedidos, abrir tu hoja de cálculo donde apuntas los movimientos de caja esperados, y abrir también tu plantilla para rellenar la factura, etc.
¡Lanzar esta segunda macro desde la primera macro es muy fácil !
Por ejemplo, mis macros.AHK podrías ser así:
;>>>>>>>>>>>>>>>>>>>> ; MIS MACROS ; Inicio de macro de AutoHotkey ;>>>>>>>>>>>>>>>>>>>> ;Inicio de la sección autoejecutable ; Aquí empiezan las abreviaturas de AutoHotkey ::lmtt::la mosca tse-tsé ::ecp::el cernícalo primilla ::ecv::el cernícalo vulgar #ñ:: Run C:\autohotkey\pedido.ahk return
Suponiendo que guardes tus macros de extensión AHK están en la carpeta C:\AutoHotkey\, la línea 11 se disparará al pulsar WIN+ñ con el teclado. Esto ejecutará la macro pedido.AHK, donde tendrás grabada una serie de acciones que haces cada vez que te entra un pedido. Estas acciones estarían, ni más ni menos, que en la sección autoejecutable de pedido.AHK.
No te escribo el código que hace lo que quieres del archivo pedido.AHK, lo dejo como tarea tuya…
🙂
No hay nada que impida tener varias macros AutoHotkey ejecutándose al mismo tiempo, así que es posible que en tu bandeja de entrada veas varios iconos H sobre fondo verde, cada uno correspondiendo a la macro que se está corriendo.
En este ejemplo, puedes ver mi Bandeja de entrada con 4 macros AutoHotkey ejecutándose simultáneamente en mi ordenador:
![]()
Conclusiones de la sección autoejecutable de AutoHotkey
Hemos visto que la sección autoejecutable de una macro de AutoHotkey es esa parte de la macro situada al principio del código que llega hasta que se declara la primera abreviatura.
La sección autoejecutable de AutoHotkey se ejecuta una sola vez, y nos puede venir bien para ejecutar código, sin necesidad de dispararlo con una abreviatura típica de AutoHotkey.
Hemos visto la posibilidad de emplear fechas y horas en la sección ejecutable, y cómo puedes ejecutar otro AHK desde una abreviatura de AutoHotkey.
No es un listado exhaustivo ni mucho menos de todas las posibilidades de la sección autoejecutable de AutoHotkey, pero espero que este artículo te dé ideas que te sirvan a ti para crear tus propias macros.
Por supuesto: si ya utilizabas la sección autoejecutable de AutoHotkey, me gustaría saber para qué, por si me das ideas a mí…
🙂






Gracias Jesús, excelente blog, me he pegado horas usando comandos incorrectos en un miniscript para solucionar un fallo a la salida de un programa y creo que acabo de encontrar la solución en tu blog.
Yo estaba usando "Delay" y veo que debería haber usado "Sleep" para que espere un tiempo antes de ejecutar las órdenes, en mi caso simplemente que pulse tabulador y luego enter, para que vuelva a ejecutar un programa que se ha quedado minimizado en segundo plano.
Concretamente es lo siguiente:
HyperSpin ejecuta distintos emuladores, tanto de las máquinas recreativas como consolas, también ejecuta juegos de PC, por lo que yo he añadido PinballX a HyperSpin como juego de Pc.
PinballX gestiona las mesas de Pinball de los distintos juegos de Pinball que tengas puestos, Pinball FX2, Visual Pinball, Future Pinball y Pinball Arcade, por lo que lo tienes todo en un mismo gestor.
Pero al salir de PinballX se produce el fallo y el HyperSpin se queda Minimizado, con el scrip de TAB+Enter espero solucionarlo gracias a "Sleep".
En estas máquinas que hago es importante que no se te ha que usar teclado ni ratón para nada, que todo se haga con los mandos y botones.
Víctor: me alegro mucho de que te haya servido y te agradezco que lo digas, así también veo que ha sido útil.
¡Felices fiestas!
... Jesús Prieto ...
Felices fiestas Jesús, ha funcionado perfectamente, simplemente estaba poniendo mal una orden.
Hola, la pregunta no tiene que ver con el blog, pero sí con la herramienta. ¿cómo se pueden extraer archivos con extensión .exe ela
Disculpad, la pregunta era, ¿cómo se pueden extraer archivos con extención .exe construidos con autohotkey? Muchas gracias.
Excelente, Jesús. De verdad que haces un gran trabajo en traernos de manera fácil esta espectacular herramienta. No soy traductor, pero en la profesión que desarrollo me he topado con muchas tareas repetitivas, por lo tanto AHK y usted han sido parte de la Solución.
Gracias, compadre.
Saludos desde Colombia.
Muchísimas gracias y me alegro un montón de que AutoHotkey y GOnduana te resulten útiles.
Un fuerte abrazo desde España.
… Jesús Prieto …
Hola Jesus muchas gracias por tu aportes, tengo un problema
quiero hacer un script que cuando se ejecute un video o se reproduca ese video con extencion avi o mp4 se corra un programa exe me puedes ayudar son varios videos en la lista de reproduccion y cada vez que se reprodusca se corra el archivo exe