有没有办法将组合键映射到计算机类型的字符?

有没有办法将组合键映射到计算机类型的字符?

M 键盘上的“h”键无法使用,我希望能够覆盖任何组合键才能键入它。与此同时。

举个例子

Alt+P to return h and maybe
Alt+shift+h to return H

答案1

键盘重新映射

Scancode MapatHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout允许按键表现得像按下了另一个键(或没有按下任何键)。通常不存在该值。

此结构将一个键映射到另一个键(或不映射到任何键)。

要读取设置的内容:每对字符都是一个字节。每 4 对字符是一个双字(32 位)。第一个双字是标题,全为零。第二个双字是标志,通常全为零。第三个双字是重新映射的键的数量加一。每个重新映射的键是一个双字。这些双字的第一个字(两对字符)是键将执行的操作,第二个字是要重新映射的键(第一个字将为零以禁用键)。最后有一个全为零的双字(记录的重新映射键的数量是数字加一的原因)。

英特尔处理器以逆序字节顺序存储数字。在第三个双字中,即重新映射键的数量,数字 2 将被存储为 02,00,00,00。双字以字符对的形式从右到左读取。但是双字本身(而不是双字中的字节)是按常规顺序排列的 - 从头到尾。

"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,43,00,1d,00,00,00,00,00

要解码上述条目,将 F9 键与左 Control 键交换,将其分解为双字。

00,00,00,00, (Header)
00,00,00,00, (Flags)
02,00,00,00, (Number of records of remapped keys and the end marker)
43,00,1d,00, (Record 1 - second key - Left Control (001d) becomes first key - F9 (0043) and vice versa)
00,00,00,00  (End Marker)

另一个示例是禁用两个 Windows 键。

"Scancode Map"=hex:00,00,00,00,00,00,00,00,03,00,00,00,00,00,5B,E0,00,00,5C,E0,00,00,00,00

解码上述条目。

00,00,00,00, (Header)
00,00,00,00, (Flags)
03,00,00,00, (Number of records of remapped keys and the end marker)
00,00,5B,E0, (Record 1 - second key - Left Winkey (e05b) becomes first key which is nothing (0000))
00,00,5C,E0, (Record 2 - second key - Right Winkey (e05c) becomes first key which is nothing (0000))
00,00,00,00, (End Marker)

由于早期键盘没有现代键盘上的所有按键,因此有两种表达扫描码的方式:正常和扩展。正常是一个字节,我们用前导零填充到一个字(2 个字节)。扩展是两个字节,为此目的,扫描码以 E0 开头。与此上下文无关的其他内容以 00 开头。E0 或 00 告诉程序在代码可用时从键盘重新读取。单个键都以 E0 开头。它们基本上是光标键、右侧修饰键 Control 和 Alt 以及 F11/F12。这些键在原始键盘上是没有的。一个人用数字键盘移动光标。对灰色键的引用是指数字键盘,因为曾经数字键盘键是灰色的,而其他键是米色的。

Esc 1   0x1
1 or !  2   0x2
2 or @  3   0x3
3 or #  4   0x4
4 or $  5   0x5
5 or %  6   0x6
6 or ^  7   0x7
7 or &  8   0x8
8 or *  9   0x9
9 or (  10  0xa
0 or )  11  0xb
- or _  12  0xc
= or +  13  0xd
Bksp    14  0xe
Tab 15  0xf
Q   16  0x10
W   17  0x11
E   18  0x12
R   19  0x13
T   20  0x14
Y   21  0x15
U   22  0x16
I   23  0x17
O   24  0x18
P   25  0x19
[ or {  26  0x1a
] or }  27  0x1b
Enter   28  0x1c
Left Ctrl   29  0x1d
A   30  0x1e
S   31  0x1f
D   32  0x20
F   33  0x21
G   34  0x22
H   35  0x23
J   36  0x24
K   37  0x25
L   38  0x26
; or :  39  0x27
' or "  40  0x28
` or ~  41  0x29
Left Shift  42  0x2a
\ or |  43  0x2b
Z   44  0x2c
X   45  0x2d
C   46  0x2e
V   47  0x2f
B   48  0x30
N   49  0x31
M   50  0x32
, or <  51  0x33
. or >  52  0x34
/ or ?  53  0x35
Right Shift 54  0x36
Prtsc
This is a special case  55  0x37
Left Alt    56  0x38
Space   57  0x39
Caps Lock   58  0x3a
F1  59  0x3b
F2  60  0x3c
F3  61  0x3d
F4  62  0x3e
F5  63  0x3f
F6  64  0x40
F7  65  0x41
F8  66  0x42
F9  67  0x43
F10 68  0x44
Num Lock    69  0x45
Scroll Lock 70  0x46
Home (Number Pad)   71  0x47
Up Arrow (Number Pad)   72  0x48
Pgup (Number Pad)   73  0x49
Grey - (Number Pad) 74  0x4a
Left Arrow (Number Pad) 75  0x4b
Center (The 5 key on the number pad?)   76  0x4c
Right Arrow (Number Pad)    77  0x4d
Grey + (Number Pad) 78  0x4e
End (Number Pad)    79  0x4f
Down Arrow (Number Pad) 80  0x50
Pgdn (Number Pad)   81  0x51
Ins (Number Pad)    82  0x52
Del (Number Pad)    83  0x53
Enter (Number Pad)  57372   0xe01c
Right Ctrl  57373   0xe01d
Grey / (Number Pad) 57397   0xe035
Right Alt   57400   0xe038
Home    57415   0xe047
Up Arrow    57416   0xe048
Pgup    57417   0xe049
Left Arrow  57419   0xe04b
Right Arrow 57421   0xe04d
End 57423   0xe04f
Down Arrow  57424   0xe050
Pgdn    57425   0xe051
Ins 57426   0xe052
Del 57427   0xe053
F11 57431   0xe057
F12 57432   0xe058
Left Winkey 57435   0xe05b
Right Winkey    57436   0xe05c

注意:程序使用 16 位值来表示正数(0 到 65 536)或正数和负数(-32 768 到 32 787)。对于列表中的较大数字,我假设它们是无符号整数,因为大多数其他程序可能也会这样处理它们。有些编程语言只支持有符号整数。要转换,请从 65 536 中减去表中的数字并将其变为负数。例如,右 Winkey 是 57 436。65 536 - 57 436 = 8100,然后将其变为负数 -8100。

这些代码源自 Dos,因此我称它们为整数,因为 MS-Dos 是 16 位的。但是整数等于处理器大小,因此 Windows 中的整数是 32 位(大约 0 到 40 亿或 -20 亿到 20 亿)。

答案2

我使用以下软件禁用了存在硬件问题的 F2 键。它已 100% 禁用。该软件具有重新映射的其他功能。试一试。我的防病毒软件也没有在下载的文件中检测到任何内容。

sharpkeys 的链接

祝你今天过得愉快:)

相关内容