あるロボット研究者の日常 RSSフィード

2007-08-24

[][]Windows Vistaでのキーの入れ替え

いま使っているThinkPad T41pでは、AltIMEを使って日本語キーボードのCapsLock左CtrlEsc半角/全角のキーを入れ替えている。

しかし、Windows VistaではAltIMEが動かないらしいので、T61p用に別の方法を探す…GoogleVista CapsLock Control」を検索したら、いっぱい出てきた。

一番詳しく書いてあった(&Googleの検索結果で一番最初に出てきた)のが、JAISTの藤枝さんのページ。このページにしたがってレジストリをいじることにした。基本的な手順は以下の通り:

  1. 管理者権限のあるユーザでログインする
  2. regeditを実行
  3. HKEY_LOCAL_MACHINE → System → CurrentControlSet → Control → KeyBoard Layoutの順に辿る*1
  4. KeyBoard Layoutの下に「Scancode Map」というキーを作成する(レジストリエディタの右側部分で右クリック⇒「新規」⇒「キー」を選択)
  5. 入れ替えたいキーのコードをScancode Mapに設定する(詳細は以下)
  6. 再起動

Scancode Mapの書式は

  0x00000000
  0x00000000
  0x(設定するキーコード変換の個数+1) ← 最後の「+1」は終端のヌル(0x00000000)の分。
  0x(設定するキーコード変換1)
  0x(設定するキーコード変換2)
      :
  0x00000000 ← 終端のヌル

で、「設定するキーコード変換」は上位2バイトが「入力スキャンコード」、下位2バイトが「出力スキャンコード」に当たる。たとえば、CapsLockのキーコードは0x3aで、左Ctrlのキーコードは0x1dなので、「CapsLockを押したら左Ctrlとして受け付ける」という設定のキーコード変換は「0x003a001d」となる。さらに、Scancode Mapへの設定時には入力をlittle endianにしないといけないので、実際の入力は順番を入れ替えた「1d 00 3a 00」となる。

僕がやりたいのは「CapsLockと左Ctrlを入れ替える」「Escと半角/全角を入れ替える」ということで、Escのキーコードは0x01、半角/全角のキーコードは0x29なので、設定するキーコード変換は以下の4つ:

  0x003a 001d  [→ 1d 00 3a 00] (CapsLockを左Ctrlとして受け付ける; 上に書いたのと同じ)
  0x001d 003a  [→ 3a 00 1d 00] (左CtrlをCapsLockとして受け付ける)
  0x0029 0001  [→ 01 00 29 00] (半角/全角をEscとして受け付ける)
  0x0001 0029  [→ 29 00 01 00] (Escを半角/全角として受け付ける)
  ([…]に示したのは実際の入力)

さらに、これにヘッダと終端のヌルを加えた

  0x0000 0000  [00 00 00 00]
  0x0000 0000  [00 00 00 00]
  0x0000 0005  [05 00 00 00] (→ 設定する変換は4つ + 終端のヌルの計5つ)
  0x003a 001d  [1d 00 3a 00]
  0x001d 003a  [3a 00 1d 00]
  0x0029 0001  [01 00 29 00]
  0x0001 0029  [29 00 01 00]
  0x0000 0000  [00 00 00 00]
  ([…]に示したのは実際の入力)

をScancode Mapに設定すれば所望の変換ができる…できた(^-^)v

参考URL:

Windows Vista/XP/2000/NT4.0のキー配列の変更方法 (藤枝さん@JAISTのページ)

Scan Code Mapper for Windows (Microsoftの技術文書(英語) )


Disclaimer:

藤枝さんのページにも記載があるが、Ctrl, Alt, Deleteに関する変換を失敗してこれらのキーが入力できなくなると、最悪Windowsにログインできなくなる可能性があるので、レジストリをいじる際は必ず自己責任でやること。このページを参考にして何か不具合が生じても、僕は一切責任は取りません。

*1:名前がよく似たKeyBoard Layoutsという項目もある。いじるのは単数形の方。

bezerkbezerk 2007/08/27 00:51 >> 最悪Windowsにログインできなくなる可能性がある

そういう事態に備えて(ってのは嘘ですが)VNC Serverを動かしておくと便利ですよ.

stocktonstockton 2007/08/27 11:25 なるほど。

VNCサーバじゃなくても、リモートデスクトップで接続できれば元に戻せていいかも、ですね。

UbuntuUbuntu 2008/03/22 23:28 試していませんが、Windows Vistaでもこれが動くのではないでしょうか
http://d.hatena.ne.jp/infohack/20070707/p1

stocktonstockton 2008/03/23 00:40 情報ありがとうございます。
Windows Server 2003 Resource Kit Toolsは初めて知りました。
機会があれば試してみようと思います。

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/stockton/20070824/1188100362