28 agosto 2007

Anular e intercambiar teclas en XP

Cada tecla tiene dos códigos (ScanCode), uno lo emite cuando se pulsa (representado en rojo) y el otro cuando se deja de pulsar (representado en azul). Por ejemplo, en hexadecimal:

El ScanCode de la tecla S es: 001F
El ScanCode de la tecla L es: 0026
El ScanCode de la tecla CTRL izq. es: 001D
El ScanCode de la tecla CTRL dcho. es: E01D
El ScanCode de la combinación ALT+SUPR es: 0098

Para poder anular o cambiar teclas debemos ir al editor del registro ([Inicio > Ejecutar > regedit] + ENTER) y buscar la clave:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\KeyBoard Layout

Luego hay que crear un nuevo valor binario (REG_BINARY) llamado Scancode Map con la siguiente estructura:

00 00 00 00 (Cabecera)
00 00 00 00 (Flags)
00 00 00 00 (nº de teclas a modificar + 1)
00 00 00 00 (Código para la primera tecla a modificar)
...
00 00
00 00
(Código para la última tecla a modificar)
00 00 00 00 (Terminación)

Así, puesto que:

(
OJO que los números van al revés con respecto al ScanCode)

El código para anular la tecla CTRL izdo. (001D) es 00 00 1D 00
El código para anular la tecla CTRL dcho. (E01D) es 00 00 1D E0
El código para anular la combinación ALT+SUPR (0098) es 00 00 98 00
El código para cambiar la tecla S (001F) por la L (0026) es 26 00 1F 00

La estructura del valor a introducir para conseguir anular y cambiar lo de arriba sería:

00 00 00 00 (Cabecera)
00 00 00 00 (Flags)
05 00 00 00 (nº de teclas a modificar + 1)
00 00 1D 00 (Anular la tecla CTRL izdo.)
00 00 1D E0 (Anular la tecla CTRL dcho.)
00 00 98 E0 (Anular la combinación ALT+SUPR)
26 00 1F 00 (Cambiar la tecla S por la L)
00 00 00 00 (Terminación)

Lo que tendríamos que introducir en el valor binario del registro sería entonces:

00 00 00 00 00 00 00 00 05 00 00 00 00 00 1D 00 00 00 1D E0 00 00 98 E0 26 00 1F 00 00 00 00 00

Tabla de ScanCodes:
http://www.glue.umd.edu/~nsw/ench250/scancode.htm

Enlace relacionado:
http://pio9.com/22teclado.htm

9 comentarios:

Anónimo dijo...

Hola:
Este procedimiento es bueno; pero tengo un problema mi laptop Toshiba Dual Core Tecra A100 tiene instaldo el Windows XP.
Cuando sigo tu procedimiento me veo en un problema pues tu muestras por linea 4 pares de numeos Hexadecimales sin embargo a mi eme aprecen 8 pares a escribir.
Por lo que no se que hacer.
necesito saber las lineas para intercambiar el ctrl izquierdo y el alt izquierdo debido a que mi unica tecla ctrl no funciona.
Desde Ya muchas gracias.
LOBEZNO

eTaTuS dijo...

Vamos a ver, aunque yo muestre los valores en varias líneas, al introducirlos en el registro hai que escribirlos todo seguido en la misma línea. He hecho una modificación en el post para que se vea más claro...

Salu2

Anónimo dijo...

EUREKA!!!! Muchas gracias resulto perfecto. Este es el WEBSITE mas cool de INTERNET. GRACIAS

LOBEZNO

Anónimo dijo...

mi pc sigue igual no se desactiva sticky CON NADA cuando activo mayuscula aparece minuscula no sirve el ENTER ni los numeros:

Anónimo dijo...

¡A mi me sirvió lo que dijeron de pulsar las dos mayúsculas a la vez! Infinitas gracias! llevaba más de 40 minutos intentando arreglarlo....

Anónimo dijo...

ayuda; no puedo hacer nada y me quede en keyboard layaout::: como hago el nuevo valor binario

Anónimo dijo...

yo tampoco puedo hacer nada; cuando intento cambiar los valores binarios no puedo :/
necesito ayuda urgente

Anónimo dijo...

POR FIINN! que desesperacionn LO UNICO QUE ME FUNCONO PARA LOS NUMEROs (QUE NO ANDABAN) FUE PRESIONAR LAS DOS TECLAS SHIFT POR 10 SEGUNDOS Y ANDDUVO TODO, MIL GRACiAAS

Unknown dijo...

Windows 8.1 hp no puedo escribir con el teclado, intente lo del scancode pero cuando lo puse, despues del 05 un par de ceros mas y automaticamente me sale 0008. .. ayudame por favor!! Por otro lado desactive lo del stickkeys desde panel de control y sigo sin poder escribir, que puedo hacer!!!