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 で省けばよくない?とひらめいた。
解決。