質問: ### 前提・実現したいこと Windows 10 1607(いわゆるAnniversary Update)で日本語IMEをDvorak配列にしています。レジストリを用いて(方法は後述)変更していますが、Dvorak配列にはならずQWERTY配列になってしまう時があります。 ### 発生している問題 次のテキスト入力において、日本語入力がoff(直接入力モード)になっている場合、QWERTY配列になります。 * ストアアプリ内にある文字入力 * スタートメニューにあるCortanaの検索文字入力 * Microsoft Edgeのスタートにある「検索またはWebアドレスを入力」やアドレスバーへの入力 ストアアプリでは無い通常のアプリケーションでは発生せず、Dvorak配列として入力できます。 日本語入力がonの状態(日本語を入力できるモード)ではDvorak配列として入力できます。 Microsoft EdgeではWebページ上の入力に関しては、正常にDvorak配列になります。 ### 該当のレジストリ Dvorak配列にするために、レジストリを下記のように変更しています。(下記はregファイル形式) ``` Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000411] "Layout File"="KBDDV.DLL" ``` 00000411は日本語レイアウトを表しており、`Loyaut File`は`KBDJPN.DLL`がデフォルトですが、`KBDDV.DLL`に変更することで、日本語レイアウトがDvorak配列になります。Windows 7でも使える昔からの方法です。 ### 試したこと Anniversary Update適用前の1511では現象は発生していませんでした。 入力が「英語 米国-Dvorakキーボード」の場合は、Dvorak配列になっています。 スクリーンキーボードはQWERTY配列ですが、こちらはWindows 7の時からそうだったはずのため、関係はないかと思います。 その他、Anniversary Updateの情報がまだ少なくよくわかっていません。ストアアプリ周りのキーボード入力について、何か情報をお持ちの方は教えてください。 ### 補足情報(言語/FW/ツール等のバージョンなど) OS: Windows 10 1607 (いわゆるAnniversary Update) エディション: HomeおよびPro両方で発生 導入方法: 1511から1607にアップデートした場合も、1607のメディア使って新規にインストールした場合も発生 IME: Microsoft IME、Google 日本語入力、ATOK 2016のいずれでも発生 キーボード: JIS配列(106キーボード)
回答: **(Windows 10 Version 1809 は未確認です)** **【2018年10月05日追記】Windows 10 Version 1803 では、Windows 10 Version 1803 の累積更新プログラム KB4458469 の適用により有効になります。パッチ未適用の場合は、バグにより下記方法では正常に動作しません。** ~~【2018年7月13日追記】Windows 10 Version 1803 では、下記の方法を使ってもストアアプリではIMEオフ状態でDvorak配列になりません。1803以降で可能にする方法は現在わかっていません。~~ 方法がわかりましたので、記載します。 ### 注意事項(必ずお読み下さい) * **この方法は私が独自に調査し、実践した内容です。私の環境では正常に動作していますが、動作の保証は一切ありません。問題が発生した場合の責任は負いかねますので、自己責任で実施して下さい。** * **この方法にはレジストリの変更が含まれています。間違った設定を行った場合、サインインできないなどWindowsが使用できない状態になる場合があります。バックアップを取得し、リカバリーディスク等を用意した上で実施して下さい。** * **Windows 10 Version 1607, 1703, 1709, 1803(KB4458469適用済み) でのみ検証しています。それ以外のWindows(10 Versino 1511、8.1、7等)では検証していません。1809 以降は現在未確認です。** ### 方法 #### 事前準備 まず前準備を行います。 1. OSが「Windows 10 Version 1607」以上であることを確認します。「スタートメニュー」→「設定」→「システム」→「バージョン情報」にて、「バージョン」が「1607」以上である事を確認して下さい。もし、「1511」など古いバージョンの場合は、Windows Updateを実施して下さい。 2. `...\Keyboard Layouts\00000411`の`Layout File`レジストリを変更していた場合は、元の値`KBDJPN.DLL`に戻します。(今回の方法では、この部分のレジストリ変更は不要になりました。) 3. 「言語」で"English"を追加しておきます。言語"English"でサインイン等ができることを確認しておきます。設定等を間違った場合、言語"日本語"でまともに入力できなくなる場合がありますので、緊急手段として用意します。 #### 言語"日本語"のDvorak化方法 それでは本編です。 1. 「スタートメニュー」→「設定」→「時刻と言語」→「言語」→「日本語」→「オプション」より、"日本語"の「言語のオプション」を表示します。 2. 「言語のオプション」→「ハードウェア キーボード レイアウト」で、「キーボード レイアウト」を"英語キーボード (101/102 キー)"に変更します。サインアウトを求められますので、サインアウトし、サインインし直します。 3. レジストリ エディターを起動します。(Win+Rで「ファイル名を指定して実行」を起動し、`regedit`と入力、実行します。) 4. レジストリ エディターで`HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters`キーを開きます。このキーをエクスポートし、バックアップとして保存しておいてください。 5. 名前`LayoutDriver JPN`の値を`kbd101.dll`から`kbddv.dll`に変更します。 !Dvorak配列のドライバに設定 6. レジストリ エディターを閉じ、サインアウトします。 7. 再度サインインすると、"日本語"の入力が全てDvorak配列になります。 以上になります。反映はサインアウト・サインインのみでされるようですが、うまくいかない場合は一度再起動してみて下さい。 ### その他 * このレジストリの詳しい動作については、(Windows 7での内容ですが)下記ブログが参考になります。 Windows7でのキーボードレイアウトの指定 | untitled document * "kbd101.dll"には"kbddv.dll"にはない関数が一つだけ存在しており(キーボードレイアウトドライバーは共通で`KbdLayerDescriptor`が実装されているが、"kbd101.dll"や"kbd106.dll"には`KbdNlsLayerDescriptor`という別の関数も用意されている)、それが何に使われているかは不明です。この関数が呼ばれた場合、**最悪OSごと落ちる可能性があります**。 * IMEの種類(MS IME、Google日本語入力、ATOK)には依存しません。