Kartensperre zur Steuerung in Windows 10


82

In Windows 8 habe ich meinen Capslock-Schlüssel neu zugeordnet, um die Steuerung mithilfe des Registrierungsskripts zu steuern

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

Nach dem Upgrade auf Windows 10 funktioniert dies nicht mehr. Wie geht das?


Beachten Sie, dass hiermit nur die Feststelltaste einer anderen Strg-Taste zugewiesen wird. Ich möchte , dass sie getauscht, so habe ich die hier Anweisungen , um das Skript zu zwicken oben: superuser.com/a/1202601/315584
jia103

Antworten:


87

Haben Sie daran gedacht, neu zu starten? Scheint für mich gut zu funktionieren, genau wie in 7 und 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
Das Problem für mich war, dass das Windows 10-Upgrade meine Feststelltastenzuordnung zurücksetzte . Aber nach einem weiteren Neustart funktionierte es genauso.
Jack O'Connor

38
Wenn jemand wie ich das letzte Teil des Puzzles benötigt: Fügen Sie das Obige in eine neue Textdatei ein, speichern Sie es mit der .regErweiterung, doppelklicken Sie auf die Datei, um die Änderungen in die Registrierung zu übernehmen, und starten Sie sie neu.
Mike Niebling

4
Wie ordnen Sie es danach wieder zu Caps Lock?
Ehtesh Choudhury

7
@EhteshChoudhury Sie können den Eintrag "Scancode Map" unter dem Registrierungsschlüssel löschen, neu starten und das Standardverhalten wird wiederhergestellt.
Bojolais

76

Falls jemand dies über PowerShell benötigt:

$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);

Führen Sie es als Administrator aus und starten Sie es neu.


16
Habe ein positives Votum für die Linux-ähnliche Antwort "Copy & Paste in Shell"!
Mikezter

3
Ernsthaft. Ich vermisse * initrc-Skripte. Vielen Dank.
StewSquared

6
Sie, mein Herr, haben die Verwendung von Windows heute zu einer etwas weniger miserablen Erfahrung gemacht. Dafür danke ich dir.
Binarymason

18

Sie können SharpKeys verwenden , um einen beliebigen Schlüssel einem beliebigen anderen Schlüssel in Windows 7, 8 oder 10 zuzuordnen . Es ist viel einfacher und sauberer, als die Registrierung selbst zu ändern.

Hoffe das hilft.


2
Kann ich damit durch Drücken der Feststelltaste die Sprache wechseln?
thanos.a

13

Ich verwende Folgendes, um STRG für die FESTSTELLTASTE, ALT für die STRG-Taste und FESTSTELLTASTE für die ALT-Taste zu senden. STRG ist links von "A", wo Gott es beabsichtigt hat, ALT ist unter UMSCHALT und die völlig nutzlose FESTSTELLTASTE ist sicher verstaut, wo ich mein Handgelenk brechen muss, um es zu schlagen.

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
Ich schätze die Kommentare sehr. Ich habe mich immer gefragt, was die Codes bedeuten. Sehr hilfreich.
Zaphodtx

3

Dies ist das Skript zum Vertauschen der STRG- und FESTSTELLTASTEN:

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

Sie können lswitch verwenden , um die Spracheingabe in CapsLock neu zuzuordnen.

Verwenden Sie eine beliebige Taste, um die Eingabesprache zu wechseln lswitch [keycode]. Der Schlüsselcode ist optional und standardmäßig die Kontextmenütaste. Ein weiterer guter Kandidat ist ein CapsLock-Schlüssel mit einem Schlüsselcode von 20.

lswitch 20

Fügen Sie es zum automatischen Laden hinzu.


Dies funktioniert, jedoch geht die Feststelltaste verloren. Hast du eine Idee, wie die Feststelltaste für die Kombination Umschalt + Feststelltaste definiert werden soll?
thanos.a

2

Früher habe ich dazu AutoHotKey verwendet.

Ich hätte einen Link im Startverzeichnis, um ein sehr einfaches Ahk-Skript auszuführen:

Capslock::Ctrl

Die Sache ist, dass Autohotkey nicht als Administrator ausgeführt wird, sodass es sich nicht auf privilegierte Fenster auswirkt, es sei denn, Sie verwenden den Taskplaner anstelle des Startverzeichnisses, um das Skript bei der Anmeldung mit höheren Berechtigungen auszuführen. Das zweite Problem ist, dass das Skript manchmal hängen bleibt, wenn der Ruhezustand fortgesetzt wird, sodass Sie es möglicherweise neu laden müssen, was ärgerlich ist.

AutoHotKey eignet sich besser für komplexere Aufgaben wie das Schreiben von Makros.


Ich habe die Autohotkey-Lösung ausprobiert und kann sie nicht empfehlen. Es funktioniert nicht gut, wenn Sie eine hohe Wiederholungsgeschwindigkeit und eine niedrige Verzögerung haben. Es passt auch nicht gut zu xkeymacs, wodurch Emacs-Schlüssel unter Windows fast überall funktionieren.
Reb.Cabin

Ich verwende keinen Emacs, öffne beim Anmelden automatisch eine .ahk-Datei und finde, dass diese Lösung bei weitem die einfachste und portabelste ist
Bjorks Fan Nummer eins

2

Die unerschöpfliche Toolbox sysinternals bietet auch ein kleines Programm zum Umschalten des Capslocks mit control - ctrl2cap.exe.


Willkommen bei Super User. Bitte lesen Sie, wie Sie Software empfehlen können, und bearbeiten Sie Ihre Antwort, um mindestens die erforderlichen Mindestinformationen (die fett gedruckten Elemente ) zu enthalten. Posts ohne diese Informationen können gelöscht werden. Vielen Dank für Ihren Beitrag.
Twisty Imitator

1

Wenn Sie aus irgendeinem Grund keine Tools von Drittanbietern ausführen möchten, können Sie dies mit ein bisschen C selbst tun. Dank der brillanten Antwort von Susam Pal habe ich das folgende Snippet zusammengestellt.

Es ist praktisch ein Key-Logger. Es lauscht auf Tastendrücke, erfasst sie und erstellt Tastatureingaben unter Berücksichtigung der Zuordnung. Die folgende Konsolen-App muss ausgeführt werden, damit sie funktioniert.

Sie müssen dies irgendwie kompilieren. Ich habe msys2.org mit benutzt pacman -S mingw-w64-x86_64-gccund mit kompiliert /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;
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.