SharpKeys扫描码大全:常见键盘键位对应的十六进制值

SharpKeys扫描码大全:常见键盘键位对应的十六进制值

【免费下载链接】sharpkeys SharpKeys is a utility that manages a Registry key that allows Windows to remap one key to any other key. 【免费下载链接】sharpkeys 项目地址: https://gitcode.com/gh_mirrors/sh/sharpkeys

引言:键盘键位重映射的痛点与解决方案

你是否曾因键盘布局不符合使用习惯而困扰?想要将Caps Lock键改为Ctrl键,却不知从何下手?SharpKeys作为一款强大的Windows键位重映射工具,通过修改Windows注册表(Registry)中的Scancode Map项,实现将一个键位映射为另一个键位的功能。本文将详细介绍SharpKeys中常见键盘键位对应的十六进制扫描码(Scan Code),帮助你轻松实现个性化键位配置。

读完本文,你将能够:

  • 了解扫描码(Scan Code)的基本概念及在键位映射中的作用
  • 掌握常见键盘键位对应的十六进制扫描码
  • 学会如何使用扫描码进行键位映射配置
  • 避免在配置过程中常见的扫描码使用错误

扫描码基础:从键位到十六进制值的转换

什么是扫描码(Scan Code)?

扫描码(Scan Code)是键盘发送给计算机的二进制数据,用于标识哪个键被按下或释放。在Windows系统中,扫描码通常以十六进制(Hexadecimal)形式表示,SharpKeys正是通过修改这些扫描码的映射关系来实现键位重映射的。

扫描码的两种格式

在SharpKeys中,扫描码主要有两种格式:

  1. 标准扫描码:格式为00_XX,其中XX为两位十六进制数,用于表示普通键位。
  2. 扩展扫描码:格式为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]);
        // ...
    }
}

完整扫描码对照表:常见键位与十六进制值

字母键扫描码

键位扫描码十六进制值描述
A00_1E0x001E字母A键
B00_300x0030字母B键
C00_2E0x002E字母C键
D00_200x0020字母D键
E00_120x0012字母E键
F00_210x0021字母F键
G00_220x0022字母G键
H00_230x0023字母H键
I00_170x0017字母I键
J00_240x0024字母J键
K00_250x0025字母K键
L00_260x0026字母L键
M00_320x0032字母M键
N00_310x0031字母N键
O00_180x0018字母O键
P00_190x0019字母P键
Q00_100x0010字母Q键
R00_130x0013字母R键
S00_1F0x001F字母S键
T00_140x0014字母T键
U00_160x0016字母U键
V00_2F0x002F字母V键
W00_110x0011字母W键
X00_2D0x002D字母X键
Y00_150x0015字母Y键
Z00_2C0x002C字母Z键

数字键扫描码

键位扫描码十六进制值描述
000_0B0x000B数字0键
100_020x0002数字1键
200_030x0003数字2键
300_040x0004数字3键
400_050x0005数字4键
500_060x0006数字5键
600_070x0007数字6键
700_080x0008数字7键
800_090x0009数字8键
900_0A0x000A数字9键
Num 0E0_520xE052小键盘0键
Num 1E0_4F0xE04F小键盘1键
Num 2E0_500xE050小键盘2键
Num 3E0_510xE051小键盘3键
Num 4E0_4B0xE04B小键盘4键
Num 5E0_4C0xE04C小键盘5键
Num 6E0_4D0xE04D小键盘6键
Num 7E0_470xE047小键盘7键
Num 8E0_480xE048小键盘8键
Num 9E0_490xE049小键盘9键

功能键扫描码

键位扫描码十六进制值描述
F100_3B0x003B功能键F1
F200_3C0x003C功能键F2
F300_3D0x003D功能键F3
F400_3E0x003E功能键F4
F500_3F0x003F功能键F5
F600_400x0040功能键F6
F700_410x0041功能键F7
F800_420x0042功能键F8
F900_430x0043功能键F9
F1000_440x0044功能键F10
F1100_570x0057功能键F11
F1200_580x0058功能键F12
F13E0_640xE064功能键F13
F14E0_650xE065功能键F14
F15E0_660xE066功能键F15
F16E0_670xE067功能键F16
F17E0_680xE068功能键F17
F18E0_690xE069功能键F18
F19E0_6A0xE06A功能键F19
F20E0_6B0xE06B功能键F20

控制键扫描码

