Каждый, кто создавал кастомную не-QWERTY раскладку клавиатуры через Microsoft Keyboard Layout Creator (MSKLC), обнаружил, что в процессе работы во множестве программ (включая все программы в .NET) горячие клавиши находятся на тех же местах, что и раньше у QWERTY-раскладки (Ctrl+C, Ctrl+V всё там же; для пользователя Dvorak это теперь Ctrl+J и Ctrl+K, соответственно).
В этой ситуации разработчики приложений ни в чём ни виноваты, дело в особенности работы MSKLC, которая не меняет расположение виртуальных клавиш. Сейчас разберёмся, как устроен .klc-файл и как его отредактировать, чтобы всё встало на свои места.
Оглавление
Немного абсурда
Структура .klc-файла
Лечение раскладки
Немного послесловия
Немного абсурда
В Linux: жмёшь R - воспринимается, как R какая бы это раскладка ни была. По идее, в Windows всё так же, но работает только с раскладками, что идут "в коробке" с системой (классический Dvorak там тоже есть).
Проблемы появляются при разработке собственных раскладок, либо при скачивании сторонних раскладок, в которых автор не учёл мелочи при работе в MSKLC, речь о которой пойдёт далее.
Вдобавок, наблюдается некорректная работа Caps Lock - регистр меняется там же, где стояли алфавитные символы в QWERTY (спецсимволы тоже меняются)

MSKLC в работе не меняет данные о виртуальных клавишах в раскладке!
Эта "мелочь" является корнем всех проблем с горячими клавишами и ответом на вопрос "Почему они не переехали?!"
MSKLC работает с файлами, которые имеют расширение .klc. По сути - это обыкновенный текстовый файл, который можно легко отредактирова��ь и излечить раскладку!
Структура .klc-файла
Как было сказано ранее, .klc-файл представляет собой текстовый документ, в котором описывается вся информация о раскладке клавиатуры, с которой работает автор.

