https://learn.microsoft.com/ja-jp/sysinternals/downloads/ctrl2cap
昔から、上記のサイトで、キーボードのCapsLockキーをCtrlキーにするプログラムが公開されていた。
もともとSysinternalsで公開されていた keyboard classのフィルタドライバだったのだけど、Microsoftに吸収された際、フィルタドライバのソースコードの公開が無くなって、v2.0のままで公開されていた。
昨年v3.0になり、説明はないが、少なくとも再起動が必要とは書かれていない。実体がどうなったのか確認したら、フィルタドライバがインストールされた形跡はなく、レジストリのScancode Mapの変更ツールに改変されていた。だからv3.0説明ページでは、v2.0の時にあったデバイスドライバの解説がすっかり削られている。
v2.0時代のページはInternet archiveのページで確認できる。
v3.0では、以下のようにScancode Mapを変更している。Scancode Map変更の場合には、ログアウトしてログインしなおすか、再起動が必要であるが、残念ながらv3.0のページでは、いつから有効となるか書かれていない。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout"の"Scancode map"の内容
"Scancode Map"=hex:00 00 00 00 00 00 00 00 02 00 00 00 1d 00 3a 00 00 00 00 00
これを4バイト(8桁)ずつのブロックに分けると、以下のような意味になります。
00 00 00 00 :ヘッダー(バージョン)
00 00 00 00 :ヘッダー(フラグ)
02 00 00 00 :エントリ数(変更するキーの数「1」 + 末尾の終了マーク「1」 = 計2個)
1d 00 3a 00 :キーの変更内容
後半の 3a 00(0x003A) = 元のキー:Caps Lock
前半の 1d 00(0x001D) = 変更後の機能:Left Ctrl
00 00 00 00 :データ末尾を示す終了マーク
変更内容のまとめ
この設定により、キーボードの Caps Lock キーを押したときに Ctrl キーとして機能するようになっている。
Sysinternal時代に公開されていたソースコードは例えば、以下にコピーが置かれている。公式のものではないがCopyright表記から見て、オリジナルのコピーだと思う。ソースコード上では、CapsLockキーをLCtrlにするだけの機能であったことが確認できる。Ver 3.0で、その機能が失われていないことになるが、ファイル名 Ctrl2Capにすっかり騙されていたような気がする。CtrlキーをCapsLockキーにも変更するものだと思い込んでいた。
https://github.com/baohaojun/system-config/blob/master/gcode/Ctrl2Cap/SYS/ctrl2cap.c
2026年現在、デバイスドライバレベルで、キーリマップを実現するアプリは、nodokad2.sysを使っているのどか と、Interceptionデバイスドライバを使うkanata あるいは、AutoHotInterception経由で、Interceptionドライバを使うAutohotkeyぐらいだろうと思う。
Interceptionデバイスドライバの互換ドライバ OpenInputBridgeを当社では先月から公開している。kanataとの連動動作や、AutoHotInterceptionの動作確認実施済なので、ご参考まで。
