Windows воспринимает Dvorak, как QWERTY. Исправляем сие недоразумение

в 17:16, , рубрики: Без рубрики

Каждый, кто создавал кастомную не-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 (спецсимволы тоже меняются)

Некорректная работа Caps Lock в кастомной раскладке Дворака на 8 клавишах
Некорректная работа Caps Lock в кастомной раскладке Дворака на 8 клавишах

MSKLC в работе не меняет данные о виртуальных клавишах в раскладке!

Эта "мелочь" является корнем всех проблем с горячими клавишами и ответом на вопрос "Почему они не переехали?!"

MSKLC работает с файлами, которые имеют расширение .klc. По сути - это обыкновенный текстовый файл, который можно легко отредактировать и излечить раскладку!

Структура .klc-файла

Как было сказано ранее, .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_

Код виртуальной клавиши

Символ на клавиатуре

OEM_1

;:

OEM_2

/?

OEM_3

`~

OEM_4

[{

OEM_5

|

OEM_6

]}

.klc-файл ПОСЛЕOEM_7

'"

OEM_102 Изначально британская версия раскладки клавиатуры </p>" data-image="https://habrastorage.org/getpro/habr/upload_files/c14/e7b/5fb/c14e7b5fbe3ed7a4b7e2cecf02ba7bf5.png" data-abbr="(у клавиатур с коротким левым Shift)" data-image-width="669" data-image-height="358">(у клавиатур с коротким левым Shift)

|

OEM_COMMA

,<

OEM_PERIOD

.>

OE.klc-файл ДОM_PLUS

+=

.klc-файл ДОOEM_MINUS

-_

.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

Исправленный Caps Lock
Исправленный Caps Lock

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

Windows воспринимает Dvorak, как QWERTY. Исправляем сие недоразумение - 4

Немного послесловия

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

Автор:
Schtunguerch

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js