Vamos a programar #86 - Reasignando teclas del teclado.

Hola de nuevo a todos, el día de hoy vamos a ver cómo reasignar algunas botones de nuestro teclado para que hagan otra cosa.

Hace unos días en la eterna lucha del hombre contra la máquina, mi teclado simplemente decidió que 15 años de uso eran suficientes y simplemente ya no quiso funcionar. Mi teclado compaq 5185 fue el primero que tuve y lo use de forma bastante extenuante.
Algo paso que simplemente ya no quiso reconocer las pulsaciones. Cómo siempre que "reparo" algo hay una enorme tendencia a que me "sobren" piezas, simplemente decidí guardarlo. Para su reemplazo, saque un teclado que un amigo me regaló hace mucho (cómo el de la primer imagen), es más compacto y mas viejo que el mio pero totalmente funcional salvo por unos cuantos botones.

Mi primer teclado tenía la ventaja que tenia varios botones adicionales; los mas importantes (para mi) eran: volumen arriba, volumen abajo, silencio y calculadora. El reemplazo también tiene unos botones extra (seis para ser exacto), pero al conectarlo y presionarlos, ninguna hizo nada. Busqué los controladores pero no encontré ninguno para mi sistema operativo. Las teclas "normales" funcionan cómo deben, pero las "especiales" no.

Para solucionar mi problema busque en internet y encontré que todas las pulsaciones del teclado son gestionadas por el sistema operativo, es decir, si presionamos una tecla, está genera un código pero nuestro amigo Windows es el responsable de que pasa después y no solo eso, posee la capacidad de reasignar las pulsaciones.

Tomando en cuenta lo anterior, vamos a buscar una forma de re-asignar una tecla, pero hay una advertencia, vamos a modificar el registro de Windows (el registro prácticamente es un lugar donde se guardan las configuraciones de una computadora con ese sistema operativo), si sigues los pasos que voy a mostrar no habrá ningún problema, pero si mueves más "cosillas" puedes hacer que el PC no inicie correctamente.

Antes que nada veamos unos cuantos códigos para algunas teclas.

   
US   key assignment   
   
Base   Make   
   
Insert   
   
E0   52   
   
Delete   
   
E0   53   
   
Left   Arrow   
   
E0   4B   
   
Home   
   
E0   47   
   
End   
   
E0   4F   
   
Up   Arrow   
   
E0   48   
   
Dn   Arrow   
   
E0   50   
   
Page   Up   
   
E0   49   
   
Page   Down   
   
E0   51   
   
Right   Arrow   
   
E0   4D   

Para nuestra demostración vamos a usar la tecla "Page Up" y la vamos a reasignar para silenciar el volumen del sistema. La siguiente tabla muestra  algunos de los códigos de teclas multimedia.

CODEALIAS
E0 6AVK_BROWSER_BACK
E0 69VK_BROWSER_FORWARD
E0 67VK_BROWSER_REFRESH
E0 68VK_BROWSER_STOP
E0 65VK_BROWSER_SEARCH
E0 66VK_BROWSER_FAVORITES
E0 32VK_BROWSER_HOME
E0 20VK_VOLUME_MUTE
E0 2EVK_VOLUME_DOWN
E0 30VK_VOLUME_UP
E0 19VK_MEDIA_NEXT_TRACK
E0 10VK_MEDIA_PREV_TRACK
E0 24VK_MEDIA_STOP
E0 22VK_MEDIA_PLAY_PAUSE
E0 6CVK_LAUNCH_MAIL
E0 6DVK_LAUNCH_MEDIA_SELECT
E0 6BVK_LAUNCH_APP1
E0 21VK_LAUNCH_APP2

El código de la tecla que queremos usar es "E0 20" y el código de la tecla "Page UP" es "E0 49" pero ¿y después? Cómo ya mencione antes, Windows es el encargado de gestionar las pulsaciones y guarda esta configuración en el registro. Para acceder a ella, necesitamos encontrar la siguiente clave:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]

Ahí crearemos un nuevo valor binario.


La estructura que debe de tener el valor es de la siguiente forma:

  • 00,00,00,00 > encabezado
  • 00,00,00,00 > flags
  • 02,00,00,00 > número de entradas más uno
  • xx,xx,xx,xx > el código de las teclas a reasignar empezando por el código que queremos que se aplique seguido por el código de la tecla
  • 00,00,00,00 > terminación.
Entonces si sustituimos los valores de nuestras teclas, tenemos algo cómo de la imagen:


Hay que notar que cada código tiene los valores "invertidos", es decir, la tecla de silencio tiene el código "E0 20" pero al momento de escribir el valor en el registro, lo ponemos cómo "20 E0" y lo mismo va para todas las teclas, la tecla "Page Up" tiene el codigo "E0 49" pero lo escribimos cómo "49 E0". Al reiniciar la computadora y presionamos la tecla "Page Up", el sistema se debería de silenciar (en caso contrario algo salio mal). Si quieres hacer el proceso de forma automática, puedes copiar el siguiente texto y guardarlo cómo "key.reg" usando el bloc de notas.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,20,E0,49,E0,00,00,00,00

Cada vez que hagas un cambio se debe de reiniciar la computadora.
Finalmente y a manera de ejemplo, supongamos que queremos cambiar las teclas que ya cambiamos, pero ademas queremos que la tecla numérica 7 suba el volumen, tendríamos algo cómo lo que sigue:

  • 00,00,00,00 > encabezado
  • 00,00,00,00 > flags
  • 03,00,00,00 > número de entradas más uno
  • 20,e0,49,e0 > el código del primer juego de teclas
  • 30,e0,47,00 > el código del segundo juego de teclas
  • 00,00,00,00 > terminación.
Cómo podrás ver, hay una gama amplia de posibilidades, solo ten en cuenta que los cambios son solo validos para teclas simples, si intentas crear combinaciones de teclas (ctrl + shift +supr) estas no funcionaran. En el siguiente post continuaremos con mas de esto y aprenderemos a detectar cuales son los códigos de cualquiera de las teclas de nuestro teclado.

Los leo luego.

No hay comentarios.