Configuración de accesos rápidos con AutoHotKey

  • AutoHotkey permite crear y encadenar atajos de teclado personalizados, incluidos "líder" y doble toque, para multiplicar combinaciones.
  • El envío con {Blind} mantiene modificadores físicos como Ctrl y hace los atajos "spameables" sin soltar la tecla.
  • Incluye ejemplos prácticos: textos rápidos, portapapeles, fechas automáticas y reemplazos en hojas de cálculo.
  • Los scripts pueden cargarse al iniciar Windows y compilarse a EXE para compartir sin instalar AHK.

Configurar accesos rápidos con AutoHotKey

¿Te has quedado corto de combinaciones con la mano izquierda y sientes que tus accesos rápidos no dan más de sí? Con AutoHotkey (AHK) puedes ir mucho más allá de los típicos Ctrl+Q o Ctrl+W y construir una especie de «tecla líder» que, al pulsarla, convierta la siguiente pulsación en una acción distinta. Ese enfoque desbloquea una barbaridad de combinaciones sin mover la mano del teclado.

Además, es posible encadenar acciones, detectar doble toque e incluso mostrar una pequeña pista visual en pantalla para saber que tu atajo ha entrado en modo líder. Vamos a ver cómo montarlo paso a paso, con ejemplos útiles y varias técnicas para hacerlo rápido, estable y «spameable» (repetible sin soltar Ctrl) cuando lo necesites.

Qué es AutoHotkey y por qué merece la pena

AutoHotkey es un proyecto gratuito y de código abierto para Windows que escucha tus combinaciones de teclado y ejecuta scripts que tú mismo defines. Si alguna vez te faltó ese atajo perfecto, AHK te permite crear el tuyo: desde enviar texto, abrir apps, transformar contenido del portapapeles, hasta orquestar múltiples teclas y retrasos al milímetro.

Los scripts de AHK son ficheros .ahk sencillos que puedes editar en cualquier bloc de notas. Al ejecutarlos, el sistema «escucha» tus hotkeys y dispara las acciones definidas. Si quieres llevarlos a cualquier equipo, también puedes compilarlos a EXE y olvidarte de instalar AutoHotkey en destino.

A la hora de enviar pulsaciones, AHK ofrece varios modos (Send, SendInput, SendEvent…), con diferencias en velocidad y comportamiento. Para atajos rápidos y estables, SendMode Input y SetKeyDelay -1 suelen ser apuesta segura, porque reducen latencias al mínimo.

Por cierto, AHK tiene su propia sintaxis, muy directa, y no necesitas ser programador para aprovecharla. Con copiar, pegar y adaptar un par de ejemplos tendrás mucho ganado.

Del atajo simple a la «tecla líder»: combina sin límite práctico

El problema habitual: tienes Ctrl+Q para una cosa, Ctrl+W para otra… y en nada te quedas sin combinaciones cómodas en la izquierda. La solución es pensar al revés: convertir, por ejemplo, Ctrl+Q en un modificador temporal. Al pulsarlo, tu siguiente tecla (Q, W, E, R…) desencadena un script distinto y, después, todo vuelve a la normalidad.

Con esta idea, Ctrl+Q y luego Q puede ser el “Script 1”; Ctrl+Q y luego W, el “Script 2”; y así sucesivamente con todo el teclado. Eso ya multiplica las posibilidades de forma brutal sin mover la mano ni un milímetro.

¿Y si tampoco te basta? Entra el doble toque: Ctrl+Q, seguido de dos toques rápidos a Q, puede lanzar un “Script 3”; Ctrl+Q y dos toques a W, el “Script 4”… y por ahí sigues (triple toque, etc.). En la práctica, tienes combinaciones a mansalva.

Para mejorar la experiencia, mucha gente muestra una mini GUI naranja en la esquina superior derecha cuando activa el modo líder. Es un cuadradito que desaparece tras la siguiente tecla, solo para confirmar que la secuencia está “armada”.

Ejemplo real: categorías por líderes y usos distintos

Configurar accesos rápidos con AutoHotKey

Un patrón que funciona muy bien es asignar líderes temáticos. Por ejemplo: Ctrl+Q para scripts de trabajo, Ctrl+W para abrir aplicaciones y Ctrl+R para juegos o tareas personales. Dentro de cada líder, la segunda tecla decide el script concreto, y el doble toque abre variantes.

  Reparar Windows tras una infección grave

