こんにちは、阿久津です。私事ですが数年ぶりにデスクトップのキーボードを入れ替えました。併用するノートPCがThinkPadということもあり、デスクトップでも「ThinkPlus USBキーボード ウルトラナビ付」を使用していましたが、別途使用しているマウスの換装時にデバイスドライバの入れ替えますと、トラックポイントやタッチパッドが無反応に。あれこれ試してみましたが、改善する気配もなく、「ThinkPad USBトラックポイントキーボード」を選択。リンク先にあるように日本語版キーボードを注文しましたが、待てど暮らせど送られてこないため、実際に使用しているのは他のオンラインショップで注文した英語版です。

言うまでもなく英語版と日本語版では、キーボードレイアウトが異なるため若干の戸惑いはありますが、さほど問題にはなりません。困ったのが、英語版キーボードでありながら、レイアウトを日本語として認識している点。Windows OSでは、USBキーボードを接続したときに正しく認識せず、キーボードレイアウトが既存のまま、という現象はよくある話。Windows XPやWindows Vistaでも発生したように記憶しています。対応策としてデバイスの種類(ドライバ)を直接指定するというものがありますが、専用デバイスドライバを用いるタイプには向いていません(図01)。

図01: 「ThinkPad USBトラックポイントキーボード」はポインティングデバイスだけでなくキーボードにも、専用のデバイスドライバを用いるため、強制変更は得策ではありません

そこで出てくるのがレジストリによるキーボードレイアウト変更。今週はキーボードレイアウトをレジストリから変更するチューニングをご紹介しましょう。そもそもキーボードレイアウトは、HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ i8042prt \ Parametersキーにある文字列値「LayerDriver{3文字の国名}」で管理され、同値でキーボードレイアウトを持つレイヤーファイル(DLLファイル)を読み込むことで定義しています。つまり、文字列値「LayerDriver JPN」や文字列値「OverrideKeyboardIdentifier」といった値を書き換えることでキーボードレイアウトを変更できますので、これらのデータ値を変更しましょう(図02)。

図02: HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ i8042prt \ Parametersキーの内容。日本語キーボードを使用する一般的な環境では、画面のような値が組み込まれています

  1. [Win]+[R]キーを押して「ファイル名を指定して実行」を起動し、テキストボックスに「regedit」と入力してから<OK>ボタンをクリックします。
  2. レジストリエディタが起動したら、HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ i8042prt \ Parametersまで、キーをたどって開きます。
  3. 文字列値「LayerDriver JPN」をダブルクリックで開き、値のデータを「kbd101.dll」に書き換えて<OK>ボタンをクリックします。
  4. 文字列値「OverrideKeyboardIdentifier」をダブルクリックで開き、値のデータを「PCAT_101KEY」に書き換えて<OK>ボタンをクリックします。
  5. DIOR値「OverrideKeyboardSubtype」をダブルクリックで開き、値のデータを「0」に書き換えて<OK>ボタンをクリックします。
  6. 「LayerDriver JPN」「OverrideKeyboardIdentifier」「OverrideKeyboardSubtype」の各データ値を書き換え終えたら、<×>ボタンを押してレジストリエディタを終了します。
  7. <スタート>メニューの電源ボタンメニューから<再起動>を選択して、コンピュータを再起動します。

以上でチューニング終了です(図03~09)。

図03: [Win]+[R]キーを押して「ファイル名を指定して実行」を表示し、テキストボックスに「regedit」と入力して<OK>ボタンをクリックします

図04: レジストリエディタが起動したら、HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ i8042prt \ Parametersまでキーをたどって開きます

図05: 文字列値「LayerDriver JPN」をダブルクリックし、値のデータを「kbd101.dll」に書き換えてから<OK>ボタンをクリックします

図06: 文字列値「OverrideKeyboardIdentifier」をダブルクリックし、値のデータを「PCAT_101KEY」に書き換えてから<OK>ボタンをクリックします

図07: DWORD値「OverrideKeyboardSubtype」をダブルクリックし、値のデータを「0」に書き換えてから<OK>ボタンをクリックします

図08: 以上の書き換えを終えたら、<×>ボタンをクリックしてレジストリエディタを終了します

図09: <スタート>メニューにある電源ボタンのボタンをクリックし、メニューを表示させてから<再起動>をクリックしてコンピュータを再起動させます

今回は日本語レイアウトになってしまった英語キーボードを対象にしましたが、日本語キーボードなのに英語レイアウトになってしまう場合は、文字列値「LayerDriver JPN」のデータ値を「kbd106.dll」、文字列値「OverrideKeyboardIdentifier」のデータ値を「PCAT_106KEY」、DWORD値「OverrideKeyboardSubtype」を「2」に変更してください。

ここで気になるのが「OverrideKeyboardType」「OverrideKeyboardSubtype」の存在でしょう。前者はキーボードの種類、後者はOEM固有のキーボードサブタイプを定義しており、101英語キーボードなどコンピュータの世界で一般的な環境では、いずれも使用しません。「OverrideKeyboardType」のデータ値が「2」の場合は拡張101キーボード、「4」の場合は拡張102キーボード、日本語キーボードでは主に「7」が使用されます。後者の「OverrideKeyboardSubtype」は各OEMメーカーが設けた独自キーをサポートするために用意されているため、英語キーボード使用時は「0」、日本語キーボード使用時は「2」にしておきましょう。

これで日本語レイアウトと誤認識した英語キーボードが正しく使えるようになりましたが、日本語キーボードの拡張キーである[半角/全角]キーがサポートされなくなるため、[Alt]+[~(チルダ)]キーを使用しなければなりません。AX用キーボードレイアウト(kbdax2.dll)を用いることで、[半角/全角]キーを[右Alt]キーに割り当てるという方法もありますが、筆者の環境では「ThinkPad USBトラックポイントキーボード」のトラックポイントが無反応になるという問題が発生するため、実用に至りませんでした。

それでは、また次号でお会いしましょう。

阿久津良和(Cactus)