AutoHotkey で指定ウィンドウでのみリマップを無効にしたい

私は「Alt + W」に「Ctrl + F4」、つまりは「タブを閉じる」を割り当てているのだが、これだとアプリ中で Alt + W にショートカットキーを割り当てても動作しない(タブが閉じられてしまう)。このアプリ中でのみ Ctrl + F4 リマップを無効にしたかったのでメモ。

元々の設定

!w::Send ^{F4}

上記のとおり、単純なリマップ構文で Alt + W → Ctrl + F4 にリマップしている。

結論

以下のように「#IfWinNotActive」を使った。

#IfWinNotActive my task-management tool
!w::Send ^{F4}
#If

これはウィンドウタイトルが "my task-management tool" の時 以外に Alt + W → Ctrl + F4 リマップをする、という命令になる。

失敗例

思考過程的なものを残しておく。

失敗1. Return

最初に考えたのは「適用したくないケースは個別に除外すればいい」「除外として Return すればいい」と考えて、以下のように書いた。

!w::Send ^{F4}
#If WinActive("my task-management tool")
!w::Return
#If

これはダメだった。

リマップで Return すると その割り当てが押された時は何もしません(その割り当て本来の機能も無効にします) という意味になる。つまり my task-management tool ウィンドウの時は、Alt + W でタブクローズは起こらなくなったが、そもそも Alt + W 自体が転送されなくなる。

失敗2. Hotkey

次に考えたのが、Return じゃなくて「その割り当て本来の働きをそのまま使う」的な構文を使えばいいんじゃないか、だったが、そんな構文はなさそう。しかし Wiki を漁っていると、いけそうな構文があった。

この Hotkey は、ホットキー設定を部分的に on/off にしたりできるようだ。

早速読んでみたのだが……よくわからん。ピンと来ない。ハマりそう。いったんスキップ。

成功

もっと楽にできないか、と粘っていると、あ、#IfWinNotActive で省けばよくない?とひらめいた。

解決。