Imagina que te encanta automatizar acciones en un juego. Podrías usar Ctrl+R como líder de «juego», luego Ctrl+R y P para un script de piano cargando un preset concreto, y con doble toque a P cargar otra canción distinta. Es muy cómodo y, sobre todo, infinitamente escalable.

Que nadie se líe con la palabra “infinito”. Vale, estrictamente no hay infinito físico en el teclado, pero a efectos prácticos vas a tener más combinaciones de las que puedas memorizar: todas las letras, con y sin doble toque, y si quieres triple o cuádruple toque.

Implementación en AHK: líder básico con detección de doble toque

Vamos al grano. Empezamos con un líder Ctrl+Q que espera una tecla, muestra el cuadradito naranja y admite doble toque. Este ejemplo usa AutoHotkey v1 (sintaxis clásica) y está pensado para ser claro y fácil de extender:

#NoEnv
SendMode Input
SetWorkingDir %A_ScriptDir%
SetKeyDelay, -1, -1
#InstallKeybdHook

; --- Líder Ctrl+Q con GUI indicadora y doble toque ---
$^q::
    if (leaderBusy)
        return
    leaderBusy := true

    ; Pequeña GUI naranja arriba a la derecha
    SysGet, mon, MonitorWorkArea, 1
    Gui, +AlwaysOnTop -Caption +ToolWindow
    Gui, Color, FF7F00
    Gui, Show, % "x" monRight-28 " y" monTop+10 " w18 h18", Leader

    ; Captura una tecla en 800 ms
    Input, LKey, L1 T0.8 V
    Gui, Destroy

    if (ErrorLevel = "Timeout" || LKey = "") {
        leaderBusy := false
        return
    }

    ; Intento de doble toque: rápida liberación y segunda lectura
    second := ""
    KeyWait, %LKey%, T0.3
    if (!ErrorLevel) {
        Input, second, L1 T0.3 V
    }

    ; Enrutado por etiqueta según tap simple/doble
    if (second = LKey)
        Gosub, Leader_Double_%LKey%
    else
        Gosub, Leader_Single_%LKey%

    leaderBusy := false
return

; ---- Acciones ejemplo (ajusta a tus scripts) ----
Leader_Single_q:
    ; Script 1
    MsgBox, 64, Script 1, Ejecutado: Ctrl+Q, luego Q
return

Leader_Single_w:
    ; Script 2
    MsgBox, 64, Script 2, Ejecutado: Ctrl+Q, luego W
return

Leader_Double_q:
    ; Script 3
    MsgBox, 64, Script 3, Doble toque en Q tras Ctrl+Q
return

Leader_Double_w:
    ; Script 4
    MsgBox, 64, Script 4, Doble toque en W tras Ctrl+Q
return

Este esqueleto cubre lo esencial: activas el líder, ves el indicador, capturas la siguiente tecla y detectas, si procede, un segundo toque rápido. Después, solo tienes que colgar tus acciones en etiquetas tipo Leader_Single_letra y Leader_Double_letra.

Cómo hacer «spameable» Ctrl sin soltar la tecla (caso ^g → ^t y luego Alt+g)

Un caso muy común es querer mapear Ctrl+G a la secuencia Ctrl+T y, después, Alt+G, manteniendo Ctrl físicamente pulsado para poder volver a disparar el atajo sin soltar. Si lo haces mal, el script suelta Ctrl por el camino y te fastidia el ritmo.

La clave es usar {Blind} para respetar el estado real de los modificadores que tengas pulsados (Ctrl en este caso). Así, cuando envías la t, viaja con el Ctrl físico; luego mandas Alt+g y Ctrl sigue abajo porque tú no lo has soltado. Ejemplo muy limpio:

SendMode, Input
SetKeyDelay, -1, -1

$^g::
    ; Primero Ctrl+t respetando el Ctrl físico con {Blind}
    SendInput, {Blind}{t}
    ; Luego Alt+g explícito
    SendInput, !g
return

Con este patrón, no hace falta hacer {CtrlDown} al final para “recolocar” el modificador. Al no enviar nunca {CtrlUp}, y gracias a {Blind}, Ctrl sigue como estaba: pulsado físicamente por ti.

Si prefieres, puedes forzar eventos más “clásicos” (down/up), pero cuidando de no dejar teclas enganchadas. Solo úsalo si sabes lo que haces y añade una salvaguarda para soltar Ctrl cuando sueltes la tecla de verdad:

