Windows2000でキーマップを変える方法

はじめに

このページで紹介するレジストリの操作は、システムを壊してしまう恐れもあります。 実際に行う場合には自己責任でお願いします。

本題

NT4とかでもできるらしいですが、「Windows2000でキーマップを変える方法」です。
MicrosoftのKnowledge Base に「 Microsotf Natural Keyboard の Windows キーを無効にする 」というのがあります。

要するにレジストリの
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout
に 「Scancode Map」というバイナリキーを作成して値に
00000000 00000000 02000000 E05B0000 E05C0000 00000000
を入力して再起動すればWindowsキーが効かなくなるということです。

以下のものを scancodemap_disable_windowskey.reg として保存し実行しても同じです。
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,05,B0,00,00,00,00,00,00

この値の意味は以下の通りです。
0000 0000 ヘッダ(バージョン)
0000 0000 ヘッダ(フラグ)
0200 0000 ヘッダ(マッピング数,ターミネータを含む)
05B0 0000 Windowsキー(B005) -> NULL(0000)
0000 0000 ターミネータ
(マッピング数やキーコードの部分のエンディアンに注意!!)

これを応用して、ControlとCapsの入れ替えをするには
[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,3A,00,1D,00,00,00,00,00
のように記述した scancodemap_swap_ctrlcaps.reg を実行すればOKです。

Scancode Mapを書くのはすごくめんどくさいので、UNIX系OSのキーマップファイル(hogehoge.map)から
Scancode Mapを生成するPerlスクリプト scancodemap.pl を作りました。
LZHで固めますので適当に解凍して使ってください。 使い方は
% ./scancodemap.pl 変換前の配列.map 変換後の配列.map
です。キーマップファイルは/usr/lib/kbd/keytables/とかにあります。書き方は
% man keytalbes
とかで調べてください。
(注)あくまで、スキャンコードの入れ替えですので、「Shiftを押しながらの動作だけを変える」といった ことはできません。
つまり、日本語キーボードをUSキーボード風にするのはスキャンコードの入れ替えだけでは できないということです。

などと書いてきましたが、Windows2000 Resource KitにRemapkeyなるものがあります。
GUIでこれらの設定をやってくれるみたいです。
File:remapkey.zip

おわりに

Control/Alt/Deleteがなくなるとログインすらできなくなります。
リモートからレジストリ操作できる環境をつくっておいた方が良いでしょう。

おまけ

Windows9x系でのControlとCapsの入れ替えは SwapScan.i386 が便利です。



yuyama@vlsi.kuee.kyoto-u.ac.jp
Last modified: Tue Nov 4 11:56:32 JST 2003