键位扫描码十六进制值描述
Enter00_1C0x001C回车键
Backspace00_0E0x000E退格键
Tab00_0F0x000FTab键
Caps Lock00_3A0x003A大小写锁定键
Shift (左)00_2A0x002A左Shift键
Shift (右)00_360x0036右Shift键
Ctrl (左)00_1D0x001D左Ctrl键
Ctrl (右)E0_1D0xE01D右Ctrl键
Alt (左)00_380x0038左Alt键
Alt (右)E0_380xE038右Alt键
Windows (左)E0_5B0xE05B左Windows键
Windows (右)E0_5C0xE05C右Windows键
MenuE0_5D0xE05D菜单键
Esc00_010x0001退出键
Space00_390x0039空格键

编辑键扫描码

键位扫描码十六进制值描述
InsertE0_520xE052插入键
DeleteE0_530xE053删除键
HomeE0_470xE047Home键
EndE0_4F0xE04FEnd键
Page UpE0_490xE049Page Up键
Page DownE0_510xE051Page Down键
E0_480xE048上方向键
E0_500xE050下方向键
E0_4B0xE04B左方向键
E0_4D0xE04D右方向键

小键盘控制键扫描码

键位扫描码十六进制值描述
Num Lock00_450x0045小键盘锁定键
Scroll Lock00_460x0046滚动锁定键
Print ScreenE0_370xE037打印屏幕键
Pause00_450x0045暂停键
Num /E0_350xE035小键盘除号
Num *00_370x0037小键盘乘号
Num -00_4A0x004A小键盘减号
Num +00_4E0x004E小键盘加号
Num EnterE0_1C0xE01C小键盘回车键
Num .E0_530xE053小键盘小数点

符号键扫描码

