关于使用注册表修改键盘的键位映射

server/2024/12/2 16:26:28/

修改注册表实现键盘的键位映射

  • 前言
  • 一、scancode是什么?
  • 二、步骤
    • 1.打开注册表
    • 2.scancode表
  • 总结

前言

弄了个蓝牙的欧洲键盘,但左上角居然是WWW home键,还找不到Esc键,崩溃了,VI都用不了。
赶紧考虑键位映射,但不想占用内存,就准备用注册表的Scancode Map实现。
折腾了几天,怎么也不行。最后发现,Power、WWW home、多媒体的键(非104标准键),因不能驻留内存,只有PS/2才能用此法进行键位映射。这个坑一定要告诉大家。免得折腾。直接用powertoys吧。


但既然弄明白了Scancode,就说清楚一下,什么高位、低位的。争取说清楚原理。
很多网上文章,都是讲步骤,不说原理,不说为什么要这么干,看的一头雾水。

一、scancode是什么?

键位按下和放开各获取一个码(makecode和breakcode),通常键盘映射只用按下去那个码(makecode)。每个码用两个16进制数表示。
比如:
Page Down的按下码是0xE0 0x51,放开码是0xE0 0xD1。
有人说,104键盘的值都只有一个啊,其实,是因为前面一位是0所以没有写出来。
比如,scancode的第一个是Esc键,通常看到的是0x01,但应该表示成0x00 0x01,高位是0,低位是1。这个在修改注册表的时候用得到。

二、步骤

1.打开注册表

位置:计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout
注意不是Keyboard Layouts也不要进入到子目录。
右侧创建二进制值Scancode Map
表的结构是这样的:四个部分,表头,映射数量,键位映射表,表尾。
表头是8个0,表尾是4个0。
映射数量用4位数表示,后面每个映射对也用四位数表示,前两个是目标键,后两个是原键。
这里需要特别注意:
1.注册表的高低位读法是低位在前,高位在后。
比如,第二行的前四位是02 00 00 00,实际的值是00 00 00 02,就是数值2,表示有1对键盘映射。注意是这个数值-1。

2.第二行的后四位开始就是键位映射对,四位数中,前两位是目标键,后两位是原键。
比如,WWW home值是0xE0 0x32,ESC值是0x01,表示成键位映射就是01 00 32 E0。其中01 00是目标键ESC;32 E0是原键。注册表在读的时候,先读低位01,再度高位00,最后组合成00 01。为啥这个设计,我不知道。

3.如果要禁用一个键,将这个键映射为00 00即可

示例一:

00 00 00 00 00 00 00 00 //表头的格式,8个0
02 00 00 00 01 00 32 E0 //有一个键位映射:把00 01赋值到 E0 32;就是把WWW home映射成Esc
00 00 00 00 //表尾的格式,4个0

示例二:

00 00 00 00 00 00 00 00 //表头的格式,8个0
03 00 00 00 01 00 32 E0 //有两个键位映射:把WWW home映射成Esc
52 E0 6c E0 00 00 00 00 //把E-mail键映射成insert;表尾的格式,4个0

2.scancode表

