Mapa de bloqueo de mayúsculas para controlar en Windows 10


82

En Windows 8 solía reasignar mi clave de bloqueo de mayúsculas para controlar usando el script de registro

REGEDIT4

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,1d,00,3a,00,00,00,00,00

Después de haber actualizado a la ventana 10, esto ya no funciona. ¿Cómo puede hacerse esto?


Tenga en cuenta que esto solo reasigna Bloq Mayús a otra tecla Ctrl. Quiero que intercambian, por lo que utiliza las instrucciones aquí para modificar la secuencia de comandos: superuser.com/a/1202601/315584
jia103

Respuestas:


87

¿Te acordaste de reiniciar? Parece funcionar bien para mí, como en 7 y 8.

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,1d,00,3a,00,00,00,00,00

9
El problema para mí fue que la actualización de Windows 10 restableció mi asignación de bloqueo de mayúsculas. Pero hacerlo de nuevo de la misma manera funcionó después de otro reinicio.
Jack O'Connor

38
Si alguien más como yo necesita la pieza final del rompecabezas: pegue lo anterior en un nuevo archivo de texto, guárdelo con la .regextensión, haga doble clic en el archivo para aplicar los cambios al registro y luego reinicie.
Mike Niebling

44
¿Cómo lo mapeas a Caps Lockdespués?
Ehtesh Choudhury

77
@EhteshChoudhury puede eliminar la entrada "Mapa de Scancode" debajo de la clave de registro, reiniciar y se restablecerá el comportamiento predeterminado.
bojolais

76

En caso de que alguien necesite hacer esto a través de PowerShell:

$hexified = "00,00,00,00,00,00,00,00,02,00,00,00,1d,00,3a,00,00,00,00,00".Split(',') | % { "0x$_"};

$kbLayout = 'HKLM:\System\CurrentControlSet\Control\Keyboard Layout';

New-ItemProperty -Path $kbLayout -Name "Scancode Map" -PropertyType Binary -Value ([byte[]]$hexified);

Ejecútelo como administrador y reinicie.


16
¡Obtenga un voto positivo por dar una respuesta de "copiar y pegar en shell" similar a Linux!
mikezter

3
Seriamente. Echo de menos tener * guiones initrc. Gracias.
stewSquared

66
Señor, ha hecho que usar Windows hoy sea una experiencia un poco menos miserable. Por eso, gracias.
binarymason el

18

Puede usar SharpKeys para asignar cualquier clave a cualquier otra clave en Windows 7, 8 o 10. Es mucho más fácil y limpio que modificar el registro usted mismo.

Espero que esto ayude.


2
¿Puedo usar esto para cambiar de idioma presionando mayúsculas?
thanos.a

13

Utilizo lo siguiente para enviar CTRL para la tecla BLOQ MAYÚS, enviar ALT para la tecla CTRL y BLOQUEO MAYÚSCULAS para la tecla ALT. CTRL está a la izquierda de "A" donde Dios lo intentó, ALT está debajo de SHIFT, y la tecla de BLOQUEO DE MAYÚSCULAS completamente inútil se guarda de forma segura donde tengo que romper mi muñeca para golpearla.

Windows Registry Editor Version 5.00

; The hex data is in five groups of four bytes:
;   00,00,00,00,\    header version (always 00000000)
;   00,00,00,00,\    header flags (always 00000000)
;   04,00,00,00,\    # of entries (3 in this case) plus a NULL terminator line.
;                    Entries are in 2-byte pairs: Key code to send & keyboard key to send it.
;                    Each entry is in LSB, MSB order.
;   1d,00,3a,00,\    Send LEFT CTRL (0x001d) code when user presses the CAPS LOCK key (0x003a) 
;   38,00,1d,00,\    Send LEFT ALT (0x0038) code when user presses the LEFT CTRL key (0x001d) 
;   3a,00,38,00,\    Send CAPS LOCK (0x3A) code when user presses the LEFT ALT key (0x0038) 
;   00,00,00,00      NULL terminator

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,\
                   00,00,00,00,\
                   04,00,00,00,\
                   1d,00,3a,00,\
                   38,00,1d,00,\
                   3a,00,38,00,\
                   00,00,00,00

44
Realmente aprecio los comentarios. Siempre me pregunté qué significaban los códigos. Muy útil.
zaphodtx

3

Este es el script para intercambiar las teclas CTRL y BLOQ MAYÚS:

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,03,00,00,00,1d,00,3a,00,3a,00,1d,00,00,00,00,00

2

Puede usar lswitch para reasignar la entrada de idioma a CapsLock.

