Wes*_*Gun 5 keyboard-shortcuts keyboard-layout
在 Windows 10 中,我使用Microsoft 键盘布局创建器来更改我的键盘布局,因此我的一半键更改了位置。
但是现在,我软件中的所有键盘快捷键都不起作用。例如,现在在P
钥匙所在的位置,有O
. 在 Eclipse 中,当我按 Ctrl+O 打开一个方法时,Eclipse 认为我在按 Ctrl+P,所以它会提示我打印对话框。
在 MS 网站上,我读到了这个:
https://msdn.microsoft.com/en-us/library/windows/desktop/gg153546(v=vs.85).aspx
另外,避免使用 WM_CHAR 来实现键盘快捷键。相反,使用 WM_KEYDOWN 消息;或者甚至更好,使用加速器表。加速器表在下一主题加速器表中描述。
所以,当我改变键盘布局时,我改变了每个键的字符,但我没有改变虚拟键代码,所以这搞砸了。这同样适用于 IME(输入法),如微软拼音。现在,使用新的键盘布局,我无法,
使用.
.
现在它变得可以理解,同时保持不合理。
我认为必须有一个解决方案,因为我认为我面临着与任何想要使用 Dvorak 或 AZERTY 或任何其他键盘布局的用户相同的问题。
我们如何解决这个问题?
我在这里发现了另一个非常相关的问题:
\n\n如何在 Microsoft Keyboard Layout Creator 中恢复 Ctrl+<key> 功能?
\n\n,有一个完美的答案。我将尝试扩展它的细节并将其作为副本放在这里。
\n\n答案提到通过.klc
直接在文本编辑器中编辑文件来更改每个键的VK代码,这是我没有想到的,令人惊叹的设计。它还包含一个博客链接,显示如何执行此操作:
www.sensefulsolutions.com/2010/08/how-to-fix-keyboard-shortcuts-in-klc-eg.html
\n\n那么让我们这样说吧:
\n\nWindows 中每个应用程序中的快捷键并不直接绑定到每个键的字符输出。它们绑定到每个键的虚拟键代码。按键的扫描码是特定于硬件的。驱动程序将这些代码转换为虚拟按键代码,然后操作系统接收VK代码来执行任务。
\n\n当我们在 MSKLC 中编辑键盘布局时,默认情况下 VK 代码不会更改。但您可以打开该.klc
文件进行编辑。
一个典型的.klc
文件将是这样的:
KBD WT_VK_CN "WindThunder VK code changed - Simplified Chinese"\n\nCOPYRIGHT "(c) 2017 WindThunder Studio"\n\nCOMPANY "WindThunder Studio"\n\nLOCALENAME "zh-CN"\n\nLOCALEID "00000804"\n\nVERSION 1.0\n\nSHIFTSTATE\n\n0 //Column 4\n1 //Column 5 : Shft\n2 //Column 6 : Ctrl\n6 //Column 7 : Ctrl Alt\n7 //Column 8 : Shft Ctrl Alt\n\nLAYOUT ;an extra \'@\' at the end is a dead key\n\n//SC VK_ Cap 0 1 2 6 7\n//----------------------------------------------------------------------------------------------------------------------------\n\n02 1 1 007b 1 -1 -1 -1 // LEFT CURLY BRACKET, DIGIT ONE, <none>, <none>, <none>\n03 2 1 005b 2 -1 00b7 -1 // LEFT SQUARE BRACKET, DIGIT TWO, <none>, MIDDLE DOT, <none>\n04 3 1 0028 3 -1 20ac -1 // LEFT PARENTHESIS, DIGIT THREE, <none>, EURO SIGN, <none>\n05 4 1 003c 4 -1 -1 -1 // LESS-THAN SIGN, DIGIT FOUR, <none>, <none>, <none>\n06 5 1 002f 5 -1 -1 -1 // SOLIDUS, DIGIT FIVE, <none>, <none>, <none>\n07 OEM_7 0 0027 0022 -1 00a8@ -1 // APOSTROPHE, QUOTATION MARK, <none>, DIAERESIS, <none>\n08 6 1 005c 6 -1 00ac -1 // REVERSE SOLIDUS, DIGIT SIX, <none>, NOT SIGN, <none>\n09 7 1 003e 7 -1 -1 -1 // GREATER-THAN SIGN, DIGIT SEVEN, <none>, <none>, <none>\n0a 8 1 0029 8 -1 -1 -1 // RIGHT PARENTHESIS, DIGIT EIGHT, <none>, <none>, <none>\n0b 9 1 005d 9 -1 -1 -1 // RIGHT SQUARE BRACKET, DIGIT NINE, <none>, <none>, <none>\n0c 0 1 007d 0 -1 00a1 -1 // RIGHT CURLY BRACKET, DIGIT ZERO, <none>, INVERTED EXCLAMATION MARK, <none>\n0d OEM_PLUS 0 003d 002b -1 00bf -1 // EQUALS SIGN, PLUS SIGN, <none>, INVERTED QUESTION MARK, <none>\n10 Q 1 q Q -1 -1 -1 // LATIN SMALL LETTER Q, LATIN CAPITAL LETTER Q, <none>, <none>, <none>\n11 W 1 w W -1 -1 -1 // LATIN SMALL LETTER W, LATIN CAPITAL LETTER W, <none>, <none>, <none>\n12 E 1 e E -1 -1 -1 // LATIN SMALL LETTER E, LATIN CAPITAL LETTER E, <none>, <none>, <none>\n13 R 1 r R -1 -1 -1 // LATIN SMALL LETTER R, LATIN CAPITAL LETTER R, <none>, <none>, <none>\n14 T 1 t T -1 -1 -1 // LATIN SMALL LETTER T, LATIN CAPITAL LETTER T, <none>, <none>, <none>\n15 OEM_6 0 0060 005e -1 00b4@ -1 // GRAVE ACCENT, CIRCUMFLEX ACCENT, <none>, ACUTE ACCENT, <none>\n16 Y 1 y Y -1 -1 -1 // LATIN SMALL LETTER Y, LATIN CAPITAL LETTER Y, <none>, <none>, <none>\n17 U 1 u U -1 -1 -1 // LATIN SMALL LETTER U, LATIN CAPITAL LETTER U, <none>, <none>, <none>\n18 I 1 i I -1 -1 -1 // LATIN SMALL LETTER I, LATIN CAPITAL LETTER I, <none>, <none>, <none>\n19 O 1 o O -1 -1 -1 // LATIN SMALL LETTER O, LATIN CAPITAL LETTER O, <none>, <none>, <none>\n1a P 1 p P -1 -1 -1 // LATIN SMALL LETTER P, LATIN CAPITAL LETTER P, <none>, <none>, <none>\n1b OEM_MINUS 0 0025 0040 -1 -1 -1 // PERCENT SIGN, COMMERCIAL AT, <none>, <none>, <none>\n1e A 1 a A -1 -1 -1 // LATIN SMALL LETTER A, LATIN CAPITAL LETTER A, <none>, <none>, <none>\n1f S 1 s S -1 -1 -1 // LATIN SMALL LETTER S, LATIN CAPITAL LETTER S, <none>, <none>, <none>\n20 D 1 d D -1 -1 -1 // LATIN SMALL LETTER D, LATIN CAPITAL LETTER D, <none>, <none>, <none>\n21 F 1 f F -1 -1 -1 // LATIN SMALL LETTER F, LATIN CAPITAL LETTER F, <none>, <none>, <none>\n22 G 1 g G -1 -1 -1 // LATIN SMALL LETTER G, LATIN CAPITAL LETTER G, <none>, <none>, <none>\n23 OEM_4 0 002d 005f -1 -1 -1 // HYPHEN-MINUS, LOW LINE, <none>, <none>, <none>\n24 H 1 h H -1 -1 -1 // LATIN SMALL LETTER H, LATIN CAPITAL LETTER H, <none>, <none>, <none>\n25 J 1 j J -1 -1 -1 // LATIN SMALL LETTER J, LATIN CAPITAL LETTER J, <none>, <none>, <none>\n26 K 1 k K -1 -1 -1 // LATIN SMALL LETTER K, LATIN CAPITAL LETTER K, <none>, <none>, <none>\n27 L 1 l L -1 -1 -1 // LATIN SMALL LETTER L, LATIN CAPITAL LETTER L, <none>, <none>, <none>\n28 OEM_1 4 003b 003a -1 00f1 00d1 // SEMICOLON, COLON, <none>, LATIN SMALL LETTER N WITH TILDE, LATIN CAPITAL LETTER N WITH TILDE\n29 OEM_2 0 003f 0021 -1 00ba 00aa // QUESTION MARK, EXCLAMATION MARK, <none>, MASCULINE ORDINAL INDICATOR, FEMININE ORDINAL INDICATOR\n2b OEM_5 4 007c 0024 -1 00e7 00c7 // VERTICAL LINE, DOLLAR SIGN, <none>, LATIN SMALL LETTER C WITH CEDILLA, LATIN CAPITAL LETTER C WITH CEDILLA\n2c Z 1 z Z -1 -1 -1 // LATIN SMALL LETTER Z, LATIN CAPITAL LETTER Z, <none>, <none>, <none>\n2d X 1 x X -1 -1 -1 // LATIN SMALL LETTER X, LATIN CAPITAL LETTER X, <none>, <none>, <none>\n2e C 1 c C -1 -1 -1 // LATIN SMALL LETTER C, LATIN CAPITAL LETTER C, <none>, <none>, <none>\n2f V 1 v V -1 -1 -1 // LATIN SMALL LETTER V, LATIN CAPITAL LETTER V, <none>, <none>, <none>\n30 B 1 b B -1 -1 -1 // LATIN SMALL LETTER B, LATIN CAPITAL LETTER B, <none>, <none>, <none>\n31 OEM_3 0 007e 0026 -1 -1 -1 // TILDE, AMPERSAND, <none>, <none>, <none>\n32 N 1 n N -1 -1 -1 // LATIN SMALL LETTER N, LATIN CAPITAL LETTER N, <none>, <none>, <none>\n33 M 1 m M -1 -1 -1 // LATIN SMALL LETTER M, LATIN CAPITAL LETTER M, <none>, <none>, <none>\n34 OEM_COMMA 0 002c 0023 -1 -1 -1 // COMMA, NUMBER SIGN, <none>, <none>, <none>\n35 OEM_PERIOD 0 002e 002a -1 -1 -1 // FULL STOP, ASTERISK, <none>, <none>, <none>\n39 SPACE 0 0020 0020 -1 -1 -1 // SPACE, SPACE, <none>, <none>, <none>\n53 DECIMAL 0 002e 002e -1 -1 -1 // FULL STOP, FULL STOP, , , \n\n\nDEADKEY 00a8\n\n0061 00e4 // a -> \xc3\xa4\n0065 00eb // e -> \xc3\xab\n0069 00ef // i -> \xc3\xaf\n006f 00f6 // o -> \xc3\xb6\n0075 00fc // u -> \xc3\xbc\n0041 00c4 // A -> \xc3\x84\n0045 00cb // E -> \xc3\x8b\n0049 00cf // I -> \xc3\x8f\n004f 00d6 // O -> \xc3\x96\n0055 00dc // U -> \xc3\x9c\n0079 00ff // y -> \xc3\xbf\n0020 00a8 // -> \xc2\xa8\n\nDEADKEY 00b4\n\n0061 00e1 // a -> \xc3\xa1\n0065 00e9 // e -> \xc3\xa9\n0069 00ed // i -> \xc3\xad\n006f 00f3 // o -> \xc3\xb3\n0075 00fa // u -> \xc3\xba\n0079 00fd // y -> \xc3\xbd\n0041 00c1 // A -> \xc3\x81\n0045 00c9 // E -> \xc3\x89\n0049 00cd // I -> \xc3\x8d\n004f 00d3 // O -> \xc3\x93\n0055 00da // U -> \xc3\x9a\n0059 00dd // Y -> \xc3\x9d\n0020 00b4 // -> \xc2\xb4\n\n\nKEYNAME\n\n01 Esc\n0e Backspace\n0f Tab\n1c Enter\n1d Ctrl\n2a Shift\n36 "Right Shift"\n37 "Num *"\n38 Alt\n39 Space\n3a "Caps Lock"\n3b F1\n3c F2\n3d F3\n3e F4\n3f F5\n40 F6\n41 F7\n42 F8\n43 F9\n44 F10\n45 Pause\n46 "Scroll Lock"\n47 "Num 7"\n48 "Num 8"\n49 "Num 9"\n4a "Num -"\n4b "Num 4"\n4c "Num 5"\n4d "Num 6"\n4e "Num +"\n4f "Num 1"\n50 "Num 2"\n51 "Num 3"\n52 "Num 0"\n53 "Num Del"\n54 "Sys Req"\n57 F11\n58 F12\n7c F13\n7d F14\n7e F15\n7f F16\n80 F17\n81 F18\n82 F19\n83 F20\n84 F21\n85 F22\n86 F23\n87 F24\n\nKEYNAME_EXT\n\n1c "Num Enter"\n1d "Right Ctrl"\n35 "Num /"\n37 "Prnt Scrn"\n38 "Right Alt"\n45 "Num Lock"\n46 Break\n47 Home\n48 Up\n49 "Page Up"\n4b Left\n4d Right\n4f End\n50 Down\n51 "Page Down"\n52 Insert\n53 Delete\n54 <00>\n56 Help\n5b "Left Windows"\n5c "Right Windows"\n5d Application\n\nKEYNAME_DEAD\n\n00a8 "DIAERESIS"\n00b4 "ACUTE ACCENT"\n\n\nDESCRIPTIONS\n\n0409 WindThunder VK code changed - Simplified Chinese\n\nLANGUAGENAMES\n\n0409 Chinese (People\'s Republic of China)\n\nENDKBD\n
Run Code Online (Sandbox Code Playgroud)\n\n请参阅下面包含 的行layout
。你说的是一个表格,其中包含按键及其 VK 代码的映射行以及按下它们时我们得到的字符输出。我们想做的是改变第二列,VK_
以使其适应角色,或者根据您的意愿更改它们。验证错误(如果有)将在稍后显示,因此不必担心犯错误。
在此更改版本之前,该行:
\n\n19 O 1 o O -1 -1 -1 // LATIN SMALL LETTER O, LATIN CAPITAL LETTER O, <none>, <none>, <none>\n
Run Code Online (Sandbox Code Playgroud)\n\n曾是:
\n\n19 P 1 o O -1 -1 -1 // LATIN SMALL LETTER O, LATIN CAPITAL LETTER O, <none>, <none>, <none>\n
Run Code Online (Sandbox Code Playgroud)\n\n因此,在我的布局中的位置O
,它被解释为VK_P
,这就是我收到打印提示的原因。
完整的值列表VK_
如下: