Mキーボードのキー「h」が機能しなかったので、キーの組み合わせを上書きして入力できるようにしたい。その間。
例は
Alt+P to return h and maybe
Alt+shift+h to return H
キーボードの再マッピング
値 Scancode Map
at HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout
は、別のキーが押されたか(またはキーが押されていない)かのようにキーを動作させることができます。通常は存在しません。
この構造は、あるキーを別のキーにマップします(またはキーなしにマップします)。
設定内容を読み取るには:文字の各ペアはバイトです。 4組の文字はそれぞれdword(32ビット)です。最初のdwordはヘッダーであり、すべてゼロです。 2番目のdwordはフラグであり、通常はすべてゼロです。 3番目のdwordは、再マップされたキーの数に1を加えたものです。再マップされた各キーは1つのdwordです。これらのdwordの最初のWord(2組の文字)はキーが実行するものであり、2番目のWordは再マップするキーです(最初のWordはキーを無効にするためにゼロになります)。最後に、ゼロのdwordがあります(記録される再マップされたキーの数が1を足した数である理由)。
Intelプロセッサは、バイト順を逆にして数値を格納します。再マップされたキーの数である3番目のdwordでは、2の数が02,00,00,00として格納されます。 Dwordは、右から左に文字のペアで読み取られます。ただし、dwordのバイトではなく、dword自体は、最初から最後まで、従来の順序になっています。
"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,43,00,1d,00,00,00,00,00
F9キーをLeftControlキーと交換する上記のエントリをデコードするには、dwordに分割します。
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)
もう1つの例は、両方の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つがあります。 Normalは1バイトで、Wordの先頭にゼロを付けて埋めます(2バイト)。拡張は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)を表します。リスト内のより大きな数については、他のほとんどのプログラムがそれらを扱う可能性が高いため、符号なし整数であると想定しました。一部のプログラミング言語は、符号付き整数のみをサポートします。変換するには、65536から表の数値を引き、それを負にします。例えば。右ウィンキーは57436です。65536-57436= 8100の場合、負の値-8100になります。
これらのコードはDosからのものであるため、MS-Dosは16ビットであったため、整数と呼びます。ただし、整数はプロセッササイズに等しいため、Windowsの整数は32ビット(約0〜40億または-20億〜20億)です。