SharpKeys扫描码大全:常见键盘键位对应的十六进制值
引言:键盘键位重映射的痛点与解决方案
你是否曾因键盘布局不符合使用习惯而困扰?想要将Caps Lock键改为Ctrl键,却不知从何下手?SharpKeys作为一款强大的Windows键位重映射工具,通过修改Windows注册表(Registry)中的Scancode Map项,实现将一个键位映射为另一个键位的功能。本文将详细介绍SharpKeys中常见键盘键位对应的十六进制扫描码(Scan Code),帮助你轻松实现个性化键位配置。
读完本文,你将能够:
- 了解扫描码(Scan Code)的基本概念及在键位映射中的作用
- 掌握常见键盘键位对应的十六进制扫描码
- 学会如何使用扫描码进行键位映射配置
- 避免在配置过程中常见的扫描码使用错误
扫描码基础:从键位到十六进制值的转换
什么是扫描码(Scan Code)?
扫描码(Scan Code)是键盘发送给计算机的二进制数据,用于标识哪个键被按下或释放。在Windows系统中,扫描码通常以十六进制(Hexadecimal)形式表示,SharpKeys正是通过修改这些扫描码的映射关系来实现键位重映射的。
扫描码的两种格式
在SharpKeys中,扫描码主要有两种格式:
- 标准扫描码:格式为
00_XX,其中XX为两位十六进制数,用于表示普通键位。 - 扩展扫描码:格式为
E0_XX,其中XX为两位十六进制数,用于表示扩展键位(如右侧Ctrl键、Windows键等)。
// SharpKeys中扫描码格式转换代码示例
if (nCode > 0x0100)
strCode = string.Format("E0_{0,2:X}", (nCode - 0x0100));
else
strCode = string.Format("00_{0,2:X}", nCode);
strCode = strCode.Replace(" ", "0");
扫描码在注册表中的存储方式
在Windows注册表中,扫描码映射存储在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout路径下的Scancode Map值中。其数据格式如下:
- 前8字节:固定为
00 00 00 00 00 00 00 00 - 第9字节:映射数量(包括结尾的空映射)
- 后续每4字节表示一个映射:前2字节为目标扫描码,后2字节为源扫描码
- 最后4字节:固定为
00 00 00 00(空映射结束标志)
// 从注册表加载扫描码映射的代码示例
// 跳过前8字节,第9字节为映射总数
if (bytes.Length > 8)
{
int nTotal = Int32.Parse(bytes[8].ToString());
for (int i = 0; i < nTotal - 1; i++)
{
// 扫描码存储格式:ToHi ToLo FromHi FromLo
String strFromCode = string.Format("{0,2:X}_{1,2:X}", bytes[(i * 4) + 12 + 3], bytes[(i * 4) + 12 + 2]);
String strToCode = string.Format("{0,2:X}_{1,2:X}", bytes[(i * 4) + 12 + 1], bytes[(i * 4) + 12 + 0]);
// ...
}
}
完整扫描码对照表:常见键位与十六进制值
字母键扫描码
| 键位 | 扫描码 | 十六进制值 | 描述 |
|---|---|---|---|
| A | 00_1E | 0x001E | 字母A键 |
| B | 00_30 | 0x0030 | 字母B键 |
| C | 00_2E | 0x002E | 字母C键 |
| D | 00_20 | 0x0020 | 字母D键 |
| E | 00_12 | 0x0012 | 字母E键 |
| F | 00_21 | 0x0021 | 字母F键 |
| G | 00_22 | 0x0022 | 字母G键 |
| H | 00_23 | 0x0023 | 字母H键 |
| I | 00_17 | 0x0017 | 字母I键 |
| J | 00_24 | 0x0024 | 字母J键 |
| K | 00_25 | 0x0025 | 字母K键 |
| L | 00_26 | 0x0026 | 字母L键 |
| M | 00_32 | 0x0032 | 字母M键 |
| N | 00_31 | 0x0031 | 字母N键 |
| O | 00_18 | 0x0018 | 字母O键 |
| P | 00_19 | 0x0019 | 字母P键 |
| Q | 00_10 | 0x0010 | 字母Q键 |
| R | 00_13 | 0x0013 | 字母R键 |
| S | 00_1F | 0x001F | 字母S键 |
| T | 00_14 | 0x0014 | 字母T键 |
| U | 00_16 | 0x0016 | 字母U键 |
| V | 00_2F | 0x002F | 字母V键 |
| W | 00_11 | 0x0011 | 字母W键 |
| X | 00_2D | 0x002D | 字母X键 |
| Y | 00_15 | 0x0015 | 字母Y键 |
| Z | 00_2C | 0x002C | 字母Z键 |
数字键扫描码
| 键位 | 扫描码 | 十六进制值 | 描述 |
|---|---|---|---|
| 0 | 00_0B | 0x000B | 数字0键 |
| 1 | 00_02 | 0x0002 | 数字1键 |
| 2 | 00_03 | 0x0003 | 数字2键 |
| 3 | 00_04 | 0x0004 | 数字3键 |
| 4 | 00_05 | 0x0005 | 数字4键 |
| 5 | 00_06 | 0x0006 | 数字5键 |
| 6 | 00_07 | 0x0007 | 数字6键 |
| 7 | 00_08 | 0x0008 | 数字7键 |
| 8 | 00_09 | 0x0009 | 数字8键 |
| 9 | 00_0A | 0x000A | 数字9键 |
| Num 0 | E0_52 | 0xE052 | 小键盘0键 |
| Num 1 | E0_4F | 0xE04F | 小键盘1键 |
| Num 2 | E0_50 | 0xE050 | 小键盘2键 |
| Num 3 | E0_51 | 0xE051 | 小键盘3键 |
| Num 4 | E0_4B | 0xE04B | 小键盘4键 |
| Num 5 | E0_4C | 0xE04C | 小键盘5键 |
| Num 6 | E0_4D | 0xE04D | 小键盘6键 |
| Num 7 | E0_47 | 0xE047 | 小键盘7键 |
| Num 8 | E0_48 | 0xE048 | 小键盘8键 |
| Num 9 | E0_49 | 0xE049 | 小键盘9键 |
功能键扫描码
| 键位 | 扫描码 | 十六进制值 | 描述 |
|---|---|---|---|
| F1 | 00_3B | 0x003B | 功能键F1 |
| F2 | 00_3C | 0x003C | 功能键F2 |
| F3 | 00_3D | 0x003D | 功能键F3 |
| F4 | 00_3E | 0x003E | 功能键F4 |
| F5 | 00_3F | 0x003F | 功能键F5 |
| F6 | 00_40 | 0x0040 | 功能键F6 |
| F7 | 00_41 | 0x0041 | 功能键F7 |
| F8 | 00_42 | 0x0042 | 功能键F8 |
| F9 | 00_43 | 0x0043 | 功能键F9 |
| F10 | 00_44 | 0x0044 | 功能键F10 |
| F11 | 00_57 | 0x0057 | 功能键F11 |
| F12 | 00_58 | 0x0058 | 功能键F12 |
| F13 | E0_64 | 0xE064 | 功能键F13 |
| F14 | E0_65 | 0xE065 | 功能键F14 |
| F15 | E0_66 | 0xE066 | 功能键F15 |
| F16 | E0_67 | 0xE067 | 功能键F16 |
| F17 | E0_68 | 0xE068 | 功能键F17 |
| F18 | E0_69 | 0xE069 | 功能键F18 |
| F19 | E0_6A | 0xE06A | 功能键F19 |
| F20 | E0_6B | 0xE06B | 功能键F20 |
控制键扫描码
| 键位 | 扫描码 | 十六进制值 | 描述 |
|---|---|---|---|
| Enter | 00_1C | 0x001C | 回车键 |
| Backspace | 00_0E | 0x000E | 退格键 |
| Tab | 00_0F | 0x000F | Tab键 |
| Caps Lock | 00_3A | 0x003A | 大小写锁定键 |
| Shift (左) | 00_2A | 0x002A | 左Shift键 |
| Shift (右) | 00_36 | 0x0036 | 右Shift键 |
| Ctrl (左) | 00_1D | 0x001D | 左Ctrl键 |
| Ctrl (右) | E0_1D | 0xE01D | 右Ctrl键 |
| Alt (左) | 00_38 | 0x0038 | 左Alt键 |
| Alt (右) | E0_38 | 0xE038 | 右Alt键 |
| Windows (左) | E0_5B | 0xE05B | 左Windows键 |
| Windows (右) | E0_5C | 0xE05C | 右Windows键 |
| Menu | E0_5D | 0xE05D | 菜单键 |
| Esc | 00_01 | 0x0001 | 退出键 |
| Space | 00_39 | 0x0039 | 空格键 |
编辑键扫描码
| 键位 | 扫描码 | 十六进制值 | 描述 |
|---|---|---|---|
| Insert | E0_52 | 0xE052 | 插入键 |
| Delete | E0_53 | 0xE053 | 删除键 |
| Home | E0_47 | 0xE047 | Home键 |
| End | E0_4F | 0xE04F | End键 |
| Page Up | E0_49 | 0xE049 | Page Up键 |
| Page Down | E0_51 | 0xE051 | Page Down键 |
| ↑ | E0_48 | 0xE048 | 上方向键 |
| ↓ | E0_50 | 0xE050 | 下方向键 |
| ← | E0_4B | 0xE04B | 左方向键 |
| → | E0_4D | 0xE04D | 右方向键 |
小键盘控制键扫描码
| 键位 | 扫描码 | 十六进制值 | 描述 |
|---|---|---|---|
| Num Lock | 00_45 | 0x0045 | 小键盘锁定键 |
| Scroll Lock | 00_46 | 0x0046 | 滚动锁定键 |
| Print Screen | E0_37 | 0xE037 | 打印屏幕键 |
| Pause | 00_45 | 0x0045 | 暂停键 |
| Num / | E0_35 | 0xE035 | 小键盘除号 |
| Num * | 00_37 | 0x0037 | 小键盘乘号 |
| Num - | 00_4A | 0x004A | 小键盘减号 |
| Num + | 00_4E | 0x004E | 小键盘加号 |
| Num Enter | E0_1C | 0xE01C | 小键盘回车键 |
| Num . | E0_53 | 0xE053 | 小键盘小数点 |
符号键扫描码
| 键位 | 扫描码 | 十六进制值 | 描述 | |
|---|---|---|---|---|
| ` ~ | 00_29 | 0x0029 | 反引号/波浪线键 | |
| ! @ | 00_02 | 0x0002 | 感叹号/at符号键 | |
| # $ | 00_03 | 0x0003 | 井号/美元符号键 | |
| % ^ | 00_04 | 0x0004 | 百分号/脱字符键 | |
| & * | 00_05 | 0x0005 | 和号/星号键 | |
| ( ) | 00_06 | 0x0006 | 左括号/右括号键 | |
| - _ | 00_0C | 0x000C | 减号/下划线键 | |
| = + | 00_0D | 0x000D | 等号/加号键 | |
| [ { | 00_1A | 0x001A | 左方括号/左花括号键 | |
| ] } | 00_1B | 0x001B | 右方括号/右花括号键 | |
| \ | 00_2B | 0x002B | 反斜杠/竖线键 | |
| ; : | 00_27 | 0x0027 | 分号/冒号键 | |
| ' " | 00_28 | 0x0028 | 单引号/双引号键 | |
| , < | 00_33 | 0x0033 | 逗号/小于号键 | |
| . > | 00_34 | 0x0034 | 句号/大于号键 | |
| / ? | 00_35 | 0x0035 | 斜杠/问号键 |
扫描码使用实战:从理论到实践
扫描码映射流程图
常见扫描码映射示例
示例1:将Caps Lock键映射为Ctrl键
Caps Lock键扫描码:00_3A(0x003A) 左Ctrl键扫描码:00_1D(0x001D)
映射配置:
- 源键位:Caps Lock (00_3A)
- 目标键位:Ctrl (00_1D)
注册表中的数据:
00 00 00 00 00 00 00 00 02 00 00 00 1D 00 3A 00 00 00 00 00
示例2:禁用右Windows键
右Windows键扫描码:E0_5C(0xE05C) 禁用扫描码:00_00(0x0000)
映射配置:
- 源键位:Right Windows (E0_5C)
- 目标键位:Disabled (00_00)
注册表中的数据:
00 00 00 00 00 00 00 00 02 00 00 00 00 00 5C E0 00 00 00 00
示例3:交换左右Alt键
左Alt键扫描码:00_38(0x0038) 右Alt键扫描码:E0_38(0xE038)
映射配置:
- 源键位:Left Alt (00_38) → 目标键位:Right Alt (E0_38)
- 源键位:Right Alt (E0_38) → 目标键位:Left Alt (00_38)
注册表中的数据:
00 00 00 00 00 00 00 00 03 00 00 00 38 E0 38 00 38 00 38 E0 00 00 00 00
扫描码使用注意事项
-
区分标准扫描码和扩展扫描码:
- 标准扫描码以
00_开头,扩展扫描码以E0_开头 - 同一物理键位的左右键可能有不同的扫描码(如左右Shift键)
- 标准扫描码以
-
避免循环映射:
- 不要创建A→B且B→A的循环映射,这会导致两个键都无法正常工作
-
禁用键位的正确方法:
- 要禁用某个键位,应将其映射到
00_00(0x0000),而非删除该键位
- 要禁用某个键位,应将其映射到
-
系统键位的特殊处理:
- 某些系统键位(如Ctrl+Alt+Del)无法通过扫描码映射修改
- Windows键的映射可能需要额外的组策略设置
-
修改后的生效方式:
- 修改扫描码映射后,需要注销或重启系统才能生效
- 可以通过SharpKeys的"Write to Registry"按钮应用更改
扫描码查找与验证工具
SharpKeys内置了键位扫描功能,可以帮助你获取任何键位的扫描码:
- 打开SharpKeys,点击"Add"按钮
- 在弹出的窗口中,点击"Type Key"按钮
- 按下想要查询的键位
- 系统会显示该键位对应的扫描码
// 键位扫描功能核心代码
private void Dialog_KeyPress_KeyDown(object sender, KeyEventArgs e)
{
if (m_bCapturing)
{
int nCode = e.KeyValue;
// 处理扩展键位
if (nCode > 0x0100)
strCode = string.Format("E0_{0,2:X}", (nCode - 0x0100));
else
strCode = string.Format("00_{0,2:X}", nCode);
strCode = strCode.Replace(" ", "0");
// 显示键位信息
lblKey.Text = string.Format("{0} ({1})", (string)m_hashKeys[strCode], strCode);
m_strCode = strCode;
m_bCapturing = false;
}
}
高级应用:扫描码映射的自动化与管理
扫描码映射文件的导入导出
SharpKeys支持将扫描码映射配置保存为.skl文件,便于备份和迁移:
HandyRemapForSurfaceKeyboard.skl - SharpKeys配置文件示例
导出配置:
- 在SharpKeys主窗口中,点击"Save keys..."按钮
- 选择保存路径和文件名
- 点击"保存"按钮
导入配置:
- 在SharpKeys主窗口中,点击"Load keys..."按钮
- 选择要导入的
.skl文件 - 点击"打开"按钮
批量管理扫描码映射
对于高级用户,可以通过直接编辑注册表文件(.reg)来批量管理扫描码映射:
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,00,00,5c,e0,\
00,00,00,00
上述注册表文件实现了两个映射:
- 将Caps Lock键(00_3A)映射为Ctrl键(00_1D)
- 禁用右Windows键(E0_5C)
常见键盘布局的扫描码差异
不同品牌和型号的键盘可能存在扫描码差异,特别是对于一些特殊键位:
-
笔记本电脑的特殊功能键:
- 通常以
E0_XX或E1_XX格式的扩展扫描码实现 - 可能需要通过官方驱动或工具进行额外配置
- 通常以
-
机械键盘的编程键:
- 部分机械键盘的编程键有独立的扫描码
- 可能需要在键盘固件和Windows扫描码映射中双重配置
-
多媒体键盘的媒体控制键:
- 媒体控制键通常使用
E0_XX格式的扩展扫描码 - 常见媒体键扫描码:
- 播放/暂停:
E0_22(0xE022) - 停止:
E0_24(0xE024) - 上一曲:
E0_10(0xE010) - 下一曲:
E0_19(0xE019) - 音量加:
E0_32(0xE032) - 音量减:
E0_2E(0xE02E) - 静音:
E0_20(0xE020)
- 播放/暂停:
- 媒体控制键通常使用
常见问题与解决方案
问题1:修改后键位无变化
可能原因:
- 未注销或重启系统
- 扫描码映射配置错误
- 存在冲突的映射关系
- 该键位受系统保护,无法修改
解决方案:
- 确保已注销并重新登录
- 检查扫描码是否正确,特别是区分标准码和扩展码
- 检查是否存在冲突的映射,使用"Delete All"清除所有映射后重新配置
- 尝试使用其他方法修改该键位(如键盘厂商提供的专用工具)
问题2:映射后键位功能异常
可能原因:
- 选择了错误的目标扫描码
- 同时使用了多个键位映射工具,导致冲突
- 某些应用程序会覆盖系统级的键位映射
解决方案:
- 验证目标键位的扫描码是否正确
- 关闭或卸载其他键位映射工具
- 在相关应用程序中检查快捷键设置,避免冲突
- 尝试将有问题的映射单独配置,排除干扰因素
问题3:无法保存映射到注册表
可能原因:
- 当前用户没有管理员权限
- 注册表项权限设置问题
- 系统策略限制了注册表修改
解决方案:
- 以管理员身份运行SharpKeys
- 检查注册表项
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout的权限设置 - 修改组策略或安全策略,允许注册表编辑
- 手动导入注册表文件(需要管理员权限)
总结与展望
本文要点回顾
- 扫描码是键盘与计算机通信的二进制数据,在SharpKeys中以十六进制形式表示
- 扫描码分为标准扫描码(00_XX)和扩展扫描码(E0_XX)两种格式
- 本文提供了完整的常见键位扫描码对照表,涵盖字母、数字、功能键等各类键位
- 扫描码映射需要注意避免循环映射,禁用键位应映射到00_00
- 修改扫描码映射后需注销或重启系统才能生效
扫描码技术的发展趋势
随着键盘技术的发展,扫描码体系也在不断演进:
- USB HID扫描码:现代USB键盘采用HID(Human Interface Device)协议,扫描码定义更加标准化
- 可编程键盘的固件扫描码:高端机械键盘支持在固件层自定义扫描码,提供更灵活的键位配置
- 操作系统级的扫描码处理:Windows 10/11引入了更多扫描码相关的API,支持更精细的键位控制
扩展学习资源
-
官方文档:
- Microsoft Docs: Keyboard Scan Codes
- SharpKeys GitHub Wiki: https://github.com/randyrants/sharpkeys/wiki
-
工具推荐:
- KeyCodes: 实时显示键位扫描码的工具
- Registry Workshop: 高级注册表编辑工具
- AutoHotkey: 功能强大的自动化脚本工具,可与扫描码配合使用
-
社区资源:
- 键盘爱好者论坛:讨论扫描码映射的最佳实践
- GitHub上的扫描码映射配置分享:提供各类键盘的优化配置
通过掌握扫描码知识,你可以充分发挥SharpKeys的强大功能,打造完全符合个人习惯的键盘布局。无论是程序员、文字工作者还是普通用户,个性化的键位配置都能显著提升工作效率和使用体验。
提示:建议将本文收藏,作为日后进行键位映射配置时的参考手册。如有任何问题或发现错误,欢迎在评论区留言反馈!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



