Windows 10は通常、キーボードレイアウトを1種類しか選択できない(はず)。 今回JISキーボードとUSキーボードの両方を同時に利用したかったためゴニョゴニョすることにした。

環境

  • OS
    • エディション: Windows 10 Home
    • バージョン: 22H2
    • OSビルド: 19045.2251
  • 併用したいキーボード
    • JISキーボード: バッファロー BSKBW125BK ※ブラックフライデーで買ったゲーム用のサブ
    • USキーボード: Kinesis Freestyle Pro KB900 ※こっちをメインで使っている

今回やった設定

いろいろ調べた結果、レジストリを書き換える手法が一番簡単だったのでその方法を採用した。

キーボードレイアウトの設定を日本語にしておき、USキーボードの方の設定をレジストリ(KeyboardTypeOverrideKeyboardSubtypeOverride)で上書きする。

どうやら i8042prt のレジストリキーに共通設定?のようなものがあり、これが個別の設定を打ち消してしまうようだった。個別設定を反映するために i8042prt の方の設定は消。

※ちなみに 日本語キーボードと英語キーボードの共存(Windows) _ てく2テック によると、Windows 11だとキーボードレイアウトに「接続済みキーボードレイアウトを使用する」の選択肢が増えており、これを選択しておくと i8042prt のレジストリにOverrideKeyboardTypeOverrideKeyboardSubtypeが生えてこないらしい。

手順

  1. Windowsの言語設定から、キーボードレイアウトを「日本語キーボード(106/109 キー)」に設定する
  2. デバイスマネージャーの「キーボード > HIDキーボードデバイス」から各キーボードの「デバイス インスタンス パス」を控える
  3. レジストリ登録のスクリプトを作成する(一旦 regedit してレジストリキーを確認しながら作成)(既存のエントリをエクスポートして改造したほうが安全)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
Windows Registry Editor Version 5.00

; 全体設定から余計なOverride設定を消す
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters]
"OverrideKeyboardType"=-
"OverrideKeyboardSubtype"=-
"LayerDriver KOR"=-

; USキーボードのキー配列を上書きする
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\<「2.で確認したデバイス インスタンス パス>\Device Parameters]
"KeyboardSubtypeOverride"=dword:00000000
"KeyboardTypeOverride"=dword:00000004
  1. 「3.」で作成したスクリプトを実行
  2. PC再起動

これでJISキーボード・USキーボード両方を繋いだ状態でそれぞれ印字通りの入力ができるようになった。

先人たちの努力や関連情報

若干関係のない(脇道に逸れた)情報も混ざってる