Bản đồ capslock để điều khiển trong windows 10


82

Trong windows 8, tôi thường sử dụng lại phím capslock để kiểm soát bằng cách sử dụng tập lệnh đăng ký

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

Sau khi nâng cấp lên cửa sổ 10, nó không hoạt động nữa. Nó được hoàn thiện bằng cách nào?


Lưu ý điều này chỉ ánh xạ lại Caps Lock sang một phím Ctrl khác. Tôi muốn chúng được hoán đổi, vì vậy tôi đã sử dụng các hướng dẫn ở đây để điều chỉnh tập lệnh ở trên: superuser.com/a/1202601/315584
jia103

Câu trả lời:


87

Bạn có nhớ khởi động lại? Có vẻ như hoạt động tốt đối với tôi, giống như trong 7 và 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
Vấn đề đối với tôi là bản nâng cấp Windows 10 thiết lập lại ánh xạ khóa mũ của tôi. Nhưng làm lại nó theo cùng một cách làm việc sau khi khởi động lại khác.
Jack O'Connor

38
Nếu bất cứ ai khác như tôi cần mảnh ghép cuối cùng: dán phần trên vào tệp văn bản mới, lưu nó với .regphần mở rộng, nhấp đúp vào tệp để áp dụng các thay đổi cho sổ đăng ký, sau đó khởi động lại.
Mike Niebled

4
Làm thế nào để bạn ánh xạ nó trở lại Caps Locksau đó?
Ehtesh Choudhury

7
@EhteshChoudhury bạn có thể xóa mục nhập "Bản đồ Scancode" dưới khóa đăng ký, khởi động lại và hành vi mặc định sẽ được khôi phục.
bojolais

76

Trong trường hợp bất cứ ai cần điều này được thực hiện thông qua 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);

Chạy nó với tư cách Quản trị viên và khởi động lại.


16
Có một upvote để đưa ra một câu trả lời "sao chép và dán vào vỏ" giống như Linux!
mikezter

3
Nghiêm túc. Tôi nhớ có * initrc scripts. Cảm ơn.
stewSquared

6
Thưa ông, đã làm cho việc sử dụng Windows ngày nay trở thành một trải nghiệm ít đau khổ hơn. Vì điều đó, tôi cảm ơn bạn.
binarymason

18

Bạn có thể sử dụng SharpKeys để ánh xạ bất kỳ khóa nào sang bất kỳ khóa nào khác trong Windows 7, 8 hoặc 10. Việc thực hiện dễ dàng và sạch sẽ hơn nhiều so với tự sửa đổi sổ đăng ký.

Hi vọng điêu nay co ich.


2
Tôi có thể sử dụng điều này để chuyển đổi ngôn ngữ bằng cách nhấn phím mũ không?
thanos.a

13

Tôi sử dụng cách sau để gửi CTRL cho khóa CAPS LOCK, gửi ALT cho khóa CTRL và gửi CAPS LOCK cho khóa ALT. CTRL nằm ở bên trái của chữ "A" nơi Chúa dự định, ALT nằm dưới SHIFT và phím CAPS LOCK hoàn toàn vô dụng được giấu an toàn nơi tôi phải bẻ cổ tay để đánh nó.

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
Tôi thực sự đánh giá cao các ý kiến. Tôi luôn tự hỏi những gì các mã có nghĩa. Rất hữu ích.
zaphodtx

3

Đây là tập lệnh để hoán đổi các phím CTRL và 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

Bạn có thể sử dụng lswitch để ánh xạ lại ngôn ngữ nhập vào CapsLock.

Sử dụng bất kỳ phím nào để chuyển đổi ngôn ngữ nhập, sử dụng : lswitch [keycode]. Mã khóa là tùy chọn và mặc định là phím menu ngữ cảnh. Một ứng cử viên tốt khác là khóa CapsLock với mã khóa là 20.

lswitch 20

Thêm nó để tự động tải.


Điều này hoạt động, tuy nhiên chức năng khóa mũ bị mất. Bất kỳ ý tưởng về cách xác định chức năng khóa mũ để thay đổi + kết hợp khóa mũ?
thanos.a

2

Tôi đã từng sử dụng AutoHotKey để làm điều này.

Tôi có một liên kết trong thư mục khởi động để chạy tập lệnh ahk rất cơ bản:

Capslock::Ctrl

Vấn đề là, Autohotkey không chạy với tư cách Quản trị viên nên sẽ không ảnh hưởng đến các cửa sổ đặc quyền, trừ khi bạn sử dụng trình lập lịch tác vụ thay vì thư mục khởi động để chạy tập lệnh khi đăng nhập với các đặc quyền cao hơn. Vấn đề thứ hai là đôi khi, tập lệnh bị treo khi tiếp tục ngủ, do đó bạn có thể cần phải tải lại, điều này gây khó chịu.

AutoHotKey phù hợp hơn cho các tác vụ phức tạp hơn, như viết macro.


Tôi đã thử giải pháp autohotkey và tôi không khuyên dùng nó. Nó không hoạt động tốt nếu bạn có tốc độ tự động cao, chậm trễ. Nó cũng không kết hợp tốt với xkeymac, điều này làm cho các phím emacs hoạt động gần như ở mọi nơi trong Windows.
Reb.Cabin

Tôi không sử dụng emacs, tự động mở tệp .ahk khi đăng nhập và tìm giải pháp này đơn giản và dễ mang theo nhất cho đến nay
Bjork số một fan hâm mộ

2

Hộp công cụ sysiternals không thể mở rộng cũng cung cấp một chương trình nhỏ chỉ để chuyển đổi capslock với điều khiển - ctrl2cap.exe.


Chào mừng đến với Siêu người dùng. Vui lòng đọc Làm thế nào để đề xuất phần mềm sau đó chỉnh sửa câu trả lời của bạn để bao gồm ít nhất thông tin bắt buộc tối thiểu (các mục được in đậm ). Bài viết không có thông tin này có thể bị xóa. Cảm ơn đã đóng góp.
Kẻ giả mạo Twisty

1

Nếu, vì một số lý do, bạn không muốn chạy các công cụ của bên thứ ba, bạn có thể tự làm điều này với một chút C. Nhờ câu trả lời tuyệt vời của Susam Pal , tôi đã đặt đoạn trích bên dưới.

Nó thực tế là một logger. Nó lắng nghe các lần nhấn phím, chụp chúng và xây dựng đầu vào bàn phím với ý tưởng ánh xạ. Ứng dụng console dưới đây cần được chạy để nó hoạt động.

Bạn sẽ cần phải biên dịch điều này bằng cách nào đó. Tôi đã sử dụng msys2.org với pacman -S mingw-w64-x86_64-gccvà biên dịch với /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;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.