2022/03/21

[win10] AutoHotKeyで複数ウィンドウを対象にする

ショートカットキーのアサインを自分の好きに設定したいことがある。
カスタマイズできるアプリであればよいのだが、できないアプリの方が多いだろう。

私は Windows10 を主に使っているので AutoHotkey を使っている。

AutoHotkey
https://www.autohotkey.com/

AutoHotkey の前は窓使いの憂鬱を使っていたと思うが、Windows7 くらいで開発が終わってしまったので乗り換えたような気がする。


AutoHotkey はいろいろできるのだが、私はキーアサインの変更でしか使っていない。

Hotkeys - Definition & Usage | AutoHotkey
https://www.autohotkey.com/docs/Hotkeys.htm

CapsLock を Ctrl として使っているのだが、それは AutoHotkey ではなくレジストリで変更するタイプにしている。
Ctrlキーとの組み合わせも登録できるならよかったのだが、さすがにできない。

「Change Key」非常駐型でフリーのキー配置変更ソフト - 窓の杜
https://forest.watch.impress.co.jp/library/software/changekey/

Ctrl2cap - Windows Sysinternals | Microsoft Docs
https://docs.microsoft.com/ja-jp/sysinternals/downloads/ctrl2cap

キーの入替は AutoHotkey でもできるのだが、レジストリで変更しているのでアプリがなくても有効だし、なにより「強い」感じがする。

Remapping Keys (Keyboard, Mouse and Joystick) | AutoHotkey
https://www.autohotkey.com/docs/misc/Remap.htm#registry

 

 

AutoHotkey でも PowerToys でもだったが、 Ctrlキーを押すタイプのアサインをしていると、そのアサインを長押しすると Ctrlが抜けて文字がそのまま打ち込まれてしまうことがある。

たとえば Ctrl + n にカーソル移動を割り当てていた場合、 Ctrl + n を長押ししているとときどき「n」がそのまま打ち込まれてしまうのだ。

カーソル移動のキーは長押しすることが多いのだが、テキストエディタでこれが発生すると非常に困る。 Android Studio のように自動保存するタイプだと気付かずに保存されてしまうこともあるし。
レジストリでの変更が「強い」と思うのはこういうのがないところだろう。

 

AutoHotkey のことを調べたが解決しなさそうなので、ソースコードの編集をするアプリ以外は AutoHotkey を通すようにしてみようと考えた。
まあ AutoHotkey がどうやって処理しているのかは知らないのだけど、スルー条件に一致したら何もせずにアプリにキーが通知されるのではないだろうか。そうならば、テキストエディタならキーアサインの変更はだいたいできるので、面倒ではあるがアプリ側で対応すればよいと思う。

そんなわけで、私がよく使っている EmEditor, Visual Studio Code, Android Studio 以外を処理するように書いてみた。

#InstallKeybdHook

SendMode Input

#If !WinActive("ahk_exe emeditor.exe") and !WinActive("ahk_exe studio64.exe") and !WinActive("ahk_exe Code.exe")
    ^f::Send,{right}
    ^b::Send,{left}
    ^n::Send,{down}
    ^p::Send,{up}
    ^h::Send,{backspace}
#If

sc029::Send,{Esc}
^+f::Send,^{f}
^+b::Send,^{b}

 

最初、普通の if 文で書いていたのだがうまく動かずに悩んでしまった。 Hotkey の方は #If 文を使うのだった。

Ctrl+F をカーソル移動に割り当てると、検索をどのキーに割り当てるのかで悩むので、私は Ctrl+Shift+F にしている。
新規作成は Explorer の方でやるから Ctrl+N は使ってよいし、印刷もしないから Ctrl+P もよい。
Ctrl+B は何かというと、Excel でフォントを Bold にするときだろう。