.klc-файл QWERTY-раскладки
KBD Layout01 "US" COPYRIGHT "(c) 2022 Company" COMPANY "Company" LOCALENAME "en-US" LOCALEID "00000409" VERSION 1.0 SHIFTSTATE 0 //Column 4 1 //Column 5 : Shft 2 //Column 6 : Ctrl LAYOUT ;an extra '@' at the end is a dead key //SC VK_ Cap 0 1 2 //-- ---- ---- ---- ---- ---- 02 1 0 1 0021 -1 // DIGIT ONE, EXCLAMATION MARK, <none> 03 2 0 2 0040 -1 // DIGIT TWO, COMMERCIAL AT, <none> 04 3 0 3 0023 -1 // DIGIT THREE, NUMBER SIGN, <none> 05 4 0 4 0024 -1 // DIGIT FOUR, DOLLAR SIGN, <none> 06 5 0 5 0025 -1 // DIGIT FIVE, PERCENT SIGN, <none> 07 6 0 6 005e -1 // DIGIT SIX, CIRCUMFLEX ACCENT, <none> 08 7 0 7 0026 -1 // DIGIT SEVEN, AMPERSAND, <none> 09 8 0 8 002a -1 // DIGIT EIGHT, ASTERISK, <none> 0a 9 0 9 0028 -1 // DIGIT NINE, LEFT PARENTHESIS, <none> 0b 0 0 0 0029 -1 // DIGIT ZERO, RIGHT PARENTHESIS, <none> 0c OEM_MINUS 0 002d 005f -1 // HYPHEN-MINUS, LOW LINE, <none> 0d OEM_PLUS 0 003d 002b -1 // EQUALS SIGN, PLUS SIGN, <none> 10 Q 1 q Q -1 // LATIN SMALL LETTER Q, LATIN CAPITAL LETTER Q, <none> 11 W 1 w W -1 // LATIN SMALL LETTER W, LATIN CAPITAL LETTER W, <none> 12 E 1 e E -1 // LATIN SMALL LETTER E, LATIN CAPITAL LETTER E, <none> 13 R 1 r R -1 // LATIN SMALL LETTER R, LATIN CAPITAL LETTER R, <none> 14 T 1 t T -1 // LATIN SMALL LETTER T, LATIN CAPITAL LETTER T, <none> 15 Y 1 y Y -1 // LATIN SMALL LETTER Y, LATIN CAPITAL LETTER Y, <none> 16 U 1 u U -1 // LATIN SMALL LETTER U, LATIN CAPITAL LETTER U, <none> 17 I 1 i I -1 // LATIN SMALL LETTER I, LATIN CAPITAL LETTER I, <none> 18 O 1 o O -1 // LATIN SMALL LETTER O, LATIN CAPITAL LETTER O, <none> 19 P 1 p P -1 // LATIN SMALL LETTER P, LATIN CAPITAL LETTER P, <none> 1a OEM_4 0 005b 007b 001b // LEFT SQUARE BRACKET, LEFT CURLY BRACKET, ESCAPE 1b OEM_6 0 005d 007d 001d // RIGHT SQUARE BRACKET, RIGHT CURLY BRACKET, INFORMATION SEPARATOR THREE 1e A 1 a A -1 // LATIN SMALL LETTER A, LATIN CAPITAL LETTER A, <none> 1f S 1 s S -1 // LATIN SMALL LETTER S, LATIN CAPITAL LETTER S, <none> 20 D 1 d D -1 // LATIN SMALL LETTER D, LATIN CAPITAL LETTER D, <none> 21 F 1 f F -1 // LATIN SMALL LETTER F, LATIN CAPITAL LETTER F, <none> 22 G 1 g G -1 // LATIN SMALL LETTER G, LATIN CAPITAL LETTER G, <none> 23 H 1 h H -1 // LATIN SMALL LETTER H, LATIN CAPITAL LETTER H, <none> 24 J 1 j J -1 // LATIN SMALL LETTER J, LATIN CAPITAL LETTER J, <none> 25 K 1 k K -1 // LATIN SMALL LETTER K, LATIN CAPITAL LETTER K, <none> 26 L 1 l L -1 // LATIN SMALL LETTER L, LATIN CAPITAL LETTER L, <none> 27 OEM_1 0 003b 003a -1 // SEMICOLON, COLON, <none> 28 OEM_7 0 0027 0022 -1 // APOSTROPHE, QUOTATION MARK, <none> 29 OEM_3 0 0060 007e -1 // GRAVE ACCENT, TILDE, <none> 2b OEM_5 0 005c 007c 001c // REVERSE SOLIDUS, VERTICAL LINE, INFORMATION SEPARATOR FOUR 2c Z 1 z Z -1 // LATIN SMALL LETTER Z, LATIN CAPITAL LETTER Z, <none> 2d X 1 x X -1 // LATIN SMALL LETTER X, LATIN CAPITAL LETTER X, <none> 2e C 1 c C -1 // LATIN SMALL LETTER C, LATIN CAPITAL LETTER C, <none> 2f V 1 v V -1 // LATIN SMALL LETTER V, LATIN CAPITAL LETTER V, <none> 30 B 1 b B -1 // LATIN SMALL LETTER B, LATIN CAPITAL LETTER B, <none> 31 N 1 n N -1 // LATIN SMALL LETTER N, LATIN CAPITAL LETTER N, <none> 32 M 1 m M -1 // LATIN SMALL LETTER M, LATIN CAPITAL LETTER M, <none> 33 OEM_COMMA 0 002c 003c -1 // COMMA, LESS-THAN SIGN, <none> 34 OEM_PERIOD 0 002e 003e -1 // FULL STOP, GREATER-THAN SIGN, <none> 35 OEM_2 0 002f 003f -1 // SOLIDUS, QUESTION MARK, <none> 39 SPACE 0 0020 0020 0020 // SPACE, SPACE, SPACE 56 OEM_102 0 005c 007c 001c // REVERSE SOLIDUS, VERTICAL LINE, INFORMATION SEPARATOR FOUR 53 DECIMAL 0 002e 002e -1 // FULL STOP, FULL STOP, KEYNAME 01 Esc 0e Backspace 0f Tab 1c Enter 1d Ctrl 2a Shift 36 "Right Shift" 37 "Num *" 38 Alt 39 Space 3a "Caps Lock" 3b F1 3c F2 3d F3 3e F4 3f F5 40 F6 41 F7 42 F8 43 F9 44 F10 45 Pause 46 "Scroll Lock" 47 "Num 7" 48 "Num 8" 49 "Num 9" 4a "Num -" 4b "Num 4" 4c "Num 5" 4d "Num 6" 4e "Num +" 4f "Num 1" 50 "Num 2" 51 "Num 3" 52 "Num 0" 53 "Num Del" 54 "Sys Req" 57 F11 58 F12 7c F13 7d F14 7e F15 7f F16 80 F17 81 F18 82 F19 83 F20 84 F21 85 F22 86 F23 87 F24 KEYNAME_EXT 1c "Num Enter" 1d "Right Ctrl" 35 "Num /" 37 "Prnt Scrn" 38 "Right Alt" 45 "Num Lock" 46 Break 47 Home 48 Up 49 "Page Up" 4b Left 4d Right 4f End 50 Down 51 "Page Down" 52 Insert 53 Delete 54 <00> 56 Help 5b "Left Windows" 5c "Right Windows" 5d Application DESCRIPTIONS 0409 US LANGUAGENAMES 0409 English (United States) ENDKBD
Следует отметить тот факт, что данные служебных клавиш в KEYNAME, KEYNAME_EXT (tab, enter и т.п.) изменить никак нельзя; даже манипуляции в .klc-файле не приведут к результату.
Работа будет просходить в секции LAYOUT, где можно обнаружить и отсутствие Caps Lock в нужных клавишах, и несовпадающие символы с виртуальными клавишами.
Пример из .klc-файла моей раскладки (клавиши: 'QJK, при этом виртуальные клавиши помечены, как ZXCV). Тут же и ненужное срабатывание Caps Lock (на месте апострофа (2c) значение должно быть = 0)
//SC VK_ Cap 0 1 2 6 //-- --- --- --- --- --- --- 2c Z 1 0027 0022 -1 -1 // APOSTROPHE, QUOTATION MARK, <none>, <none> 2d X 1 q Q -1 005b // LATIN SMALL LETTER Q, LATIN CAPITAL LETTER Q, <none>, LEFT SQUARE BRACKET 2e C 1 j J -1 005d // LATIN SMALL LETTER J, LATIN CAPITAL LETTER J, <none>, RIGHT SQUARE BRACKET 2f V 1 k K -1 005f // LATIN SMALL LETTER K, LATIN CAPITAL LETTER K, <none>, LOW LINE
Лечение раскладки
Шаг 1. Отредактировать .klc-файл так, чтобы коды клавиш и символы совпадали (ну или так, как хочется).
Клавиши букв и цифр обозначаются соответствующим образом (A-Z, 0-9). Клавиши знаков препинания обозначаются иначе, через OEM_
Код виртуальной клавиши | Символ на клавиатуре |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.klc-файл ДО
KBD schtaoeu "US SchtinguêrDvorak" COPYRIGHT "Meh" COMPANY "Schtinguêrch" LOCALENAME "en-US" LOCALEID "00000409" VERSION 1.0 SHIFTSTATE 0 //Column 4 1 //Column 5 : Shft 2 //Column 6 : Ctrl 6 //Column 7 : Ctrl Alt LAYOUT ;an extra '@' at the end is a dead key //SC VK_ Cap 0 1 2 6 //-- ---- ---- ---- ---- ---- ---- 02 1 0 1 003f -1 -1 // DIGIT ONE, QUESTION MARK, <none>, <none> 03 2 0 2 0040 -1 -1 // DIGIT TWO, COMMERCIAL AT, <none>, <none> 04 3 0 3 0023 -1 -1 // DIGIT THREE, NUMBER SIGN, <none>, <none> 05 4 0 4 0024 -1 -1 // DIGIT FOUR, DOLLAR SIGN, <none>, <none> 06 5 0 5 0025 -1 -1 // DIGIT FIVE, PERCENT SIGN, <none>, <none> 07 6 0 6 005e -1 -1 // DIGIT SIX, CIRCUMFLEX ACCENT, <none>, <none> 08 7 0 7 0026 -1 -1 // DIGIT SEVEN, AMPERSAND, <none>, <none> 09 8 0 8 002a -1 -1 // DIGIT EIGHT, ASTERISK, <none>, <none> 0a 9 0 9 0028 -1 -1 // DIGIT NINE, LEFT PARENTHESIS, <none>, <none> 0b 0 0 0 0029 -1 -1 // DIGIT ZERO, RIGHT PARENTHESIS, <none>, <none> 0c OEM_MINUS 0 002d 005f -1 -1 // HYPHEN-MINUS, LOW LINE, <none>, <none> 0d OEM_PLUS 0 003d 002b -1 -1 // EQUALS SIGN, PLUS SIGN, <none>, <none> 10 Q 1 003b 003a -1 -1 // SEMICOLON, COLON, <none>, <none> 11 W 1 002c 0021 -1 003c // COMMA, EXCLAMATION MARK, <none>, LESS-THAN SIGN 12 E 1 002e 003d -1 003e // FULL STOP, EQUALS SIGN, <none>, GREATER-THAN SIGN 13 R 1 p P -1 007e // LATIN SMALL LETTER P, LATIN CAPITAL LETTER P, <none>, TILDE 14 T 1 y Y -1 -1 // LATIN SMALL LETTER Y, LATIN CAPITAL LETTER Y, <none>, <none> 15 Y 1 f F -1 -1 // LATIN SMALL LETTER F, LATIN CAPITAL LETTER F, <none>, <none> 16 U 1 g G -1 00e6 // LATIN SMALL LETTER G, LATIN CAPITAL LETTER G, <none>, LATIN SMALL LETTER AE (ash) * 17 I 1 l L -1 005e // LATIN SMALL LETTER L, LATIN CAPITAL LETTER L, <none>, CIRCUMFLEX ACCENT 18 O 1 r R -1 0023 // LATIN SMALL LETTER R, LATIN CAPITAL LETTER R, <none>, NUMBER SIGN 19 P 1 c C -1 007c // LATIN SMALL LETTER C, LATIN CAPITAL LETTER C, <none>, VERTICAL LINE 1a OEM_4 0 0301@ 0302@ 001b 00c6 // COMBINING ACUTE ACCENT (Oxia, Tonos), COMBINING CIRCUMFLEX ACCENT, ESCAPE, LATIN CAPITAL LETTER AE (ash) * 1b OEM_6 0 0300@ 0308@ 001d -1 // COMBINING GRAVE ACCENT (Varia), COMBINING DIAERESIS (Dialytika), INFORMATION SEPARATOR THREE, <none> 1e A 1 a A -1 007b // LATIN SMALL LETTER A, LATIN CAPITAL LETTER A, <none>, LEFT CURLY BRACKET 1f S 1 o O -1 0028 // LATIN SMALL LETTER O, LATIN CAPITAL LETTER O, <none>, LEFT PARENTHESIS 20 D 1 e E -1 0029 // LATIN SMALL LETTER E, LATIN CAPITAL LETTER E, <none>, RIGHT PARENTHESIS 21 F 1 u U -1 007d // LATIN SMALL LETTER U, LATIN CAPITAL LETTER U, <none>, RIGHT CURLY BRACKET 22 G 1 i I -1 0024 // LATIN SMALL LETTER I, LATIN CAPITAL LETTER I, <none>, DOLLAR SIGN 23 H 1 d D -1 0025 // LATIN SMALL LETTER D, LATIN CAPITAL LETTER D, <none>, PERCENT SIGN 24 J 1 h H -1 002b // LATIN SMALL LETTER H, LATIN CAPITAL LETTER H, <none>, PLUS SIGN 25 K 1 t T -1 002d // LATIN SMALL LETTER T, LATIN CAPITAL LETTER T, <none>, HYPHEN-MINUS 26 L 1 n N -1 002a // LATIN SMALL LETTER N, LATIN CAPITAL LETTER N, <none>, ASTERISK 27 OEM_1 0 s S -1 002f // LATIN SMALL LETTER S, LATIN CAPITAL LETTER S, <none>, SOLIDUS 28 OEM_7 0 z Z -1 0026 // LATIN SMALL LETTER Z, LATIN CAPITAL LETTER Z, <none>, AMPERSAND 29 OEM_3 0 0060 007e -1 -1 // GRAVE ACCENT, TILDE, <none>, <none> 2b OEM_5 0 -1 -1 001c -1 // <none>, <none>, INFORMATION SEPARATOR FOUR, <none> 2c Z 1 0027 0022 -1 -1 // APOSTROPHE, QUOTATION MARK, <none>, <none> 2d X 1 q Q -1 005b // LATIN SMALL LETTER Q, LATIN CAPITAL LETTER Q, <none>, LEFT SQUARE BRACKET 2e C 1 j J -1 005d // LATIN SMALL LETTER J, LATIN CAPITAL LETTER J, <none>, RIGHT SQUARE BRACKET 2f V 1 k K -1 005f // LATIN SMALL LETTER K, LATIN CAPITAL LETTER K, <none>, LOW LINE 30 B 1 x X -1 -1 // LATIN SMALL LETTER X, LATIN CAPITAL LETTER X, <none>, <none> 31 N 1 b B -1 -1 // LATIN SMALL LETTER B, LATIN CAPITAL LETTER B, <none>, <none> 32 M 1 m M -1 0153 // LATIN SMALL LETTER M, LATIN CAPITAL LETTER M, <none>, LATIN SMALL LIGATURE OE 33 OEM_COMMA 0 w W -1 005f // LATIN SMALL LETTER W, LATIN CAPITAL LETTER W, <none>, LOW LINE 34 OEM_PERIOD 0 v V -1 007e // LATIN SMALL LETTER V, LATIN CAPITAL LETTER V, <none>, TILDE 35 OEM_2 0 002f 005c -1 0152 // SOLIDUS, REVERSE SOLIDUS, <none>, LATIN CAPITAL LIGATURE OE 39 SPACE 0 0020 0020 0020 -1 // SPACE, SPACE, SPACE, <none> 56 OEM_102 0 005c 007c 001c -1 // REVERSE SOLIDUS, VERTICAL LINE, INFORMATION SEPARATOR FOUR, <none> 53 DECIMAL 0 002e 002e -1 -1 // FULL STOP, FULL STOP, , DEADKEY 0301 0062 00df // b -> ß 0061 00e1 // a -> á 0064 00f0 // d -> ð 0069 00ed // i -> í 0075 00fa // u -> ú 0065 00e9 // e -> é 006f 00f3 // o -> ó 006e 00f1 // n -> ñ 0063 00e7 // c -> ç 0079 00fd // y -> ý 0041 00c1 // A -> Á 0044 00d0 // D -> Ð 0049 00cd // I -> Í 0055 00da // U -> Ú 0045 00c9 // E -> É 004f 00d3 // O -> Ó 004e 00d1 // N -> Ñ 0021 00a1 // ! -> ¡ 0043 00c7 // C -> Ç 0059 00dd // Y -> Ý 003f 00bf // ? -> ¿ DEADKEY 0302 0061 00e2 // a -> â 0069 00ee // i -> î 0075 00fb // u -> û 0065 00ea // e -> ê 006f 00f4 // o -> ô 0041 00c2 // A -> Â 0049 00ce // I -> Î 0055 00db // U -> Û 0045 00ca // E -> Ê 004f 00d4 // O -> Ô DEADKEY 0300 0061 00e0 // a -> à 0069 00ec // i -> ì 0075 00f9 // u -> ù 0065 00e8 // e -> è 006f 00f2 // o -> ò 0079 00fe // y -> þ 0041 00c0 // A -> À 0049 00cc // I -> Ì 0055 00d9 // U -> Ù 0045 00c8 // E -> È 004f 00d2 // O -> Ò 0059 00ff // Y -> ÿ DEADKEY 0308 0061 00e4 // a -> ä 0069 00ef // i -> ï 0075 00fc // u -> ü 0065 00eb // e -> ë 006f 00f6 // o -> ö 0079 00ff // y -> ÿ 0041 00c4 // A -> Ä 0049 00cf // I -> Ï 0055 00dc // U -> Ü 0045 00cb // E -> Ë 004f 00d6 // O -> Ö KEYNAME 01 Esc 0e Backspace 0f Tab 1c Enter 1d Ctrl 2a Shift 36 "Right Shift" 37 "Num *" 38 Alt 39 Space 3a "Caps Lock" 3b F1 3c F2 3d F3 3e F4 3f F5 40 F6 41 F7 42 F8 43 F9 44 F10 45 Pause 46 "Scroll Lock" 47 "Num 7" 48 "Num 8" 49 "Num 9" 4a "Num -" 4b "Num 4" 4c "Num 5" 4d "Num 6" 4e "Num +" 4f "Num 1" 50 "Num 2" 51 "Num 3" 52 "Num 0" 53 "Num Del" 54 "Sys Req" 57 F11 58 F12 7c F13 7d F14 7e F15 7f F16 80 F17 81 F18 82 F19 83 F20 84 F21 85 F22 86 F23 87 F24 KEYNAME_EXT 1c "Num Enter" 1d "Right Ctrl" 35 "Num /" 37 "Prnt Scrn" 38 "Right Alt" 45 "Num Lock" 46 Break 47 Home 48 Up 49 "Page Up" 4b Left 4d Right 4f End 50 Down 51 "Page Down" 52 Insert 53 Delete 54 <00> 56 Help 5b "Left Windows" 5c "Right Windows" 5d Application KEYNAME_DEAD 0301 "COMBINING ACUTE ACCENT (Oxia, Tonos)" 0302 "COMBINING CIRCUMFLEX ACCENT" 0300 "COMBINING GRAVE ACCENT (Varia)" 0308 "COMBINING DIAERESIS (Dialytika)" DESCRIPTIONS 0409 US SchtinguêrDvorak LANGUAGENAMES 0409 English (United States) ENDKBD
.klc-файл ПОСЛЕ
KBD schtaoeu "US SchtinguêrDvorak" COPYRIGHT "Meh" COMPANY "Schtinguêrch" LOCALENAME "en-US" LOCALEID "00000409" VERSION 1.0 SHIFTSTATE 0 //Column 4 1 //Column 5 : Shft 2 //Column 6 : Ctrl 6 //Column 7 : Ctrl Alt LAYOUT ;an extra '@' at the end is a dead key //SC VK_ Cap 0 1 2 6 //-- ---- ---- ---- ---- ---- ---- 02 1 0 1 003f -1 -1 // DIGIT ONE, QUESTION MARK, <none>, <none> 03 2 0 2 0040 -1 -1 // DIGIT TWO, COMMERCIAL AT, <none>, <none> 04 3 0 3 0023 -1 -1 // DIGIT THREE, NUMBER SIGN, <none>, <none> 05 4 0 4 0024 -1 -1 // DIGIT FOUR, DOLLAR SIGN, <none>, <none> 06 5 0 5 0025 -1 -1 // DIGIT FIVE, PERCENT SIGN, <none>, <none> 07 6 0 6 005e -1 -1 // DIGIT SIX, CIRCUMFLEX ACCENT, <none>, <none> 08 7 0 7 0026 -1 -1 // DIGIT SEVEN, AMPERSAND, <none>, <none> 09 8 0 8 002a -1 -1 // DIGIT EIGHT, ASTERISK, <none>, <none> 0a 9 0 9 0028 -1 -1 // DIGIT NINE, LEFT PARENTHESIS, <none>, <none> 0b 0 0 0 0029 -1 -1 // DIGIT ZERO, RIGHT PARENTHESIS, <none>, <none> 0c OEM_MINUS 0 002d 005f -1 -1 // HYPHEN-MINUS, LOW LINE, <none>, <none> 0d OEM_PLUS 0 003d 002b -1 -1 // EQUALS SIGN, PLUS SIGN, <none>, <none> 10 OEM_1 0 003b 003a -1 -1 // SEMICOLON, COLON, <none>, <none> 11 OEM_COMMA 0 002c 0021 -1 003c // COMMA, EXCLAMATION MARK, <none>, LESS-THAN SIGN 12 OEM_PERIOD 0 002e 003d -1 003e // FULL STOP, EQUALS SIGN, <none>, GREATER-THAN SIGN 13 P 1 p P -1 007e // LATIN SMALL LETTER P, LATIN CAPITAL LETTER P, <none>, TILDE 14 Y 1 y Y -1 -1 // LATIN SMALL LETTER Y, LATIN CAPITAL LETTER Y, <none>, <none> 15 F 1 f F -1 -1 // LATIN SMALL LETTER F, LATIN CAPITAL LETTER F, <none>, <none> 16 G 1 g G -1 00e6 // LATIN SMALL LETTER G, LATIN CAPITAL LETTER G, <none>, LATIN SMALL LETTER AE (ash) * 17 L 1 l L -1 005e // LATIN SMALL LETTER L, LATIN CAPITAL LETTER L, <none>, CIRCUMFLEX ACCENT 18 R 1 r R -1 0023 // LATIN SMALL LETTER R, LATIN CAPITAL LETTER R, <none>, NUMBER SIGN 19 C 1 c C -1 007c // LATIN SMALL LETTER C, LATIN CAPITAL LETTER C, <none>, VERTICAL LINE 1a OEM_4 0 0301@ 0302@ 001b 00c6 // COMBINING ACUTE ACCENT (Oxia, Tonos), COMBINING CIRCUMFLEX ACCENT, ESCAPE, LATIN CAPITAL LETTER AE (ash) * 1b OEM_6 0 0300@ 0308@ 001d -1 // COMBINING GRAVE ACCENT (Varia), COMBINING DIAERESIS (Dialytika), INFORMATION SEPARATOR THREE, <none> 1e A 1 a A -1 007b // LATIN SMALL LETTER A, LATIN CAPITAL LETTER A, <none>, LEFT CURLY BRACKET 1f O 1 o O -1 0028 // LATIN SMALL LETTER O, LATIN CAPITAL LETTER O, <none>, LEFT PARENTHESIS 20 E 1 e E -1 0029 // LATIN SMALL LETTER E, LATIN CAPITAL LETTER E, <none>, RIGHT PARENTHESIS 21 U 1 u U -1 007d // LATIN SMALL LETTER U, LATIN CAPITAL LETTER U, <none>, RIGHT CURLY BRACKET 22 I 1 i I -1 0024 // LATIN SMALL LETTER I, LATIN CAPITAL LETTER I, <none>, DOLLAR SIGN 23 D 1 d D -1 0025 // LATIN SMALL LETTER D, LATIN CAPITAL LETTER D, <none>, PERCENT SIGN 24 H 1 h H -1 002b // LATIN SMALL LETTER H, LATIN CAPITAL LETTER H, <none>, PLUS SIGN 25 T 1 t T -1 002d // LATIN SMALL LETTER T, LATIN CAPITAL LETTER T, <none>, HYPHEN-MINUS 26 N 1 n N -1 002a // LATIN SMALL LETTER N, LATIN CAPITAL LETTER N, <none>, ASTERISK 27 S 1 s S -1 002f // LATIN SMALL LETTER S, LATIN CAPITAL LETTER S, <none>, SOLIDUS 28 Z 1 z Z -1 0026 // LATIN SMALL LETTER Z, LATIN CAPITAL LETTER Z, <none>, AMPERSAND 29 OEM_3 0 0060 007e -1 -1 // GRAVE ACCENT, TILDE, <none>, <none> 2b OEM_5 0 -1 -1 001c -1 // <none>, <none>, INFORMATION SEPARATOR FOUR, <none> 2c OEM_7 0 0027 0022 -1 -1 // APOSTROPHE, QUOTATION MARK, <none>, <none> 2d Q 1 q Q -1 005b // LATIN SMALL LETTER Q, LATIN CAPITAL LETTER Q, <none>, LEFT SQUARE BRACKET 2e J 1 j J -1 005d // LATIN SMALL LETTER J, LATIN CAPITAL LETTER J, <none>, RIGHT SQUARE BRACKET 2f K 1 k K -1 005f // LATIN SMALL LETTER K, LATIN CAPITAL LETTER K, <none>, LOW LINE 30 X 1 x X -1 -1 // LATIN SMALL LETTER X, LATIN CAPITAL LETTER X, <none>, <none> 31 B 1 b B -1 -1 // LATIN SMALL LETTER B, LATIN CAPITAL LETTER B, <none>, <none> 32 M 1 m M -1 0153 // LATIN SMALL LETTER M, LATIN CAPITAL LETTER M, <none>, LATIN SMALL LIGATURE OE 33 W 1 w W -1 005f // LATIN SMALL LETTER W, LATIN CAPITAL LETTER W, <none>, LOW LINE 34 V 1 v V -1 007e // LATIN SMALL LETTER V, LATIN CAPITAL LETTER V, <none>, TILDE 35 OEM_2 0 002f 005c -1 0152 // SOLIDUS, REVERSE SOLIDUS, <none>, LATIN CAPITAL LIGATURE OE 39 SPACE 0 0020 0020 0020 -1 // SPACE, SPACE, SPACE, <none> 56 OEM_102 0 005c 007c 001c -1 // REVERSE SOLIDUS, VERTICAL LINE, INFORMATION SEPARATOR FOUR, <none> 53 DECIMAL 0 002e 002e -1 -1 // FULL STOP, FULL STOP, , DEADKEY 0301 0062 00df // b -> ß 0061 00e1 // a -> á 0064 00f0 // d -> ð 0069 00ed // i -> í 0075 00fa // u -> ú 0065 00e9 // e -> é 006f 00f3 // o -> ó 006e 00f1 // n -> ñ 0063 00e7 // c -> ç 0079 00fd // y -> ý 0041 00c1 // A -> Á 0044 00d0 // D -> Ð 0049 00cd // I -> Í 0055 00da // U -> Ú 0045 00c9 // E -> É 004f 00d3 // O -> Ó 004e 00d1 // N -> Ñ 0021 00a1 // ! -> ¡ 0043 00c7 // C -> Ç 0059 00dd // Y -> Ý 003f 00bf // ? -> ¿ DEADKEY 0302 0061 00e2 // a -> â 0069 00ee // i -> î 0075 00fb // u -> û 0065 00ea // e -> ê 006f 00f4 // o -> ô 0041 00c2 // A -> Â 0049 00ce // I -> Î 0055 00db // U -> Û 0045 00ca // E -> Ê 004f 00d4 // O -> Ô DEADKEY 0300 0061 00e0 // a -> à 0069 00ec // i -> ì 0075 00f9 // u -> ù 0065 00e8 // e -> è 006f 00f2 // o -> ò 0079 00fe // y -> þ 0041 00c0 // A -> À 0049 00cc // I -> Ì 0055 00d9 // U -> Ù 0045 00c8 // E -> È 004f 00d2 // O -> Ò 0059 00ff // Y -> ÿ DEADKEY 0308 0061 00e4 // a -> ä 0069 00ef // i -> ï 0075 00fc // u -> ü 0065 00eb // e -> ë 006f 00f6 // o -> ö 0079 00ff // y -> ÿ 0041 00c4 // A -> Ä 0049 00cf // I -> Ï 0055 00dc // U -> Ü 0045 00cb // E -> Ë 004f 00d6 // O -> Ö KEYNAME 01 Esc 0e Backspace 0f Tab 1c Enter 1d Ctrl 2a Shift 36 "Right Shift" 37 "Num *" 38 Alt 39 Space 3a "Caps Lock" 3b F1 3c F2 3d F3 3e F4 3f F5 40 F6 41 F7 42 F8 43 F9 44 F10 45 Pause 46 "Scroll Lock" 47 "Num 7" 48 "Num 8" 49 "Num 9" 4a "Num -" 4b "Num 4" 4c "Num 5" 4d "Num 6" 4e "Num +" 4f "Num 1" 50 "Num 2" 51 "Num 3" 52 "Num 0" 53 "Num Del" 54 "Sys Req" 57 F11 58 F12 7c F13 7d F14 7e F15 7f F16 80 F17 81 F18 82 F19 83 F20 84 F21 85 F22 86 F23 87 F24 KEYNAME_EXT 1c "Num Enter" 1d "Right Ctrl" 35 "Num /" 37 "Prnt Scrn" 38 "Right Alt" 45 "Num Lock" 46 Break 47 Home 48 Up 49 "Page Up" 4b Left 4d Right 4f End 50 Down 51 "Page Down" 52 Insert 53 Delete 54 <00> 56 Help 5b "Left Windows" 5c "Right Windows" 5d Application KEYNAME_DEAD 0301 "COMBINING ACUTE ACCENT (Oxia, Tonos)" 0302 "COMBINING CIRCUMFLEX ACCENT" 0300 "COMBINING GRAVE ACCENT (Varia)" 0308 "COMBINING DIAERESIS (Dialytika)" DESCRIPTIONS 0409 US SchtinguêrDvorak LANGUAGENAMES 0409 English (United States) ENDKBD
Шаг 2. Открыть отредактированный файл в MSKLC, собрать раскладку и установить её
Перед тем, как открывать MSKLC, необходимо удалить проблемную раскладку из системы (то же, что и удалять программы через панель управления). Про бэкапы не забываем..
После того, как был открыт .klc-файл, можно сразу убедиться в правильной настройке переключения Caps Lock

Затем выбираем Project > Build DLL and Setup Package, открываем полученные исходники и запускаем установщик (setup.exe), перезагружаем ПК и радуемся

Немного послесловия
Всё, как всегда, криво, но решаемо. Таким же макаром, можно настроить русскоязычную раскладку, чтобы система воспринимала ЙЦУКЕН или Диктор как Dvorak или Workman или что-то ещё, а не QWERTY.
