Капсул для управління в Windows 10


82

У Windows 8 я перекомпонував клавішу caplock для керування за допомогою сценарію реєстру

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. Я хочу їх поміняти, тому я скористався інструкціями тут, щоб
підкоригувати

Відповіді:


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 скинула карту блокування шапок. Але зробити це знову так само, як і після іншого перезапуску.
Джек О'Коннор

38
Якщо хтось, як я, потребує остаточного фрагмента головоломки: вставте вище в новий текстовий файл, збережіть його з .regрозширенням, двічі клацніть файл, щоб застосувати зміни до реєстру, а потім перезавантажте.
Майк Нібіблінг

4
Як відобразити це Caps Lockзгодом?
Ehtesh Choudhury

7
@EhteshChoudhury ви можете видалити запис "Карта коду сканування" під ключем реєстру, перезавантажте та поведінку за замовчуванням буде відновлено.
божоле

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
Запропонуйте нагороду за відповідь на Linux-відповідь "копіювати та вставляти в оболонку"!
mikezter

3
Серйозно. Мені не вистачає * сценаріїв initrc. Дякую.
stewSquared

6
Ви, пане, сьогодні користуєтеся системою Windows трохи менш жалюгідним досвідом. За це я дякую тобі.
бінарник 19

18

За допомогою програми SharpKeys можна зіставити будь-яку клавішу з будь-якою іншою клавішею в Windows 7, 8 або 10. Це зробити набагато простіше і чистіше, ніж самостійно змінювати реєстр.

Сподіваюся, це допомагає.


2
Чи можу я використовувати це для перемикання мов натисканням клавіші "cap lock"?
thanos.a

13

Я використовую наступне, щоб надсилати CTRL для ключа CAPS LOCK, надсилати ALT для ключа CTRL і надсилати CAPS LOCK для ключа ALT. 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]. Кейкод є необов'язковим і за замовчуванням використовується ключ контекстного меню Ще одним хорошим кандидатом є ключ CapsLock з кодом 20.

lswitch 20

Додайте його до автоматичного завантаження.


це працює, однак функція блокування шапок втрачається. будь-яка ідея про те, як визначити функцію блокування шапок для переключення + комбінація шапок блокування?
thanos.a

2

Для цього я використовував AutoHotKey.

Я маю посилання в каталозі запуску для запуску дуже базового сценарію ах:

Capslock::Ctrl

Справа в тому, що Autohotkey не запускається як адміністратор, тому це не вплине на привілейовані вікна, якщо ви не використовуєте планувальник завдань замість запуску каталогу для запуску сценарію при вході з більш високими привілеями. Друга проблема полягає в тому, що іноді сценарій висить під час відновлення сну, тому вам може знадобитися перезавантажити його, що дратує.

AutoHotKey краще підходить для більш складних завдань, наприклад, написання макросів.


Я спробував рішення для автоматичної клавіші, і я не рекомендую його. Це не добре, якщо у вас швидкість автоматичного повторення висока, низька затримка. Він також не добре поєднується з xkeymacs, завдяки чому клавіші emacs працюють майже скрізь у Windows.
Reb.Cabin

Я не використовую emacs, відкриваю .ahk-файл автоматично при вході в систему, і вважаю, що це рішення є найбільш простим і портативним на сьогоднішній день
вентилятор Bjorks номер один

2

Невичерпна панель інструментів sysinternals також пропонує невелику програму просто для перемикання шаблону з керуванням - ctrl2cap.exe.


Ласкаво просимо до Супер Користувача. Прочитайте, як рекомендувати програмне забезпечення, а потім відредагуйте свою відповідь, щоб включити хоча б мінімальну необхідну інформацію (пункти виділені жирним шрифтом ). Пости без цієї інформації можуть бути видалені. Дякуємо за ваш внесок.
Twisty Impersonator

1

Якщо з якихось причин ви не хочете запускати сторонні інструменти, можна зробити це самостійно з невеликою кількістю C. Завдяки блискучій відповіді Сусам Пал , я склав фрагмент нижче разом.

Це практично ключ-реєстратор. Він слухає натискання клавіш, захоплює їх і будує введення на клавіатурі, маючи на увазі відображення. Додаток нижче консолі потрібно запустити, щоб воно працювало.

Це потрібно буде якось скласти. Я використовував 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;
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.