¿Alguna vez te has encontrado alternando frenéticamente entre distribuciones de teclado para escribir código, redactar un correo en otro idioma o simplemente usar atajos de forma más eficiente? Si eres un profesional multilingüe, un desarrollador, un diseñador o un gamer que busca la máxima comodidad, es muy probable que sí. La buena noticia es que ya no tienes que seguir esa rutina agotadora. Hoy te voy a revelar el secreto para tener dos teclados con distribuciones diferentes y 100% funcionales en tu mismo PC. ¡Prepárate para transformar tu experiencia informática! 🚀
¿Por Qué Necesitarías Dos Teclados con Diseños Distintos? 🤔
La idea de conectar un segundo teclado puede parecer extraña para algunos, pero las ventajas son sorprendentes y variadas. Aquí te presento algunas situaciones donde esta configuración brilla con luz propia:
- Profesionales Multilingües: Si trabajas con varios idiomas a diario (por ejemplo, español y alemán, o inglés y japonés), tener un teclado configurado para cada idioma te ahorra el constante cambio manual de diseño, minimizando errores y aumentando la velocidad de escritura.
- Programadores y Desarrolladores: Un diseño QWERTY estándar es ideal para la mayoría del código, pero quizás necesites un diseño Dvorak o Colemak para una mayor ergonomía en la escritura de texto, o un diseño internacional para caracteres especiales. Con dos teclados, puedes tener lo mejor de ambos mundos.
- Diseñadores Gráficos y Editores de Vídeo: Algunos atajos de teclado son más cómodos en ciertas distribuciones. Podrías dedicar un teclado a accesos directos específicos o incluso a un teclado numérico programable para funciones de software.
- Gamers Entusiastas: Un teclado principal optimizado para juegos (macros, switches específicos) y otro para la comunicación o tareas secundarias sin interferir con la acción principal.
- Ergonomía Personalizada: Quizás te sientas más cómodo con una distribución en un teclado ergonómico y otra en uno mecánico tradicional.
En resumen, se trata de personalización avanzada y eficiencia extrema. La meta es que cada herramienta de entrada se adapte perfectamente a la tarea que tienes entre manos, sin compromisos.
El Desafío Principal: La Visión Unificada de Windows 🤦♂️
Aquí es donde reside la complicación. Por defecto, el sistema operativo Windows (y la mayoría de los sistemas operativos) trata a todos los teclados conectados como un único dispositivo lógico de entrada. Esto significa que cuando cambias la distribución del teclado (por ejemplo, de „Español – España” a „Inglés – Estados Unidos”), ese cambio se aplica a todos los teclados que tengas conectados. No hay una opción nativa y sencilla que te permita asignar una distribución específica a cada teclado físico de forma independiente. Ahí es donde entra la magia de la automatización.
La Solución Secreta: AutoHotkey al Rescate (y Otras Herramientas) 🧙♂️
Para lograr nuestro objetivo, vamos a recurrir a una herramienta increíblemente potente y versátil para Windows: AutoHotkey (AHK). AHK es un lenguaje de scripting gratuito y de código abierto que te permite automatizar casi cualquier tarea en Windows, desde simples atajos de teclado hasta complejas secuencias de comandos. Su capacidad para interactuar a bajo nivel con eventos del sistema lo convierte en nuestro aliado perfecto para este propósito.
Aunque existen otras utilidades de mapeo de teclas (como SharpKeys o el administrador de teclado de Microsoft PowerToys), estas suelen aplicar los cambios de forma global al sistema, no de forma selectiva por dispositivo. Por eso, AutoHotkey es la herramienta ideal para identificar el teclado que está siendo utilizado y aplicar la distribución correcta en tiempo real.
Guía Paso a Paso: Configurando tus Dos Teclados 🛠️
Paso 1: Preparativos Esenciales y Comprensión de Conceptos 💡
Antes de sumergirnos en el scripting, asegúrate de tener lo siguiente:
- Dos Teclados Físicos: Obviamente, necesitarás ambos teclados conectados a tu PC. Asegúrate de que funcionen correctamente.
- Windows 10/11: Este tutorial se centrará en estas versiones de Windows, aunque los principios son aplicables a versiones anteriores.
- Distribuciones de Teclado Instaladas: Ve a
Configuración > Hora e idioma > Idioma y región
y asegúrate de tener instaladas todas las distribuciones de teclado que planeas usar (por ejemplo, „Español (España)” y „Inglés (Estados Unidos)”). Esto es crucial, ya que AHK no „crea” distribuciones, sino que las „activa”.
Un Pequeño Apunte sobre IDs de Dispositivo: Para que AutoHotkey pueda distinguir entre tus teclados, necesitaremos identificar cada uno por su ID de hardware único. No te preocupes, el proceso es sencillo.
Paso 2: Descarga e Instalación de AutoHotkey ✅
- Visita la página oficial de AutoHotkey: www.autohotkey.com.
- Descarga la última versión „Current Version” (o v2 si prefieres la sintaxis más moderna, aunque los ejemplos suelen ser en v1). Para este tutorial, usaremos la sintaxis de v1, ya que es más común en recursos existentes y fácil de adaptar.
- Ejecuta el instalador y elige la opción de „Instalación Express” (Express Installation). Es rápido y directo.
Una vez instalado, estarás listo para el siguiente paso.
Paso 3: Identificando tus Teclados (VID y PID) 🕵️♀️
Para que AutoHotkey sepa qué teclado es cuál, necesitamos sus identificadores únicos: el ID de proveedor (VID) y el ID de producto (PID). Sigue estos pasos:
- Conecta ambos teclados a tu PC.
- Haz clic derecho en el botón de Inicio de Windows y selecciona „Administrador de dispositivos”.
- En la ventana del Administrador de dispositivos, expande la categoría „Teclados”. Deberías ver tus teclados listados. Puede que uno diga „Teclado HID” y otro tenga un nombre más específico.
- Haz doble clic en uno de los teclados. Se abrirá una ventana de propiedades.
- Ve a la pestaña „Detalles”.
- En el menú desplegable „Propiedad”, selecciona „Rutas de instancia de dispositivo” o „Hardware Ids” (ID de hardware). Verás una cadena de texto larga. Busca algo como
HIDVID_XXXX&PID_YYYY&MI_008&...
. - Copia la parte
VID_XXXX&PID_YYYY
para cada uno de tus teclados. Este es el identificador que usaremos en nuestro script. Es crucial que los anotes correctamente y los asocies con el teclado físico correspondiente. Por ejemplo:- Teclado 1 (principal):
VID_1234&PID_ABCD
(Ej: teclado QWERTY español) - Teclado 2 (secundario):
VID_5678&PID_EFGH
(Ej: teclado QWERTY inglés)
- Teclado 1 (principal):
Paso 4: Creando el Script de AutoHotkey ✍️
Ahora viene la parte „mágica”. Crearemos un script que detectará qué teclado está en uso y cambiará la distribución de Windows en consecuencia. Este script se mantendrá residente en memoria y actuará de forma transparente.
- Haz clic derecho en tu escritorio (o en cualquier carpeta), selecciona „Nuevo” y luego „AutoHotkey Script”.
- Nombra el archivo, por ejemplo,
keyboard_layouts.ahk
. - Haz clic derecho en el nuevo archivo
.ahk
y selecciona „Editar Script”. Se abrirá en el Bloc de notas u otro editor de texto. - Borra cualquier contenido preexistente y pega el siguiente código. ¡Asegúrate de reemplazar los
VID_XXXX&PID_YYYY
y los0x04090409
por los tuyos! Te explicaré cada parte del código.
; ###############################################################
; Script de AutoHotkey para asignar distribuciones de teclado por dispositivo
; ###############################################################
; --- Configuración General ---
#SingleInstance Force ; Asegura que solo una instancia del script esté activa
#Persistent ; Mantiene el script en ejecución
; --- Definición de IDs de Teclado ---
; Sustituye estos valores por los VID y PID de tus teclados
; Puedes encontrarlos en el Administrador de Dispositivos (Paso 3)
; Teclado Principal (Ej: Layout Español - España)
KB1_VID_PID := "VID_1234&PID_ABCD"
; Teclado Secundario (Ej: Layout Inglés - Estados Unidos)
KB2_VID_PID := "VID_5678&PID_EFGH"
; --- Definición de Lenguajes (ID de Idioma y Subidioma) ---
; Estos son los identificadores hexadecimales para las distribuciones de teclado
; Puedes encontrar una lista de estos códigos en la documentación de Microsoft (MSDN)
; o buscarlos online (ej: "Windows language code identifier list")
; Algunos comunes:
; 0x04090409 = Inglés (Estados Unidos) / US QWERTY
; 0x040A040A = Español (España) / Spanish QWERTY
; 0x080A080A = Español (México) / Latin American QWERTY
; 0x04070407 = Alemán (Alemania) / German QWERTZ
; 0x0C0C0C0C = Francés (Bélgica) / Belgian AZERTY
; 0x04110411 = Japonés (Microsoft IME)
; Distribución para el Teclado Principal
KB1_Layout := "0x040A040A" ; Ejemplo: Español (España)
; Distribución para el Teclado Secundario
KB2_Layout := "0x04090409" ; Ejemplo: Inglés (Estados Unidos)
; --- Variables Internas ---
Current_KB1_Hwnd := 0
Current_KB2_Hwnd := 0
; --- Monitor de Eventos de Teclado (para Teclado Principal) ---
; Esta función se ejecuta cada vez que se pulsa una tecla en el Teclado Principal
; Busca el handle de la ventana activa y establece la distribución si es necesario
InstallKeybdHook
#InstallKeybdHook
Hotkey, ~*a, SetLayoutKB1, T1 ; Monitorea una tecla común para activar el script (ej: 'a')
Hotkey, ~*b, SetLayoutKB1, T2 ; Puedes añadir más si 'a' no es suficiente para la detección inicial
Hotkey, ~*c, SetLayoutKB1, T3
return
SetLayoutKB1:
if (A_PriorHotkey != "~*a" and A_PriorHotkey != "~*b" and A_PriorHotkey != "~*c") {
; Esto evita que el script se dispare continuamente al pulsar teclas normales.
; Puedes ajustar las teclas monitorizadas si lo deseas.
return
}
WinGet, current_hwnd, ID, A ; Obtiene el ID de la ventana activa
If (current_hwnd != Current_KB1_Hwnd) ; Solo cambia si la ventana activa ha cambiado
{
; Comprueba si el evento proviene del teclado principal
; Esto requiere la función GetKeyboardDeviceInfo que definiremos a continuación
If (GetKeyboardDeviceInfo() == KB1_VID_PID)
{
Current_KB1_Hwnd := current_hwnd
WinSet, AlwaysOnTop, Off, ahk_id %Current_KB1_Hwnd% ; Desactiva AlwaysOnTop temporalmente (por si acaso)
Sleep, 50 ; Pequeña pausa para asegurar que la ventana está lista
PostMessage, 0x50, 0, %KB1_Layout%, , ahk_id %Current_KB1_Hwnd% ; Envía el mensaje para cambiar el layout
}
}
return
; --- Monitor de Eventos de Teclado (para Teclado Secundario) ---
; Repetimos el mismo proceso para el segundo teclado
Hotkey, ~*x, SetLayoutKB2, T1
Hotkey, ~*y, SetLayoutKB2, T2
Hotkey, ~*z, SetLayoutKB2, T3
return
SetLayoutKB2:
if (A_PriorHotkey != "~*x" and A_PriorHotkey != "~*y" and A_PriorHotkey != "~*z") {
return
}
WinGet, current_hwnd, ID, A
If (current_hwnd != Current_KB2_Hwnd)
{
If (GetKeyboardDeviceInfo() == KB2_VID_PID)
{
Current_KB2_Hwnd := current_hwnd
WinSet, AlwaysOnTop, Off, ahk_id %Current_KB2_Hwnd%
Sleep, 50
PostMessage, 0x50, 0, %KB2_Layout%, , ahk_id %Current_KB2_Hwnd%
}
}
return
; ###############################################################
; --- Funciones Auxiliares ---
; ###############################################################
; Función para obtener la información del teclado que generó el último evento
; Necesita un DllCall a la API de Windows
GetKeyboardDeviceInfo()
{
VarSetCapacity(RawInputDeviceList, 256 * 20) ; Suficiente espacio para 256 dispositivos
numDevices := 0
DllCall("GetRawInputDeviceList", Ptr, RawInputDeviceList, UIntP, numDevices, UInt, 20)
Loop %numDevices%
{
offset := (A_Index - 1) * 20
ridType := NumGet(RawInputDeviceList, offset, "UInt")
ridHandle := NumGet(RawInputDeviceList, offset + 4, "Ptr")
If (ridType = 1) ; RIM_TYPEMOUSE = 0, RIM_TYPEKEYBOARD = 1, RIM_TYPEHID = 2
{
VarSetCapacity(PnpId, 256)
DllCall("GetRawInputDeviceInfo", Ptr, ridHandle, UInt, 0x20000007, Ptr, &PnpId, UIntP, 256) ; RIDI_DEVICENAME = 0x20000007
PnpIdStr := StrGet(&PnpId)
; Busca el VID y PID en la cadena PnpIdStr
If (InStr(PnpIdStr, "VID_") && InStr(PnpIdStr, "PID_"))
{
; Extrae el VID y PID
vidPos := InStr(PnpIdStr, "VID_")
pidPos := InStr(PnpIdStr, "PID_", false, vidPos)
if (vidPos && pidPos) {
vidPid := SubStr(PnpIdStr, vidPos, (pidPos - vidPos) + 9) ; 9 caracteres para "PID_XXXX"
Return %vidPid%
}
}
}
}
Return "" ; No se encontró información relevante
}
Explicación del Código:
#SingleInstance Force
y#Persistent
: Aseguran que el script siempre esté activo en segundo plano y solo se ejecute una vez.KB1_VID_PID
yKB2_VID_PID
: Aquí es donde pegarás los VID y PID que obtuviste en el Paso 3 para cada uno de tus teclados.KB1_Layout
yKB2_Layout
: Estos son los códigos hexadecimales de las distribuciones que quieres usar. Por ejemplo,0x040A040A
para Español (España) y0x04090409
para Inglés (Estados Unidos). Puedes buscar otros códigos en Google si necesitas diferentes idiomas (ej. „Windows language code identifier list”).Hotkey, ~*a, SetLayoutKB1, T1
: Estas líneas registran hotkeys para detectar pulsaciones de teclas. El~*
significa que la tecla se envía al sistema normalmente, yT1
es una etiqueta temporal para organizar las hotkeys. He puesto varias teclas (`a, b, c, x, y, z`) para una mejor detección de qué teclado se está usando, ya que el evento de bajo nivel de AHK puede ser inconsistente para la detección de dispositivos RAW.SetLayoutKB1
ySetLayoutKB2
: Estas funciones son las que realizan el trabajo principal.WinGet, current_hwnd, ID, A
: Obtiene el identificador de la ventana activa en ese momento.If (GetKeyboardDeviceInfo() == KB1_VID_PID)
: Aquí se llama a la función auxiliar para determinar qué teclado generó el evento y lo compara con nuestros IDs.PostMessage, 0x50, 0, %KB1_Layout%, , ahk_id %Current_KB1_Hwnd%
: Esta es la línea clave. Envía un mensaje a la ventana activa (0x50
es el mensajeWM_INPUTLANGCHANGEREQUEST
) para cambiar su distribución de teclado a la especificada por%KB1_Layout%
.
GetKeyboardDeviceInfo()
: Esta función auxiliar, más compleja, usa la API de Windows (DllCall
) para interactuar con los dispositivos de entrada „RAW” y determinar cuál de ellos generó la última pulsación, extrayendo su VID y PID.
Paso 5: Guarda y Ejecuta el Script 🏃♂️
- Guarda el archivo
.ahk
. - Haz doble clic en el archivo para ejecutarlo. Verás un icono verde de „H” en la barra de tareas (junto al reloj). Esto indica que AutoHotkey está corriendo.
- ¡Prueba tus teclados! Cuando escribas con el teclado asignado como principal, debería activarse la distribución principal. Al escribir con el segundo teclado, se activará su distribución correspondiente. Puede que necesites presionar una tecla (ej. ‘a’) en el teclado deseado para que el script lo detecte y aplique la distribución por primera vez en una ventana nueva o activa.
Paso 6: Iniciar el Script Automáticamente al Inicio de Windows 🚀
Para que no tengas que iniciar el script manualmente cada vez que enciendas tu PC:
- Crea un acceso directo al archivo
keyboard_layouts.ahk
. - Presiona
Win + R
, escribeshell:startup
y presiona Enter. Esto abrirá la carpeta „Inicio” de Windows. - Copia el acceso directo del script a esta carpeta.
Ahora, tu PC configurará automáticamente tus teclados con sus respectivas distribuciones cada vez que inicie.
Consejos Adicionales y Solución de Problemas 🔧
- Verifica IDs: El error más común es escribir mal los VID/PID. Vuelve al Administrador de dispositivos y asegúrate de que sean correctos.
- Códigos de Idioma: Asegúrate de que los códigos hexadecimales de las distribuciones sean los correctos y que dichas distribuciones estén instaladas en Windows.
- Prioridad de Teclados: Si tienes problemas con que un teclado no cambia o cambia incorrectamente, revisa el orden en que se detectan los eventos o ajusta las teclas monitorizadas en el script.
- Interferencia: Si usas otras herramientas de remapeo de teclado, podrían entrar en conflicto con AutoHotkey. Intenta deshabilitarlas si tienes problemas.
- Pausas (
Sleep
): En algunos sistemas, un pequeño retardo (Sleep, 50
) puede ser necesario para dar tiempo a Windows a procesar los mensajes. Puedes ajustarlo. - Ajuste de Hotkeys: El uso de
~*a
,~*b
, etc. es un método para „engañar” a AHK para que ejecute la función. Si encuentras que no se activa siempre, podrías añadir más teclas comunes o una tecla menos frecuente que sepas que usarás para „activar” el cambio de layout en una nueva ventana.
„Dominar las herramientas es la clave para desatar tu potencial. Configurar tus teclados para trabajar de forma independiente es un salto cuántico en productividad, eliminando fricciones y permitiéndote fluir sin interrupciones entre tus tareas más diversas.”
Mi Opinión Basada en la Experiencia Real 🎯
Habiendo trabajado durante años en entornos multilingües y de programación, la frustración de alternar layouts es palpable. He visto a colegas luchar con esto a diario, perdiendo valiosos segundos (que se convierten en minutos y horas) en correcciones y cambios de configuración. La implementación de una solución como esta, aunque requiere una inversión inicial de tiempo para configurar el script, se amortiza exponencialmente en productividad y comodidad.
Al principio, el scripting puede parecer intimidante, pero AutoHotkey es una herramienta robusta y la comunidad es fantástica. Una vez que este script está funcionando en segundo plano, olvidas que existe, y esa es la verdadera señal de una buena automatización. Tus manos se mueven de forma natural sobre el teclado adecuado, y el idioma o los caracteres especiales simplemente aparecen. Es una de esas configuraciones que, una vez la tienes, te preguntas cómo pudiste vivir sin ella. No es solo un truco técnico, es una mejora ergonómica y cognitiva que reduce la carga mental y el estrés. ¡Definitivamente, vale la pena el esfuerzo!
Conclusión: Un Nuevo Nivel de Comodidad y Eficiencia 🏆
Felicidades, has llegado al final de esta guía y ahora tienes el conocimiento necesario para llevar tu experiencia informática a un nivel superior. Tener dos teclados con distribuciones independientes en tu PC no es un lujo, es una inversión en tu eficiencia, especialmente si tu trabajo o aficiones lo exigen. Con AutoHotkey y un poco de paciencia, has transformado una limitación del sistema operativo en una potente herramienta de personalización. Experimenta, adapta el script a tus necesidades exactas y disfruta de una fluidez que antes solo podías soñar.
¡Deja de luchar contra tu PC y haz que trabaje para ti! Tu productividad (y tus muñecas) te lo agradecerán. ¡Hasta la próxima, y feliz escritura! 👋