質問: Autohotkeyで以下のようなスクリプトを使っています。 ``` ; Google IMEの変換中だとCtrl+kでカタカナに #If WinExist("ahk_class MSCTFIME Composition") >^k::F7 ; xyzzy 以外ではEmacs風のキーバインド #If not WinActive("ahk_exe xyzzy.exe") >^a::Home >^e::End >^f::Right >^b::Left >^p::Up >^n::Down >^h::BackSpace >^d::Del >^y::^v >^k::Send "+{END}^x" >^l::Send "+{HOME}^x" #If ``` これでGoogle IMEの入力ウィンドウがあるとき(=変換中)の時はF7が発火され、 それ以外の時は`+{END}^x`が呼び出されると思ったのですが、変換中であってもF7が呼び出されませんでした。 `>^k::Send "+{END}^x"`をコメントアウトすれば、正常にF7が呼び出されるのですが上のコードは何が間違っているのでしょうか? ヘルプのVariant Hotkeys の項目には > > If more than one variant is eligible to fire, only the one closest to the top of the script will fire. > > > > > とありますので順序は間違ってないと思うのですが。
回答: 質問での書き方で`else`の機能を備えるのかと勘違いしていたのが原因でした。 ``` #If !WinActive("ahk_exe xyzzy.exe") and !WinExist("ahk_class MSCTFIME Composition") ``` 冗長な表記ですが上記のように条件文を追加することで期待する動作になりました。