下面表中的值是低位在前,高位在后,直接复制到注册表中就可以:

													
Backspace	0E 00		9	49 00		/ ?	35 00		S	1F 00		DBE_SBCSCHAR	77 E0
Caps Lock	3A 00		-	4A 00		; :	27 00		T	14 00		CONVERT	79 E0
Delete	53 E0		/ *	37 00		[ {	1A 00		U	16 00		NONCONVERT	7B E0
End	4F E0		.	53 00		\ |	2B 00		V	2F 00		Internet	01 E0
Enter	1C 00		/	35 00		] }	1B 00		W	11 00		iTouch	13 E0
Escape	01 00		/+	4E 00		` ~	29 00		X	2D 00		Shopping	04 E0
HOME	47 E0		Enter	1C E0		= +	0D 00		Y	15 00		Webcam	12 E0
Insert	52 E0		F1	3B 00		0 )	0B 00		Z	2C 00		Back	6A E0
Left Alt	38 00		F2	3C 00		1 !	02 00		Close	40 E0		Favorites	66 E0
Left Ctrl	1D 00		F3	3D 00		2 @	03 00		Fwd	42 E0		Forward	69 E0
LeSh ftift	2A 00		F4	3E 00		3 #	04 00		Help	3B E0		HOME	32 E0
Left Windows	5B E0		F5	3F 00		4 $	05 00		New	3E E0		Refresh	67 E0
Num Lock	45 00		F6	40 00		0.05	06 00		Office Home	3C E0		Search	65 E0
Page Down	51 E0		F7	41 00		6 ^	07 00		Open	3F E0		Stop	68 E0
Page Up	49 E0		F8	42 00		7 &	08 00		Print	58 E0		My Pictures	64 E0
Power	5E E0		F9	43 00		8 *	09 00		Redo	07 E0		My Music	3C E0
PrtSc	37 E0		F10	44 00		9 (	0A 00		Reply	41 E0		Mute	20 E0
Right Alt	38 E0		F11	57 00		A	1E 00		Save	57 E0		Play/Pause	22 E0
Right Ctrl	1D E0		F12	58 00		B	30 00		Send	43 E0		Stop	24 E0
Right Shift	36 00		F13	64 00		C	2E 00		Spell	23 E0		+(Volume up)	30 E0
Right Windows	5C E0		F14	65 00		D	20 00		Task Pane	3D E0		- (Volume down)	2E E0
Scroll Lock	46 00		F15	66 00		E	12 00		Undo	08 E0		Media	6D E0
Sleep	5F E0		Down	50 E0		F	21 00		Mute	20 E0		Mail	6C E0
Space	39 00		Left	4B E0		G	22 00		Next Track	19 E0		Web/Home	32 E0
Tab	0F 00		Right	4D E0		H	23 00		Play/Pause	22 E0		Messenger	05 E0
Wake	63 E0		Up	48 E0		I	17 00		Prev Track	10 E0		Calculator	21 E0
0	52 00		Calculator	21 E0		J	24 00		Stop	24 E0		Log Off	16 E0
1	4F 00		E-Mail	6C E0		K	25 00		Volume Down	2E E0		Sleep	5F E0
2	50 00		Media Select	6D E0		L	26 00		Volume Up	30 E0		Help(on ke F1y)	3B E0
3	51 00		Messenger	11 E0		M	32 00		? -	7D 00		Undo(on ke F2y)	08 E0
4	4B 00		My Computer	6B E0		N	31 00			45 E0		Redo(on ke F3y)	07 E0
5	4C 00		’ ”	28 00		O	18 00		Next to Enter	2B E0		Fwd (on ke F8y)	42 E0
6	4D 00		- _	0C 00		P	19 00		Next to L-Shift	56 E0		Send(on ke F9y)	43 E0
7	47 00		, <	33 00		Q	10 00		Next to R-Shift	73 E0			
8	48 00		. >	34 00		R	13 00		DBE_KATAKANA	70 E0			

总结

讲步骤,还要讲原因讲原理讲为什么。


http://www.ppmy.cn/server/146772.html

相关文章

探索 IntelliJ IDEA 中 Spring Boot 运行配置

前言 IntelliJ IDEA 作为一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;为 Spring Boot 应用提供了丰富的运行配置选项&#xff0c;定义了如何在 IntelliJ IDEA 中运行 Spring Boot 应用程序&#xff0c;当从主类文件运行应用程序时&#xff0c;IDE 将创建…

Android 图形系统之七:SurfaceFlinger

一. 引言 什么是 SurfaceFlinger&#xff1f;SurfaceFlinger 的核心作用和地位&#xff1f;为什么需要了解 SurfaceFlinger&#xff1f; 二. SurfaceFlinger 的基本概念 Surface 和 SurfaceFlinger 的关系SurfaceFlinger 与图形渲染&#xff08;OpenGL ES 和 Vulkan&#xf…

如何在Solana链上开发Dapp?RPC节点的要求

在 Solana 链上开发 DApp 是一个系统性过程 1. 理解 Solana 和其开发模型 Solana 是高性能区块链&#xff0c;采用 Rust 语言开发智能合约&#xff08;称为 Program&#xff09;。开发 DApp 需要掌握以下核心概念&#xff1a; • 账户模型&#xff1a;Solana 使用账户存储数…

CSS3网站

&#xff08;看不懂英文的记得点击右上角Change language更改语言&#xff09;&#xff1a; https://developer.mozilla.org/en-US/docs/Learn/CSS/Introduction_to_CSS/Selectors CSS选择器 https://developer.mozilla.org/en-US/docs/Web/CSS/color_value 颜色值 https://ser…

SQL Server第四章-数据的查询(二)(头歌)答案代码

第1关&#xff1a;通配符%的使用 USE Mall GoSET NOCOUNT ON---------- retrieving with wildcard % ---------- -- ********** Begin ********** -- select * from Products where prod_name like %toy%-- ********** End ********** --GO 第2关&#xff1a;通配符_的使用 …

AcWing 1216. 饮料换购

文章目录 前言代码思路 前言 简单题。AcWing 1216. 饮料换购 代码 #include<bits/stdc.h> using namespace std; int main(){int n;cin>>n;int ansn;int tn;while(t>3){int at%3;t/3;anst;ta;}cout<<ans<<endl;return 0; }思路 #include<bit…

微信小程序首页搜索框的实现教程

微信小程序首页搜索框的实现教程 前言 在现代移动应用中,搜索功能是用户获取信息的主要方式之一。对于购物小程序而言,提供一个美观且高效的搜索框,可以显著提升用户体验,帮助用户快速找到他们想要的商品。本文将详细介绍如何在微信小程序中实现一个样式优美的搜索框,包…

0.Hash表的理论基础:

Hash表的理论基础&#xff1a; 哈希表&#xff08;Hash Table&#xff09;&#xff1a; 什么是哈希表&#xff1f;哈希表&#xff08;Hash table——正确的翻译是散列表&#xff0c;国内选择音译&#xff09;。 哈希表是根据 关键码 的值而直接进行访问的数据结构。 这样理…