(2021.1)
Windows 10は大型アップデートのたびにそれなりに挙動が変わっている。ヴァージョン 20H2 October 2020 Update でも動作する、キーボード配列を入れ替える方法について確認した。
Windows 7 までは, [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000411
] ディレクトリの Layout File
で指定されているファイル名 <kbdjpn.dll
> を書き換えればよかった。Windows 10 では正常に動かない。
昔から多くのキーマップ変更ソフトがある。AutoHotkey や最近では PowerToys (Windows 10 ヴァージョン1903 May 2019 Update以降で動作) など。
現代は, UWPアプリ (≒ Microsoft Store アプリ) が鬼門。権限昇格時の対応もある。ユーザ空間のアプリケーションで完璧にこなすのは難しい。
AutoHotkey in Windows 10 - Hotkeys not working in some applications
Windows 10 の IME (テキストサービス) も, 直接入力時は手が出せないし, そもそも Windows における IME の機能はテキスト編集であって, キー押下げ・離すには関与できない。
以降の解説では、Windows 10の設定やキーボードレイアウト定義ファイルで何とかする。
Windows 10では、言語パックをインストールすることで、ユーザは複数の言語を使える。
Windows 10, 設定 > 時刻と言語 > [言語]タブ (Settings > Time & Language > Language) に言語が列挙される。
ここで言語を追加したりできる。Windows 10 の "言語" は、言語と地域がセットになったもの (ロケール)。日本語は地域の区別がなく "ja
", 英語は "en-GB
" など。
キーボードは、設定画面としては、言語にぶら下がるようになっている。「言語のオプション」(Language options) で追加できる。
キーボードとして何を追加できるかは、ロケールによって決まっている。
日本語の場合は IME (テキストサービス; text service) しか表示されない。レジストリを弄ってキーボード配列を無理やり追加しても、言語バーから選択できず、使えない。
参考: レジストリの場所は [HKEY_CURRENT_USER\Control Panel\International\User Profile
]. ユーザ単位。言語のオプションには表示されるが, そこまで。
英語などの場合は、キーボードとして、キーボード配列 (keyboard layout) の一覧から選ぶ。複数も可。それぞれキーボード配列は, (過去との互換性のため) 言語属性を持っているが、異なる言語からでも使える。
ユーザは, Windows 10 のキーボード配列 (keyboard layout) とテキストサービス (text service) について、言語バーから、または [Win] + space キーで切り替えることができる。
設定 > 時刻と言語 > [言語]タブ, 画面上部にある "キーボード" から、別の設定画面に進める。
既定の入力方式の上書き (Override for default input method) で、キーボード配列 / テキストサービスを選べるが、やはり、ただ一つしか選べない。
なので、IME がどのキーボード配列を使うかが選べない。IME とキーボード配列は同列ではないのに、このような画面構成になっているのが混乱している。
Windows では, それぞれのテキストサービスは, TIP_KEYBOARD
, TIP_SPEECH
または TIP_HANDWRITING
のいずれか一つのカテゴリを持つ。TIP_KEYBOARD
カテゴリのテキストサービスが IME と呼ばれる。
Windows の内部設計上、テキストサービスはカテゴリごとに active にできるようになっている。しかし、言語バーや "キーボード" 設定画面の作りから、ユーザは同時にはただ一つしか選ぶことができない。これは酷い。
この設定は, Windows 10 ヴァージョン 1809 以降で対応.
日本向けの特別な機能として、上記のキーボードとは別に、ハードウェアキーボードレイアウトの機能がある。
管理者権限で「言語のオプション: 日本語」を開くと, [レイアウトを変更する] ボタンが表示される。すごい決め打ちで, 日本語キーボード (106/109キー), USキーボード(101/102キー) の二つから選べる.
管理者権限でしか変更できない。その他のキーボード配列が選べない。
Dvorak 配列にしてみよう。実は, 上記のハードウェアキーボードレイアウトについては、内部ではどのようなキーボード配列でも設定できる。設定画面に問題がある。
レジストリを直接編集するしかない。管理者権限が必要.
この作業の前に、上記の設定画面からハードウェアキーボードレイアウトを少なくとも1回、変更しておくこと。この操作によりレジストリにエントリが作られる. あと、別の言語を追加し, QWERTY キーボードを追加して切り替えられるようにしておくと, もしもの際に役に立つ。
変更するレジストリの場所は [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters
]. LayerDriver JPN
というズバリ日本専用の key がある. 106キーボードだと kbd106.dll
という値になっているはず。
これを kbddv.dll
に書き換えるだけ。次の内容で .reg ファイルを作り、レジストリエディタでインポートしてもよい。
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters] "PollingIterations"=dword:00002ee0 "PollingIterationsMaximum"=dword:00002ee0 "ResendIterations"=dword:00000003 "LayerDriver JPN"="kbddv.dll" "LayerDriver KOR"="kbd101a.dll" "OverrideKeyboardIdentifier"="PCAT_106KEY" "OverrideKeyboardType"=dword:00000007 "OverrideKeyboardSubtype"=dword:00000002
更新したらPC を再起動.
Microsoft Keyboard Layout Creator を使えば、どのような配列も作れる。しかも, .dll ファイルのインストーラまで作ってくれる.
全部説明すると長くなるが、File > [Load Existing Keyboard...] で元にする配列を読み込み、適宜修正して, Project > [Build DLL and Setup Package] で出力する。
32bit, 64bit アプリケーションのために DLL を二つインストールする必要がある。それも自動でしてくれる setup.exe
が生成される.
管理者権限で実行するとインストールされる。コントロールパネルからアンインストールも可能。よく出来てる。
c:\windows\system32
と c:\windows\SysWOW64
の2ヶ所にインストールされる。前者が64bit、後者が32bit.
レジストリ上は, [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\a0000476
] 辺りに登録されたうえで, ユーザの言語 (ロケール) 設定から参照される。
後は, 上のレジストリ LayerDriver JPN
にこいつを指定してやれば OK.
制限: 図形文字キーについてだけしか変更できない。こちらも本当は, .dll は制御キーも対応しているのに, Keyboard Layout Creator のユーザインタフェイスの制限。
制御キーの部分は、昔からの機能が Windows 10 でも生きている。[Caps Lock] と [Ctrl] の入替えもしてみよう。
やはり管理者権限が必要.
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout
] ディレクトリに Scancode Map
という key を作ればよい。Keyboard Layout
が単数形なのに注意。
ググると大量に解説ページが出てくるので割愛。と思ったが、意外と間違っているページがチラホラ。あと, ほとんどの解説ページでは値の内容の説明がない。しょうがないな。
AutoHotkey は動作方法が違うので、混同していたら, そっと閉じるのがよい.
ちゃんとしているページ;
レジストリ変更の補助ソフト; Windows 10でも利用可能. KeySwap for XP
公式の解説; Keyboard and mouse class drivers - Windows drivers | Microsoft Docs
スキャンコードの一覧はこちら; Japanese Keyboard (layout and scancode)
Windows7でのキーボードレイアウトの指定 | untitled document .inf ファイルの作り方も.