特殊なキーボードを入手したのですが、右Ctrlキーの代わりに右Windowsキーが配置されています。PowerToysを使ってリマップしましたが、これはPowerToysがバックグラウンドで実行されている間しか機能しません。
レジストリを直接変更するために、以下のPowerShellスクリプトを試しましたが、うまくいきませんでした。おそらくスキャンコードのインデックス指定が間違っていたのだと思います。
$Remap = New-Object -TypeName byte[] -ArgumentList 100
$Remap = 0xA3;
$key = 'HKLM:\SYSTEM\CurrentControlSet\Control\Keyboard Layout'
New-ItemProperty -Path $key -Name 'ScanCode Map' -Value $Remap -Force
最終的に、フリーソフトの「KeyTweak」を使ってこの問題を解決できました。
KeyTweakで生成されたScancode Map
をレジストリに適用したところ、期待通りに動作しました。
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,1d,e0,5c,e0,00,00,00,00
これで、右Windowsキーが完全に右Ctrlキーとして機能するようになりました。
追記:
実は、このキーボードにはもう一つ問題がありました。Backspaceキーの上にPrintScreenキーがあり、Deleteキーを使うにはfn + Backspace
を押す必要があったのです。私はDeleteキーを多用するため、PrintScreenキーをDeleteキーにリマップしました。
しかし、そうすると今度はノートPC本体のPrintScreenキーもDeleteになってしまいました。私のノートPCではfn + PrintScreen
がInsertキー(ここ20年ほど使った記憶がないキー)に割り当てられています。
そこで、最終的に以下の3つのキーをリマップすることで、理想的な環境を構築できました。
- PrintScreen → Insert
- 右Windows → 右Ctrl
- (旧)PrintScreen → Delete (※訳注: 文脈から推測される3つ目のリマップ)
最終的なScancode Map
は以下の通りです。
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,04,00,00,00,53,e0,37,e0,1d,e0,5c,e0,37,e0,52,e0,00,00,00,00
この設定を.reg
ファイルとしてエクスポートしておけば、将来PCを新しくした際もKeyTweakなしで簡単に設定を復元できます。同じ問題を持つ方の参考になれば幸いです。