OpenInputBridge · のどか

Microsoft sysinternalsのctrl2capについて

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のページで確認できる。

https://web.archive.org/web/20240330025105/https://learn.microsoft.com/ja-jp/sysinternals/downloads/ctrl2cap

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の動作確認実施済なので、ご参考まで。

コメントを残す