在AutoHotkey (AHK) 中,SCnnn
和 VKnn
是用来表示按键代码的两种不同方式,它们分别代表不同的按键扫描码和虚拟键码。选择使用哪一种取决于你的具体需求和使用场景。
问问 kimi
SCnnn(Scan Code)
定义 :SCnnn
代表按键的扫描码(Scan Code),这是直接从键盘硬件读取的原始代码,与键盘的物理布局直接相关。
优点 :
在不同的键盘布局下,相同的物理按键会有不同的扫描码,因此使用扫描码可以确保按键行为与用户的键盘布局一致。
对于需要精确控制键盘硬件的行为(如键盘制造商或开发者)来说,扫描码更为直接和准确。
缺点 :
如果你的脚本需要在不同的键盘布局之间移植,使用扫描码可能会导致问题,因为不同布局下的相同按键可能有不同的扫描码。
VKnn(Virtual-Key Code)
定义 :VKnn
代表虚拟键码(Virtual-Key Code),这是操作系统层面的按键代码,与键盘的逻辑布局相关,而不是物理布局。
优点 :
虚拟键码与键盘的逻辑布局相关,这意味着无论物理键盘如何变化,只要逻辑布局(如语言设置)保持不变,虚拟键码就会保持一致。
对于大多数日常使用和跨平台兼容性来说,虚拟键码更加方便和可靠。
缺点 :
如果你需要控制特定的硬件行为或者处理低级键盘事件,虚拟键码可能不如扫描码直接。
推荐使用
对于大多数AutoHotkey用户和脚本来说,推荐使用 VKnn
(虚拟键码):
跨平台兼容性 :如果你的脚本需要在不同的操作系统或键盘布局之间运行,使用虚拟键码可以提供更好的兼容性。
易用性 :AutoHotkey 提供了许多预定义的 VK
常量(如VK_F1
、VK_F2
等),使得脚本编写更加直观和方便。
大多数用途 :对于大多数日常用途,包括快捷键、宏和自动化任务,虚拟键码已经足够使用。
总结来说,除非你有特定的理由需要使用扫描码(如硬件级别的键盘控制),否则在 AutoHotkey 中使用虚拟键码(VKnn
)是更推荐的做法。
按键列表
以 Home 按键为例,两者的 vk 虚拟码相同,但是 sc 扫描码不相同表示虚拟按键的功能,sc 表示物理按键的位置。
1 2 3 vk sc 24 147 Home 24 047 NumpadHome
举例为
1 ^VK24:: MsgBox "You pressed Home or NumpadHome while holding down Control."
以 1 按键为例,两者由于是同一物理位置,所以 sc 物理码一致,但是 vk 虚拟码不同,表示按键功能不同
1 2 3 vk sc 61 04F Numpad1 23 04F NumpadEnd
详细列表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 VK SC Type ------------------------------------------------------------------------------------------------------------- 1B 001 Escape 70 03B F1 71 03C F2 72 03D F3 73 03E F4 74 03F F5 75 040 F6 76 041 F7 77 042 F8 78 043 F9 79 044 F10 7A 057 F11 7B 058 F12 C0 029 ` 31 002 1 32 003 2 33 004 3 34 005 4 35 006 5 36 007 6 37 008 7 38 009 8 39 00A 9 30 00B 0 BD 00C - BB 00D = 08 00E Backspace 51 010 q 57 011 w 45 012 e 52 013 r 54 014 t 59 015 y 55 016 u 49 017 i 4F 018 o 50 019 p 41 01E a 53 01F s 44 020 d 46 021 f 47 022 g 48 023 h 4A 024 j 4B 025 k 4C 026 l 5A 02C z 58 02D x 43 02E c 56 02F v 42 030 b 4E 031 n 4D 032 m 14 03A CapsLock A0 02A LShift A2 01D LControl 5B 15B LWin A4 038 LAlt A5 138 RAlt 5C 15C RWin 5D 15D AppsKey A3 11D RControl A1 136 RShift 09 00F Tab 制表符 0D 01C Enter 回车符/回车键 DB 01A [ DD 01B ] DC 02B \ BA 027 ; DE 028 ' BC 033 , BE 034 . BF 035 / 20 039 Space # 以上总计 74 键 # 中间区域 13 个键,累计为 87 键 printscreen 竟然不识别 91 046 ScrollLock 13 045 Pause 2D 152 Insert 24 147 Home 21 149 PgUp 2E 153 Delete 23 14F End 22 151 PgDn 26 148 Up 25 14B Left 28 150 Down 27 14D Right # 数字区 共计 17 个,累计为 105 键 90 145 Numlock 6F 135 NumpadDiv 6A 037 NumpadMult 6D 04A NumpadSub 6B 04E NumpadAdd 0D 11C NumpadEnter 61 04F Numpad1 62 050 Numpad2 63 051 Numpad3 64 04B Numpad4 65 04C Numpad5 66 04D Numpad6 67 047 Numpad7 68 048 Numpad8 69 049 Numpad9 60 052 Numpad0 6E 053 NumpadDot # 当数字键没被激活时 23 04F NumpadEnd 28 050 NumpadDown 22 051 NumpadPgDn 25 04B NumpadLeft 0C 04C NumpadClear 27 04D NumpadRight 24 047 NumpadHome 26 048 NumpadUp 21 049 NumpadPgUp 2D 052 NumpadIns 2E 053 NumpadDel
按照 scan 扫描码排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 VK SC Type ------------------------------------------------------------------------------------------------------------- 1B 001 Escape 31 002 1 32 003 2 33 004 3 34 005 4 35 006 5 36 007 6 37 008 7 38 009 8 39 00A 9 30 00B 0 BD 00C - BB 00D = 08 00E Backspace 09 00F Tab 制表符 51 010 q 57 011 w 45 012 e 52 013 r 54 014 t 59 015 y 55 016 u 49 017 i 4F 018 o 50 019 p DB 01A [ DD 01B ] 0D 01C Enter 回车符/回车键 A2 01D LControl 41 01E a 53 01F s 44 020 d 46 021 f 47 022 g 48 023 h 4A 024 j 4B 025 k 4C 026 l BA 027 ; DE 028 ' C0 029 ` A0 02A LShift DC 02B \ 5A 02C z 58 02D x 43 02E c 56 02F v 42 030 b 4E 031 n 4D 032 m BC 033 , BE 034 . BF 035 / 6A 037 NumpadMult A4 038 LAlt 20 039 Space 14 03A CapsLock 70 03B F1 71 03C F2 72 03D F3 73 03E F4 74 03F F5 75 040 F6 76 041 F7 77 042 F8 78 043 F9 79 044 F10 13 045 Pause 91 046 ScrollLock 24 047 NumpadHome 67 047 Numpad7 26 048 NumpadUp 68 048 Numpad8 21 049 NumpadPgUp 69 049 Numpad9 6D 04A NumpadSub 25 04B NumpadLeft 64 04B Numpad4 0C 04C NumpadClear 65 04C Numpad5 27 04D NumpadRight 66 04D Numpad6 6B 04E NumpadAdd 23 04F NumpadEnd 61 04F Numpad1 28 050 NumpadDown 62 050 Numpad2 22 051 NumpadPgDn 63 051 Numpad3 2D 052 NumpadIns 60 052 Numpad0 2E 053 NumpadDel 6E 053 NumpadDot 7A 057 F11 7B 058 F12 0D 11C NumpadEnter A3 11D RControl 6F 135 NumpadDiv A1 136 RShift A5 138 RAlt 90 145 Numlock 24 147 Home 26 148 Up 21 149 PgUp 25 14B Left 27 14D Right 23 14F End 28 150 Down 22 151 PgDn 2D 152 Insert 2E 153 Delete 5B 15B LWin 5C 15C RWin 5D 15D AppsKey
按照 虚拟键码(VKnn
)排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 VK SC Type ------------------------------------------------------------------------------------------------------------- 08 00E Backspace 09 00F Tab 制表符 0C 04C NumpadClear 0D 01C Enter 回车符/回车键 13 045 Pause 14 03A CapsLock 1B 001 Escape 20 039 Space 21 049 NumpadPgUp 21 149 PgUp 22 051 NumpadPgDn 22 151 PgDn 23 14F End 23 04F NumpadEnd 24 147 Home 24 047 NumpadHome 25 14B Left 25 04B NumpadLeft 26 148 Up 26 048 NumpadUp 27 14D Right 27 04D NumpadRight 28 150 Down 28 050 NumpadDown 2D 152 Insert 2D 052 NumpadIns 2E 153 Delete 2E 053 NumpadDel 31 002 1 32 003 2 33 004 3 34 005 4 35 006 5 36 007 6 37 008 7 38 009 8 39 00A 9 30 00B 0 41 01E a 42 030 b 43 02E c 44 020 d 45 012 e 46 021 f 47 022 g 48 023 h 49 017 i 4A 024 j 4B 025 k 4C 026 l 4D 032 m 4E 031 n 4F 018 o 50 019 p 51 010 q 52 013 r 53 01F s 54 014 t 56 02F v 57 011 w 55 016 u 58 02D x 59 015 y 5A 02C z 5B 15B LWin 5C 15C RWin 5D 15D AppsKey 60 052 Numpad0 61 04F Numpad1 62 050 Numpad2 63 051 Numpad3 64 04B Numpad4 65 04C Numpad5 66 04D Numpad6 67 047 Numpad7 68 048 Numpad8 69 049 Numpad9 6A 037 NumpadMult 6B 04E NumpadAdd 6D 04A NumpadSub 0D 11C NumpadEnter 6F 135 NumpadDiv 6E 053 NumpadDot 70 03B F1 71 03C F2 72 03D F3 73 03E F4 74 03F F5 75 040 F6 76 041 F7 77 042 F8 78 043 F9 79 044 F10 7A 057 F11 7B 058 F12 90 145 Numlock 91 046 ScrollLock A0 02A LShift A1 136 RShift A2 01D LControl A3 11D RControl A4 038 LAlt A5 138 RAlt BA 027 ; BB 00D = BC 033 , BD 00C - BE 034 . BF 035 / C0 029 ` DB 01A [ DC 02B \ DD 01B ] DE 028 '