$^g::
    ; Variante con eventos explícitos (útil si tu app es puñetera)
    SendEvent, {Ctrl Down}{t}{Alt Down}g{Alt Up}
return

; Asegúrate de liberar el Ctrl sintético al soltarlo físicamente
*~Ctrl Up::
    SendEvent, {Ctrl Up}
return

En la mayoría de escenarios, el primer enfoque con SendInput + {Blind} es más rápido y robusto. Si notas comportamiento raro, prueba la primera solución antes de complicarte con down/up manuales.

  Cómo medir el ping en Windows 11

Recordatorio de sintaxis útil en AutoHotkey

Configurar accesos rápidos con AutoHotKey

Vas a ver estos símbolos todo el rato cuando declares hotkeys y envíes pulsaciones. Memorizarlos te ahorra vueltas cuando leas o escribas scripts:

  • ^ = Ctrl
  • + = Shift
  • ! = Alt
  • :: = define atajo (hotkey)
  • := = asignación de variables (expresión)

Primer script: un mensaje para comprobar que todo funciona

Descarga AutoHotkey desde su web, crea un archivo .ahk (por ejemplo, hola_mundo.ahk), edítalo y pega algo como esto. Así validas que AHK está escuchando tu atajo y mostrando una ventana:

^+!u::  ; Ctrl+Shift+Alt+U
    MsgBox, 0, ¡Hola!, Hola desde AutoHotkey :)
return

Pulsa Ctrl+Shift+Alt+U y deberías ver el cuadro de diálogo. Evita robar combinaciones del sistema (como Ctrl+C) para no pisar atajos nativos.

Remapeos y envíos simples: del Administrador de tareas a textos rápidos

Remapear un atajo por otro es coser y cantar. Por ejemplo, abrir el Administrador de tareas desde Ctrl+Q usando su combinación universal (Ctrl+Shift+Esc):

^q::
    SendInput, ^+{Esc}
return

También puedes insertar tu correo, firma o cualquier texto con una combinación, sin depender del portapapeles. SendInput es perfecto para ello por su velocidad:

^!m::  ; Ctrl+Alt+M
    SendInput, micorreo@ejemplo.com
return

Si prefieres preparar el texto en el portapapeles sin escribirlo aún, usa la variable Clipboard. Queda listo para pegar donde quieras:

^!m::
    Clipboard := "micorreo@ejemplo.com"
return

Fechas automáticas: mes actual y mes anterior sin fallos

Muchos flujos de trabajo piden escribir el mes a menudo. AHK te lo escribe solo con un atajo. Este ejemplo obtiene el mes actual en español y lo teclea:

; Mes actual (formato completo, locale español)
^+!F4::
    time := A_NowUTC
    FormatTime, mes, %time%, L0x0C0A, MMMM
    SendInput, %mes%
return

Y este te saca el mes anterior sin rompecabezas (resta un día al día 1 del mes actual y formatea):

; Mes anterior
^+!F5::
    date := (A_YYYY . A_MM . "01")
    date += -1, days
    FormatTime, mesAnterior, %date%, L0x0C0A, MMMM
    SendInput, %mesAnterior%
return

Reemplazar el mes pasado por el actual en una celda

Si trabajas con hojas de cálculo, este atajo copia la celda, reemplaza el mes anterior por el actual y pega el resultado. Ideal cuando duplicas filas mensuales y se te olvida actualizar el texto del mes:

^+!F6::
    ; Mes actual y anterior
    time := A_NowUTC
    FormatTime, mesActual, %time%, L0x0C0A, MMMM
    date := (A_YYYY . A_MM . "01")
    date += -1, days
    FormatTime, mesAnterior, %date%, L0x0C0A, MMMM

    ; Copia y transforma
    SendInput, ^c
    ClipWait, 0.5
    texto := Clipboard
    texto := StrReplace(texto, mesAnterior, mesActual)
    Clipboard := texto
    SendInput, ^v
return

Si combinas esto con un líder, puedes tener un submenú de edición de texto sin límites: reemplazar, normalizar mayúsculas, limpiar espacios, etc.

Cargar tus scripts al iniciar Windows

Para que tus atajos estén activos nada más arrancar, basta con poner un acceso directo al .ahk en la carpeta de Inicio de tu usuario. Haz Win+R, escribe shell:startup y pega ahí el acceso directo a tu script. Cada reinicio, AHK lo cargará en segundo plano y tendrás todo listo.

Compilar a EXE y compartir sin instalar AHK

Configurar accesos rápidos con AutoHotKey

Cuando quieras pasar un script a otra máquina, compílalo a ejecutable con el menú contextual (botón derecho sobre el .ahk → «Compile Script»). Obtendrás un .exe autónomo que se ejecuta sin AutoHotkey instalado, ideal para equipos gestionados o donde no quieres tocar nada.

  Excluir carpetas o unidades del análisis de Windows Defender: guía completa

Consejos pro: velocidad, estabilidad y contexto

Unos ajustes muy sencillos marcan la diferencia en cómo se sienten tus atajos. SendMode Input y SetKeyDelay -1,-1 aceleran el envío y evitan retrasos perceptibles; el prefijo $ delante de un hotkey impide que las teclas enviadas lo disparen a sí mismo (recursión), algo que a veces genera bucles inesperados.

Si un atajo debe actuar solo en una aplicación, usa #IfWinActive para acotarlo por ventana o título. Por ejemplo, que “Ctrl+Q líder” solo funcione en tu editor, y “Ctrl+W líder” solo en el navegador. Es una manera muy limpia de evitar interferencias.

Cuando simules pulsaciones con modificadores, recuerda lo de {Blind}. Respeta siempre el estado físico de las teclas si quieres que los combos sean spameables. Si debes bajar y subir modificadores manualmente, añade una salida de seguridad para no dejarlos pegados si la app se interrumpe.

Y no subestimes el valor de la GUI naranja del líder. Es una pista visual mínima que te ahorra dudas: sabes que AHK espera la siguiente tecla de la secuencia y así vas como un tiro.

Ejemplo ampliado de líder: abre apps, lanza scripts y variantes por doble toque

Para que veas el patrón completo, aquí tienes una plantilla de líder Ctrl+W enfocada a abrir aplicaciones con toque simple y doble toque para variantes (por ejemplo, perfiles o proyectos distintos). Adáptala a tus rutas:

$^w::
    if (leaderBusy)
        return
    leaderBusy := true

    ; Indicador visual
    SysGet, mon, MonitorWorkArea, 1
    Gui, +AlwaysOnTop -Caption +ToolWindow
    Gui, Color, FF7F00
    Gui, Show, % "x" monRight-28 " y" monTop+10 " w18 h18", Leader

    Input, key, L1 T0.8 V
    Gui, Destroy

    if (ErrorLevel = "Timeout" || key = "") {
        leaderBusy := false
        return
    }

    second := ""
    KeyWait, %key%, T0.3
    if (!ErrorLevel)
        Input, second, L1 T0.3 V

    if (second = key)
        Gosub, Apps_Double_%key%
    else
        Gosub, Apps_Single_%key%

    leaderBusy := false
return

; --- Apps por tecla ---
Apps_Single_c:  ; Ctrl+W luego C
    Run, chrome.exe
return

Apps_Double_c:  ; Doble toque en C
    Run, chrome.exe --profile-directory=Default
return

Apps_Single_v:
    Run, code.exe
return

Apps_Double_v:
    Run, code.exe "C:\\Proyectos\\Proyecto1"
return

Con esto puedes tener líderes por categorías: trabajo, apps, juegos, utilidades… y dentro de cada grupo, acciones y variantes bien organizadas. Añade una hoja de chuletas al principio y, en unos días, ni la mirarás.

Buenas prácticas para evitar dolores de cabeza

Nombres claros en etiquetas y variables (Leader_Single_x, Leader_Double_x, Apps_Single_x…). Cuanto más autoexplicativo, mejor.

No pises atajos críticos del sistema (copiar, pegar, deshacer). Para no reeducar a tu cerebro, inventa combos neutros.

Divide scripts grandes en ficheros por tema y cárgalos desde un main con #Include. Mantener será más fácil.

Prueba con SendInput y ajusta KeyDelay antes de usar down/up manuales. Es más estable y a menudo suficiente.

Montado así, un sistema de atajos con líder te da una sensación de control tremenda: una tecla para “armar” y otra para ejecutar, con doble toque para variantes. Si además resuelves bien los casos “spameables” con {Blind}, vas a volar por el teclado sin que nada se te resista.

así puedes imprimir hojas de cálculos en Excel
Artículo relacionado:
Guía completa de formatos de números en Excel: qué son y cómo dominarlos