PowershellでWindowsのCapsLockキーをCtrlキーに変更する

Windowsのキーマッピングを変更するためには、専用のソフトを使うかレジストリを変更すれば良い。

今回は参考サイトの記載をもとに、Powershellを用いて、レジストリを編集し、CapsLockキーをCtrlキーに変更する

変更履歴

2019-03-16 シンタックスハイライト追加と、解説用のコメントをはずしてコピペで実行できるように変更 2020-03-08 スキャンコードの指定順序の説明が誤っていたので修正

環境

もの 詳細
CPU Intel(R) Core(TM) i5-4460 CPU @ 3.20GHz*1
OS Microsoft Windows 8.1 Pro (6.3.9600)
Powershell 4.0

実行例

# CapsLock(00 1D)を左ctrl(00 3A)のキーへ変更

> Set-ItemProperty `
"Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout" `
-name "Scancode Map" -value (`
0x00,0x00,0x00,0x00,`
0x00,0x00,0x00,0x00,`
0x02,0x00,0x00,0x00,`
0x1D,0x00,0x3A,0x00,`
0x00,0x00,0x00,0x00 `
) -type binary

 # バイトの意味は上から以下の通り
 # header version[4byte] 
 # flags[4byte]
 # エントリ数(terminateを含んだ数)
 # CapsLock(00 3A)を左ctrl(00 1D)のキーへ変更
 # terminate (終了)

注意点

CPUによって、リトルエンディアンビッグエンディアンかが異なるそうなので、環境によっては読み替える必要がある。

参考

  1. 「Caps」と「Ctrl」の入れ替え
  2. WindowsでCapsLockにCtrlを割り当てて元のCtrlはそのままにする - アインシュタインの電話番号
  3. 碧落 - キーボード配列をWindows上で変更する
  4. Windows Vista/XP/2000/NT4.0のキー配列の変更方法
  5. レジストリアクセス(3) - PowerShell Memo
  6. バイトオーダ - ビッグエンディアン/リトルエディアン

感想、その他

  • キーコードがわかればいろいろ遊べそうな気はする。
  • Powershellのコマンドに連想配列でパラメータを渡せそう(分配演算子)なので、後で調べてシェルを書き換えてみるかもしれない。

*1:どうもCPUの種類によってバイナリの読み方が異なるそうなので、一応記載した。Intelはリトルエンディアンで読むらしい