Mappa capslock da controllare in Windows 10


82

In Windows 8 ho usato per rimappare la mia chiave capslock per controllare usando lo script del 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

Dopo aver eseguito l'aggiornamento a Windows 10, questo non funziona più. Come si può fare?


Notare che ciò rimappa il Bloc Maiusc a un altro tasto Ctrl. Li voglio scambiati, quindi ho usato le istruzioni qui per modificare la sceneggiatura sopra: superuser.com/a/1202601/315584
jia103

Risposte:


87

Ti sei ricordato di riavviare? Sembra funzionare bene per me, proprio come in 7 e 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
Il problema per me era che l'aggiornamento di Windows 10 ripristinava la mappatura del blocco maiuscole. Ma farlo di nuovo allo stesso modo ha funzionato dopo un altro riavvio.
Jack O'Connor,

38
Se qualcun altro come me ha bisogno del pezzo finale del puzzle: incolla quanto sopra in un nuovo file di testo, salvalo con l' .regestensione, fai doppio clic sul file per applicare le modifiche al registro, quindi riavvia.
Mike Niebling,

4
Come si fa a Caps Lockmapparlo di nuovo in seguito?
Ehtesh Choudhury,

7
@EhteshChoudhury è possibile eliminare la voce "Scancode Map" sotto la chiave di registro, riavviare e il comportamento predefinito verrà ripristinato.
Bojolais,

76

Nel caso qualcuno ne avesse bisogno tramite 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);

Eseguilo come amministratore e riavvia.


16
Avere un voto per dare una risposta simile a Linux "copia e incolla nella shell"!
mikezter,

3
Sul serio. Mi manca avere * script initrc. Grazie.
StewSquared

6
Signore, avete reso l'utilizzo di Windows oggi un'esperienza leggermente meno infelice. Per questo, ti ringrazio.
binarymason

18

È possibile utilizzare SharpKeys per mappare qualsiasi chiave su qualsiasi altra chiave in Windows 7, 8 o 10. È molto più semplice e più pulito che modificare il registro da soli.

Spero che sia di aiuto.


2
Posso usarlo per cambiare lingua premendo il tasto maiuscolo?
Grazie

13

Uso quanto segue per inviare CTRL per il tasto BLOC MAIUSC, inviare ALT per il tasto CTRL e inviare BLOC MAIUSC per il tasto ALT. CTRL è alla sinistra di "A" dove Dio lo intendeva, ALT è sotto SHIFT e il tasto BLOC MAIUSC completamente inutile è nascosto in modo sicuro dove devo rompermi il polso per colpirlo.

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

4
Apprezzo molto i commenti. Mi sono sempre chiesto cosa significassero i codici. Molto utile.
zaphodtx,

3

Questo è lo script per scambiare i tasti CTRL e BLOC MAIUSC:

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

È possibile utilizzare lswitch per rimappare l'inserimento della lingua in CapsLock.

Utilizzare un tasto per passare da una lingua di input, l'uso: lswitch [keycode]. Keycode è facoltativo e per impostazione predefinita è il tasto del menu di scelta rapida. Un altro buon candidato è una chiave CapsLock con un codice chiave di 20.

lswitch 20

Aggiungilo al caricamento automatico.


funziona, tuttavia si perde la funzionalità di blocco maiuscole. qualche idea su come definire la funzionalità di blocco maiuscole per la combinazione MAIUSC + BLOC MAIUSC?
Grazie

2

Per fare ciò utilizzavo AutoHotKey.

Avrei un link nella directory di avvio per eseguire uno script ahk molto semplice:

Capslock::Ctrl

Il fatto è che Autohotkey non viene eseguito come amministratore, quindi non influirà sulle finestre privilegiate, a meno che non si utilizzi l'utilità di pianificazione anziché la directory di avvio per eseguire lo script all'accesso con privilegi più elevati. Il secondo problema è che a volte lo script si blocca quando si riprende il sonno, quindi potrebbe essere necessario ricaricarlo, il che è fastidioso.

AutoHotKey è più adatto per attività più complesse, come la scrittura di macro.


Ho provato la soluzione autohotkey e non la consiglio. Non funziona bene se la tua velocità di autorepeat è alta, il ritardo è basso. Inoltre non si combina bene con xkeymacs, il che fa funzionare le chiavi di emacs quasi ovunque in Windows.
Reb.Cabin

Non uso emacs, apro automaticamente un file .ahk al login e trovo questa soluzione di gran lunga la più semplice e portatile
Bjorks numero uno fan

2

La toolbox sysinternals inesauribile fornisce anche un piccolo programma solo per cambiare capslock con controllo - ctrl2cap.exe.


Benvenuto in Super User. Leggere Come consigliare il software, quindi modificare la risposta per includere almeno le informazioni minime richieste (gli elementi in grassetto ). I post senza queste informazioni possono essere soggetti a cancellazione. Grazie per aver contribuito.
Dico Reinstate Monica il

1

Se, per qualche motivo, non vuoi eseguire strumenti di terze parti, è possibile farlo da solo con un po 'di C. Grazie alla brillante risposta di Susam Pal , ho messo insieme lo snippet di seguito.

È praticamente un key-logger. Ascolta le pressioni dei tasti, le acquisisce e costruisce l'input da tastiera tenendo presente la mappatura. Per funzionare, è necessario che l'app della console in basso sia in esecuzione.

Dovrai compilarlo in qualche modo. Ho usato msys2.org con pacman -S mingw-w64-x86_64-gcce compilato /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;
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.