複数のキーボードレイアウトを共存させる方法が以前はできたはずだが、今はできなくなっている。
Windowsが認識しているキーボードの切替を自動化したため記事にしておく。バッチファイルを実行するだけでキーボードレイアウト変更→再起動して読み込みまでするので、30秒くらいは効率化できた気がする。
自動化前の話も書いているので、さっさと結論だけが知りたい人は、読み飛ばしてもらってもいい。
私の作業環境(ノートPCと外部キーボードのレイアウト不一致)
私がメインで使っているパソコンはCHUWI Aerobookだ。机で使用するときはディスプレイに接続し外部キーボード(日本語配列)を使用している。なので、キーボードレイアウトが不一致だ。
Aerobook | 英語配列 |
外部キーボード | 日本語配列 |
記号の場所が分からなくなって困る
ローマ字の部分は変わらないからいいが、あまり頻繁に使わない記号の配置までは覚えていない。レイアウトが違うままだと打ち間違えが発生し非効率なので、日本語⇔英語のレイアウトは切り替えて使用する。
GUIでのキーボードレイアウト切替(30秒くらい?)
GUIでも切替できるが、少なくとも30秒くらいはかかる。非常に面倒だ。一応操作方法を図解する
・Windowsキーを押して言語で検索。言語とキーボードのオプションを編集するをクリック。
・優先する言語まで移動して、日本語のオプションをクリックする。
・ハードウェア キーボード レイアウトまで移動して、レイアウトを変更するをクリックする。
・プルダウンで希望のレイアウトを選択して今すぐ再起動する。
キーボードレイアウト変更の自動化(バッチ化)
GUIでやっていた作業をバッチ化する。これで30秒かかっていた作業が1秒くらいになった。
このバッチはレジストリ値を変更するため、バックアップを取ってからやること。何かあっても私は責任を負えません。
先にバッチの中身を記載する
以下のコードを適当な場所に保存して(キーボードレイアウト変更.bat とか)管理者で実行するとプロンプトが出る。以下のキーを入力してEnterすると、再起動して対象のレイアウトに変更される。個人で利用するつもりだから例外処理などは一切してない。
日本語配列: j
英語配列 :e
何もしない:q
@echo off
SET /P ANSWER="選んでください。(j=日本語配列 e=英語配列 q=変更しないで終了):"
if /i {%ANSWER%}=={j} (goto :japan)
if /i {%ANSWER%}=={e} (goto :english)
if /i {%ANSWER%}=={q} (goto :quit)
:japan
@reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters" /v "LayerDriver JPN" /t "REG_SZ" /d "kbd106.dll" /f
@reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters" /v "OverrideKeyboardIdentifier" /t "REG_SZ" /d "PCAT_106KEY" /f
@reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters" /v "OverrideKeyboardSubtype" /t "REG_DWORD" /d "2" /f
@shutdown /r /t 0
goto quit
:english
@reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters" /v "LayerDriver JPN" /t "REG_SZ" /d "kbd101.dll" /f
@reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters" /v "OverrideKeyboardIdentifier" /t "REG_SZ" /d "PCAT_101KEY" /f
@reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters" /v "OverrideKeyboardSubtype" /t "REG_DWORD" /d "0" /f
@shutdown /r /t 0
goto quit
:quit
echo "終わります。"
バッチで変更している内容
GUIで変更してレジストリ比較したらこの辺が変わっているっぽかった。
効率化の効果
調査・作成・検証で大体1時間くらいかかった。毎回30秒の作業を短縮できたとして、自己満足のために計算してみる。
3600(秒) / 30(秒/回) =120 回で元が取れることになる。1日に1回は切り替えるから、少なくとも120日もあれば元が取れる。作ってよかったと言い聞かせよう。
PowerShellで書いている人がいた
再起動して読み込みまではしないが、PowerShellで書いている人を後になって見つけた。私は無駄な時間を使ったのだった。Powershellが使えない稀な環境の人には役に立つかな。
コメント