Windows 10에서 제어 할 맵 잠금


82

Windows 8에서는 레지스트리 스크립트를 사용하여 제어 할 수 있도록 capslock 키를 다시 매핑하는 데 사용했습니다.

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

창 10으로 업그레이드 한 후에는 더 이상 작동하지 않습니다. 어떻게 할 수 있습니까?


이것은 Caps Lock을 다른 Ctrl 키로 만 다시 매핑합니다. 나는 그것들을 교환하기를 원하기 때문에 여기의 스크립트를 수정하기 위해 여기의 지침을 사용했습니다 : superuser.com/a/1202601/315584
jia103

답변:


86

다시 부팅하는 것을 기억하십니까? 7과 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
나에게 문제는 Windows 10 업그레이드가 Caps Lock 매핑을 재설정 한다는 것 입니다. 그러나 다시 시작한 후에도 같은 방식으로 다시 작동했습니다.
잭 오코너

38
나와 같은 다른 사람이 퍼즐의 마지막 조각이 필요하면 위의 내용을 새 텍스트 파일에 붙여넣고 .reg확장명으로 저장 한 다음 파일을 두 번 클릭하여 변경 사항을 레지스트리에 적용한 다음 재부팅하십시오.
Mike Niebling

4
Caps Lock나중에 어떻게 다시 매핑 합니까?
Ehtesh Choudhury '

7
@EhteshChoudhury 레지스트리 키 아래의 "Scancode Map"항목을 삭제하고 재부팅하면 기본 동작이 복원됩니다.
bojolais

75

누구나 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);

관리자 권한으로 실행하고 재부팅하십시오.


16
리눅스와 같은 "복사하여 붙여 넣기"답변을 제공하는 공감대를 가지십시오!
mikezter

3
진심으로. * initrc 스크립트가 누락되었습니다. 감사.
stewSquared

6
오늘날 Windows를 약간 덜 비참한 경험으로 만들었습니다. 감사합니다.
binarymason

18

Windows 7, 8 또는 10에서 SharpKeys 를 사용 하여 키를 다른 키에 매핑 할 수 있습니다 . 레지스트리를 직접 수정하는 것보다 훨씬 쉽고 깔끔합니다.

도움이 되었기를 바랍니다.


2
이 기능을 사용하여 caps lock을 눌러 언어를 전환 할 수 있습니까?
thanos.a

13

다음을 사용하여 CAPS LOCK 키에 대해 CTRL을 보내고 CTRL 키에 대해 ALT를 보내고 ALT 키에 대해 CAPS LOCK을 보냅니다. CTRL은 하나님이 의도 한 "A"의 왼쪽에 있으며, ALT는 SHIFT 아래에 있으며, 쓸모없는 CAPS LOCK 키는 손목을 부딪쳐 야하는 곳에 안전하게 제거됩니다.

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
나는 의견에 정말 감사합니다. 나는 코드가 무엇을 의미하는지 항상 궁금했다. 매우 도움이됩니다.
zaphodtx

3

이것은 CTRL과 CAPS LOCK 키를 바꾸는 스크립트입니다.

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

lswitch 를 사용 하여 언어 입력을 CapsLock에 다시 매핑 할 수 있습니다 .

입력 언어를 전환하려면 아무 키나 사용하십시오 lswitch [keycode]. 키 코드는 선택 사항이며 기본적으로 상황에 맞는 메뉴 키입니다. 또 다른 좋은 후보는 키 코드가 20 인 CapsLock 키입니다.

lswitch 20

자동로드에 추가하십시오.


이것은 작동하지만 Caps Lock 기능은 손실됩니다. caps lock 기능을 shift + caps 잠금 조합으로 정의하는 방법에 대한 아이디어가 있습니까?
thanos.a

2

나는 이것을하기 위해 AutoHotKey를 사용했다.

시작 디렉토리에 매우 기본적인 ahk 스크립트를 실행하는 링크가 있습니다.

Capslock::Ctrl

문제는 Autohotkey가 관리자로 실행되지 않으므로 시작 디렉토리 대신 작업 스케줄러를 사용하여 높은 권한으로 로그인 할 때 스크립트를 실행하지 않는 한 권한있는 창에 영향을 미치지 않습니다. 두 번째 문제는 수면을 재개 할 때 스크립트가 중단되는 경우가 있으므로 다시로드해야 할 수도 있다는 점입니다.

AutoHotKey는 매크로 작성과 같은보다 복잡한 작업에 더 적합합니다.


autohotkey 솔루션을 시도했지만 권장하지 않습니다. 자동 반복 속도가 높고 지연이 느리면 제대로 작동하지 않습니다. 또한 xkeymacs와 잘 섞이지 않아 emacs 키가 Windows의 거의 모든 곳에서 작동합니다.
Reb. Cabin

나는 emacs를 사용하지 않고, 로그인 할 때 .ahk 파일을 자동으로 열고,이 솔루션이 가장 간단하고 이식성이 뛰어나다는 것을
알게

2

끝없는 sysinternals 도구 상자는 제어 기능이있는 ctrl2cap.exe로 전환 할 수있는 작은 프로그램도 제공합니다.


슈퍼 유저에 오신 것을 환영합니다. 읽어 보시기 바랍니다 소프트웨어가 추천하는 방법 다음 편집 적어도 최소한의 필요한 정보 (의 항목을 포함하는 답변을 굵게 ). 이 정보가없는 게시물은 삭제 될 수 있습니다. 기여해 주셔서 감사합니다.
Twisty Impersonator

1

어떤 이유로 든 타사 도구를 실행하지 않으려면 약간의 C를 사용하여 직접 할 수 있습니다. Susam Pal의 훌륭한 답변 덕분에 아래의 스 니펫을 아래에 정리했습니다.

실제로 키 로거입니다. 키 누름을 듣고 캡처하며 맵핑을 염두에두고 키보드 입력을 구성합니다. 작동하려면 아래 콘솔 앱이 실행 중이어야합니다.

어떻게 든 이것을 컴파일해야합니다. msys2.org를 사용 pacman -S mingw-w64-x86_64-gcc하고로 컴파일했습니다 /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;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.