Surface の外付けキーボードやリモート接続時のキーボードは、なぜ英語配列で認識されるのか
Surface の 外付けキーボードやリモート デスクトップ接続時に英語配列になってしまうのはなぜか
キーボードには、PS/2 接続のキーボードやノート PC のキーボードのように、デバイス固有のドライバーで動作する場合と、USB / Bluetooth キーボードのように、汎用ドライバーで動作する場合があります。
前者の場合は、専用のキーボード ドライバーをインストールすれば日本語配列で認識されます。
後者の場合は、レジストリに記録されているキーボード配列の情報を参照して認識されます。通常のPC では、これが日本語配列に設定された状態が初期設定になっています。
Surface は、上記のいずれにも該当しません。このため、Surface では、 USB / Bluetooth 接続の外付けキーボードからの入力や、リモート デスクトップ接続時のキー入力などは、レジストリ上の設定をそのまま反映し、英語配列で認識されます。
(ただし、タイプ カバーだけは別で、固有のドライバーを使用せず、かつ、レジストリが英語配列に設定された状態で、日本語版のタイプ カバーを日本語配列で正しく認識します。)
この問題を回避するためには、下記の KB 文書のとおり、Surface 側で以下のいずれかを実施する必要があります。
方法1: PS/2 キーボードのドライバーを上書きして強制的に日本語配列で認識させる
方法2: レジストリを日本語配列の設定に書き換える
<参考>
Windows 8 でキーボードが英語配列キーボードとして認識される
https://support.microsoft.com/en-us/kb/416037/ja
このうち、方法1は外付けキーボードに限定した対処法となり、リモート デスクトップの場合は効果がありません。方法2(レジストリの修正)の実施が必要です。
また、外付けキーボードについても、ドライバーを上書きしたキーボード以外のものを接続すると、英語配列になってしまいますので、方法 2 のほうが最終的に手間が少なくて済むかもしれません。
方法 2 : レジストリで日本語配列に設定する手順
(個々の値を変更する方法)
[HKLM\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters] 配下のレジストリ エントリを以下のように設定します。
エントリ 種類 値
LayerDriver JPN REG_SZ kbd106.dll
OverrideKeyboardIdentifier REG_SZ PCAT_106KEY
OverrideKeyboardSubtype DWORD 2
OverrideKeyboardType DWORD 7
(一括で設定する方法)
下記の -- の間の部分をテキスト エディターにコピーし、 ".reg" という拡張子で保存して実行後、再起動すると設定が反映されます。
-------------------------
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters]
"LayerDriver JPN"="kbd106.dll"
"OverrideKeyboardIdentifier"="PCAT_106KEY"
"OverrideKeyboardSubtype"=dword:00000002
"OverrideKeyboardType"=dword:00000007
-------------------------
なお、この部分の設定は、 Windows 10 では GUI 上からできるようになっているようですね。( Build 10049 でテスト)