键位扫描码十六进制值描述
` ~00_290x0029反引号/波浪线键
! @00_020x0002感叹号/at符号键
# $00_030x0003井号/美元符号键
% ^00_040x0004百分号/脱字符键
& *00_050x0005和号/星号键
( )00_060x0006左括号/右括号键
- _00_0C0x000C减号/下划线键
= +00_0D0x000D等号/加号键
[ {00_1A0x001A左方括号/左花括号键
] }00_1B0x001B右方括号/右花括号键
\ 00_2B0x002B反斜杠/竖线键
; :00_270x0027分号/冒号键
' "00_280x0028单引号/双引号键
, <00_330x0033逗号/小于号键
. >00_340x0034句号/大于号键
/ ?00_350x0035斜杠/问号键

扫描码使用实战:从理论到实践

扫描码映射流程图

mermaid

常见扫描码映射示例

示例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

扫描码使用注意事项

  1. 区分标准扫描码和扩展扫描码

    • 标准扫描码以00_开头,扩展扫描码以E0_开头
    • 同一物理键位的左右键可能有不同的扫描码(如左右Shift键)
  2. 避免循环映射

    • 不要创建A→B且B→A的循环映射,这会导致两个键都无法正常工作
  3. 禁用键位的正确方法

    • 要禁用某个键位,应将其映射到00_00(0x0000),而非删除该键位
  4. 系统键位的特殊处理

    • 某些系统键位(如Ctrl+Alt+Del)无法通过扫描码映射修改
    • Windows键的映射可能需要额外的组策略设置
  5. 修改后的生效方式

    • 修改扫描码映射后,需要注销或重启系统才能生效
    • 可以通过SharpKeys的"Write to Registry"按钮应用更改

扫描码查找与验证工具

SharpKeys内置了键位扫描功能,可以帮助你获取任何键位的扫描码:

  1. 打开SharpKeys,点击"Add"按钮
  2. 在弹出的窗口中,点击"Type Key"按钮
  3. 按下想要查询的键位
  4. 系统会显示该键位对应的扫描码
// 键位扫描功能核心代码
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配置文件示例

导出配置:

  1. 在SharpKeys主窗口中,点击"Save keys..."按钮
  2. 选择保存路径和文件名
  3. 点击"保存"按钮

导入配置:

  1. 在SharpKeys主窗口中,点击"Load keys..."按钮
  2. 选择要导入的.skl文件
  3. 点击"打开"按钮

批量管理扫描码映射

对于高级用户,可以通过直接编辑注册表文件(.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

上述注册表文件实现了两个映射:

  1. 将Caps Lock键(00_3A)映射为Ctrl键(00_1D)
  2. 禁用右Windows键(E0_5C)

常见键盘布局的扫描码差异

不同品牌和型号的键盘可能存在扫描码差异,特别是对于一些特殊键位:

  1. 笔记本电脑的特殊功能键

    • 通常以E0_XXE1_XX格式的扩展扫描码实现
    • 可能需要通过官方驱动或工具进行额外配置
  2. 机械键盘的编程键

    • 部分机械键盘的编程键有独立的扫描码
    • 可能需要在键盘固件和Windows扫描码映射中双重配置
  3. 多媒体键盘的媒体控制键

    • 媒体控制键通常使用E0_XX格式的扩展扫描码
    • 常见媒体键扫描码:
      • 播放/暂停:E0_22(0xE022)
      • 停止:E0_24(0xE024)
      • 上一曲:E0_10(0xE010)
      • 下一曲:E0_19(0xE019)
      • 音量加:E0_32(0xE032)
      • 音量减:E0_2E(0xE02E)
      • 静音:E0_20(0xE020)

常见问题与解决方案

问题1:修改后键位无变化

可能原因

  • 未注销或重启系统
  • 扫描码映射配置错误
  • 存在冲突的映射关系
  • 该键位受系统保护,无法修改

解决方案

  1. 确保已注销并重新登录
  2. 检查扫描码是否正确,特别是区分标准码和扩展码
  3. 检查是否存在冲突的映射,使用"Delete All"清除所有映射后重新配置
  4. 尝试使用其他方法修改该键位(如键盘厂商提供的专用工具)

问题2:映射后键位功能异常

可能原因

  • 选择了错误的目标扫描码
  • 同时使用了多个键位映射工具,导致冲突
  • 某些应用程序会覆盖系统级的键位映射

解决方案

  1. 验证目标键位的扫描码是否正确
  2. 关闭或卸载其他键位映射工具
  3. 在相关应用程序中检查快捷键设置,避免冲突
  4. 尝试将有问题的映射单独配置,排除干扰因素

问题3:无法保存映射到注册表

可能原因

  • 当前用户没有管理员权限
  • 注册表项权限设置问题
  • 系统策略限制了注册表修改

解决方案

  1. 以管理员身份运行SharpKeys
  2. 检查注册表项HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout的权限设置
  3. 修改组策略或安全策略,允许注册表编辑
  4. 手动导入注册表文件(需要管理员权限)

总结与展望

本文要点回顾

  1. 扫描码是键盘与计算机通信的二进制数据,在SharpKeys中以十六进制形式表示
  2. 扫描码分为标准扫描码(00_XX)和扩展扫描码(E0_XX)两种格式
  3. 本文提供了完整的常见键位扫描码对照表,涵盖字母、数字、功能键等各类键位
  4. 扫描码映射需要注意避免循环映射,禁用键位应映射到00_00
  5. 修改扫描码映射后需注销或重启系统才能生效

扫描码技术的发展趋势

随着键盘技术的发展,扫描码体系也在不断演进:

  1. USB HID扫描码:现代USB键盘采用HID(Human Interface Device)协议,扫描码定义更加标准化
  2. 可编程键盘的固件扫描码:高端机械键盘支持在固件层自定义扫描码,提供更灵活的键位配置
  3. 操作系统级的扫描码处理:Windows 10/11引入了更多扫描码相关的API,支持更精细的键位控制

扩展学习资源

  1. 官方文档

    • Microsoft Docs: Keyboard Scan Codes
    • SharpKeys GitHub Wiki: https://github.com/randyrants/sharpkeys/wiki
  2. 工具推荐

    • KeyCodes: 实时显示键位扫描码的工具
    • Registry Workshop: 高级注册表编辑工具
    • AutoHotkey: 功能强大的自动化脚本工具,可与扫描码配合使用
  3. 社区资源

    • 键盘爱好者论坛:讨论扫描码映射的最佳实践
    • GitHub上的扫描码映射配置分享:提供各类键盘的优化配置

通过掌握扫描码知识,你可以充分发挥SharpKeys的强大功能,打造完全符合个人习惯的键盘布局。无论是程序员、文字工作者还是普通用户,个性化的键位配置都能显著提升工作效率和使用体验。

提示:建议将本文收藏,作为日后进行键位映射配置时的参考手册。如有任何问题或发现错误,欢迎在评论区留言反馈!

【免费下载链接】sharpkeys SharpKeys is a utility that manages a Registry key that allows Windows to remap one key to any other key. 【免费下载链接】sharpkeys 项目地址: https://gitcode.com/gh_mirrors/sh/sharpkeys

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值