Usar cualquier tecla para cambiar los idiomas de entrada, uso: lswitch [keycode]. El código clave es opcional y el valor predeterminado es la tecla del menú contextual. Otro buen candidato es una clave CapsLock con un código clave de 20.

lswitch 20

Agréguelo a la carga automática.


esto funciona, sin embargo, se pierde la funcionalidad de bloqueo de mayúsculas. ¿Alguna idea sobre cómo definir la funcionalidad de bloqueo de mayúsculas para la combinación Mayús + Bloqueo de mayúsculas?
thanos.a

2

Solía ​​usar AutoHotKey para hacer esto.

Tendría un enlace en el directorio de inicio para ejecutar un script ahk muy básico:

Capslock::Ctrl

El hecho es que Autohotkey no se ejecuta como Administrador, por lo que no afectará a las ventanas privilegiadas, a menos que use el programador de tareas en lugar del directorio de inicio para ejecutar el script al iniciar sesión con privilegios más altos. El segundo problema es que a veces, el script se cuelga cuando se reanuda el sueño, por lo que es posible que deba volver a cargarlo, lo que es molesto.

AutoHotKey es más adecuado para tareas más complejas, como escribir macros.


Probé la solución autohotkey y no la recomiendo. No funciona bien si tiene su velocidad de repetición automática alta, retraso bajo. Tampoco se combina bien con xkeymacs, lo que hace que las teclas emacs funcionen en casi todas partes en Windows.
Reb

No uso emacs, abro un archivo .ahk automáticamente al iniciar sesión y creo que esta solución es la más simple y portátil con diferencia
fanático número uno de Bjorks el

2

La inagotable caja de herramientas de sysinternals también proporciona un pequeño programa solo para cambiar el bloqueo de mayúsculas con control: ctrl2cap.exe.


Bienvenido a Super User. Lea Cómo recomendar software y luego edite su respuesta para incluir al menos la información mínima requerida (los elementos en negrita ). Las publicaciones sin esta información pueden estar sujetas a eliminación. Gracias por contribuir
Digo reinstalar a Mónica el

1

Si, por alguna razón, no desea ejecutar herramientas de terceros, es posible hacerlo usted mismo con un poco de C. Gracias a la brillante respuesta de Susam Pal , puse el fragmento a continuación.

Es prácticamente un key-logger. Escucha las pulsaciones de teclas, las captura y construye la entrada del teclado con la asignación en mente. La siguiente aplicación de consola debe estar ejecutándose para que funcione.

Necesitará compilar esto de alguna manera. Usé msys2.org con pacman -S mingw-w64-x86_64-gccy compilé con /mingw64/bin/gcc nocaps.c -o nocaps.exe.

#include <stdio.h>
#include <windows.h>

HHOOK hook;

#define KEYCODE_CAPSLOCK 20
#define KEYCODE_LCTRL 162

LRESULT CALLBACK keyboardHook(int nCode, WPARAM wParam, LPARAM lParam)
{
    KBDLLHOOKSTRUCT *p = (KBDLLHOOKSTRUCT *) lParam;
    INPUT input = {.type = INPUT_KEYBOARD };

    printf("nCode=%d\t wParam=%d\t p->vkCode=%lu \t p->scanCode=%d\t\n", nCode, wParam, p->vkCode, p->scanCode);


    if (wParam == WM_KEYUP || wParam == WM_SYSKEYUP) {
        input.ki.dwFlags = KEYEVENTF_KEYUP;
    }

    if (p->vkCode == KEYCODE_CAPSLOCK && (p->flags & LLKHF_INJECTED) == 0) {
        input.ki.wVk = KEYCODE_LCTRL;
        SendInput(1, &input, sizeof (INPUT));
        return 1;
    } else if (p->vkCode == KEYCODE_LCTRL && (p->flags & LLKHF_INJECTED) == 0) {
        input.ki.wVk = KEYCODE_CAPSLOCK;
        SendInput(1, &input, sizeof (INPUT));
        return 1;
    }

    return CallNextHookEx(hook, nCode, wParam, lParam);
}

int main(int argc, char **argv)
{
    MSG messages;

    hook = SetWindowsHookEx(WH_KEYBOARD_LL, keyboardHook, NULL, 0);
    if (hook == NULL) {
        printf("Error %d\n", GetLastError());
        return 1;
    }

    printf("Mapping CAPSLOCK=>LCTRL and LCTRL=>CAPSLOCK..\n");
    while (GetMessage (&messages, NULL, 0, 0))
    {
        TranslateMessage(&messages);
        DispatchMessage(&messages);
    }
    return 0;
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.