配列の異なるキーボードを同時に使う方法 の変更点

*概略 [#i9f6708e]
-Windowsで複数のキーボードを同時に接続すると、異なる配列ではどちらか一方の配列になってしまうが、これは(特殊なソフトを使わない限り)制限であると思われている場合がある。しかしWindowsXPでは、実はこの制限は無い。つまり異なる配列のキーボードを特にソフトウエアのインストールなしに同時に使用できる。

-以下はその方法を具体的に説明する。PS/2とUSBの2つを異なる組み合わせで使うという状況を想定する。配列の組み合わせは(PS/2, USB)=(日本語, US)と(PS/2, USB)=(US, 日本語)の2つが考えられるが、ノートPCなど(PS/2, USB)=(日本語, US)の場合を例にとって説明する。(PS/2, USB)=(US, 日本語)でも設定値が異なるだけで同様にできる。

-手順は大まかに2段階で
+ 配列を変えたいUSBキーボードのデバイスインスタンスIDを見つける
+ 見つけたデバイスインスタンスIDに対応するレジストリエントリを書き換える

*デバイスインスタンスIDを見つける [#f87eb19f]
+ 発見を簡単にするために、配列を変えたいUSBキーボード以外のHIDキーボードは外しておく。また、そのキーボードを通常使いたいUSBポートに接続しておくこと。これはUSBポートが異なるとデバイスインスタンスIDが異なってしまうからである。
+ デバイスマネージャで「キーボード」の項目をクリックして展開しHIDキーボードデバイスというのを見つける。
+ 右クリックし、プロパティーダイアログを表示させる &br; &ref(F1.PNG);
+「詳細」タブを表示させ、「デバイスインスタンスID」を得る &br; &ref(F2.PNG);

*レジストリエントリを書き換える [#p5504429]
+ レジストリエディタを起動し、HKEY_LOCALMACHINE\SYSTEM\CurrentControlSet\Enum\HIDを右クリックし、検索を選ぶ
+ 上で求めたデバイスインスタンスIDの一部を入力する。VID_XXXX&PID_YYYYの部分を入力する(XXXX,YYYYはキーボードにより異なる)。&br; &ref(F4.PNG);
+ キーが見つかったら、クリックして展開する。サブキーがあるはずである。もしそのキーボードを複数のポートで利用したことがあるなら複数のエントリーがある。上で求めたデバイスインスタンスIDの後半部分に一致するエントリをクリックして展開する。
+ "Device Parameters"というサブキーを選択する。
+ 右ペインで右クリックしDWORD値を作成する &br; &ref(C1.PNG);。
+ 下のようになるので、キー名を"KeyboardTypeOverride"という値に変更する。&br; &ref(C2.PNG); 
+ 変更したらダブルクリックし、値を4に書き換える。 &br; &ref(C3.PNG);
+ 同様にして"KeyboardSubtypeOverride"キーをDWORDで作り値を2にする。下のようになる。&br; &ref(C5.PNG);
+ リブートする。

* そのほか [#h78ac4ce]
- USBを日本語とした場合には、設定する値を変える。KeyboardTypeOverrideを7に設定する。
- この値はWin32 APIの::GetKeyboardType()と関連しているらしい。APIのドキュメントによるとSubtypeはOEM先の判定にも使われることがあるらしいため、OEMメーカーのユーティリティーの動作は変わる可能性がある(未確認)。
- お約束だが、レジストリのレジストリエディタによる変更は自己責任である。
- NECのUSB日本語キーボードのドライバは上記のキーに加えて以下のキーも作成するようだ。日本語関係で動作がうまくない時には追加すると何か変わるかもしれない(未確認)。
--KeyboardNumberFunctionKeyOverride = 12 
--KeyboardNumberIndicatorsOverride = 3 
--KeyboardNumberTotalKeysOverride = 106
- Windows2000ではこの方法は使えない(はず)。XPからの新機能である。
- Windows Vistaでできるかどうかは未確認。

- Windows 7では可能である。