Windows bat: コマンドでキーボードレイアウト(CapsLockをCtrl、無変換を半角/全角キー)に変更する

本記事は下記の環境で検証しています。

  • Windows 10 Pro バージョン 1703 (OS ビルド 15063.540)

レジストリの設定を変更するため、失敗するとOSが壊れる恐れがあります。実施は十分に注意の上、自己責任でお願いします。

PCキーボードのキーのレイアウト変更は、レジストリでキーボードのスキャンコードのマッピングを変更することで実現します。(一応、レジストリの変更をしなくても、IMEの設定を変更すれば挙動を変更することはできます。)Windows10のメジャーアップデートが頻繁にあり、この設定はその都度クリアされてしまうため、本記事ではコマンドでの設定方法を説明します。設定内容の細かい話は下記外部サイトをご参照ください。

参考外部サイトリンク
Windows/TIPS/レジストリを修正してCAPSLOCKの割り当て変更 - yanor.net/wiki
CapsLock に Enter を割り当てて有効活用しよう - Qiita

当サイトでは(個人的に)使いやすくするため、下記のキーのレイアウトを変更します。

  • Caps Lock → Ctrl
  • 無変換 → 半角/全角

変更するレジストリの情報

レジストリーキー>
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout

<データ型>
バイナリ値

<名前>
Scancode Map

<値>
00 00 00 00 00 00 00 00
03 00 00 00 1d 00 3a 00
29 00 7b 00 00 00 00 00

コマンドで設定する方法

レジストリの操作はregコマンドを使います。

regコマンドのリファレンス
https://technet.microsoft.com/ja-jp/library/cc732643.aspx

今回はレジストリの既存のレジストリキーにスキャンコードマッピングのエントリを追加するため、addオプションを使います。この時注意が必要なのは、addオプションには管理者権限が必要なので、コマンドプロンプトを管理者として実行します。

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout" /v "Scancode Map" /t REG_BINARY /d 0000000000000000030000001D003A0029007B0000000000

レジストリーキー>
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout

<オプション>

  • /v: エントリ名「Scancode Map」
  • /t: データ型「REG_BINARY」
  • /d: データ(マッピング内容)「0000000000000000030000001D003A0029007B0000000000」

データに指定する値の詳細は、上記記載の外部サイトをご参照ください。
HKEY_LOCAL_MACHINEはPC内の全てのユーザに適用されます。HKEY_CURRENT_USER\Keyboard Layoutに設定するとユーザ毎に設定されるという記述を見ますが、筆者の環境ではレジストリに設定できても反映はされませんでした。

実行後はKeyboard LayoutにScancode Mapが追加されます。レジストリエディタ(regedit)を起動して正しく登録されているかを確認してみましょう。
f:id:ikuyani:20170823133253p:plain
f:id:ikuyani:20170823132810p:plain

コマンドだとコピペミスなどによりレジストリに思わぬ変更がされる恐れがあるため、batファイルにしておくとよいでしょう。batファイルの実行も管理者として実行する必要があります。

@setlocal enabledelayedexpansion
@echo off

rem エントリを追加するレジストリーキー
set V_KEYNAME="HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout"
rem エントリ名
set V_VALUENAME="Scancode Map"
rem データ型
set V_DATATYPE=REG_BINARY
rem データ
set V_DATA=0000000000000000030000001D003A0029007B0000000000
rem レジストリのバックアップファイルパス
set V_FILEPATH="%HOMEPATH%\KeyboardLayout_bk.reg"


rem 対象のレジストリーキーのバックアップ
reg export %V_KEYNAME% %V_FILEPATH%
rem エントリ追加/更新
reg add %V_KEYNAME% /v %V_VALUENAME% /t %V_DATATYPE% /d %V_DATA%

pause