キーボードの配列を日本語←→英語に変更

日本語のキーボードを使用しているが英語配列キーボード、英語のキーボートを使用しているが日本語配列キーボードの入力になってしまうことが環境によって稀に発生します。
# USB 接続のキーボードだと想定しているキーボードの配列にならないことがたまにあるもので。

このようになった場合にキーボードの配列を変更するための方法をメモとして。
# Surface Pro に日本語の Windows Server 2012 をインストールしたところ英語の Type Cover を日本語配列で認識してしまったもので。

以下の技術文書に方法が記述されています。

コンピューターに USB キーボードを接続したときに Windows で正しいキーボード レイアウトが使用されないことがある

日本語配列にする場合は[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters] 以下のレジストリを以下のように設定します。

名前 種類 データ
LayerDriver JPN REG_SZ kbd106.dll
OverrideKeyboardIdentifier REG_SZ PCAT_106KEY
OverrideKeyboardSubtype DWORD 2
OverrideKeyboardType DWORD 7

英語配列にする場合は以下のように設定します。

名前 種類 データ
LayerDriver JPN REG_SZ kbd101.dll
OverrideKeyboardIdentifier REG_SZ PCAT_101KEY
OverrideKeyboardSubtype DWORD 0
OverrideKeyboardType DWORD 7

頻繁にキーボードの配列を変更する場合には、reg コマンドでバッチを用意すると便利かもしれないですね。

REM 日本語配列
reg add HKLM\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters /f /v "LayerDriver JPN" /t REG_SZ /d kbd106.dll
reg add HKLM\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters /f /v "OverrideKeyboardIdentifier" /t REG_SZ /d PCAT_106KEY
reg
add HKLM\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters /f /v "OverrideKeyboardSubtype" /t REG_DWORD /d 2
reg add HKLM\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters /f /v "OverrideKeyboardType" /t REG_DWORD /d 7

REM 英語配列
reg add HKLM\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters /f /v "LayerDriver JPN" /t REG_SZ /d kbd101.dll
reg add HKLM\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters /f /v "OverrideKeyboardIdentifier" /t REG_SZ /d PCAT_101KEY
reg add HKLM\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters /f /v "OverrideKeyboardSubtype" /t REG_DWORD /d 0
reg add HKLM\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters /f /v "OverrideKeyboardType" /t REG_DWORD /d 7