使用带有表达式的 ifwinactive 的自动热键不起作用

autohotkeys using ifwinactive with expression not working

我正在使用 AutoHotKeys 来测试 window 是否与表达式一起处于活动状态。我似乎无法让它工作。我将表达式分配给一个变量,然后测试 ifWinActive 和变量。 AutoHotKeys 似乎无法正确评估表达式。这是我的脚本:

^W::
;hotkey always fires

done = false


SetTimer, CheckPopups, 10000    ; check every 10 seconds for window
CheckPopups:    
this := (done != true)

#IfWinActive "Volume Spike - Down" and this 
{
;specific lines only when active window is true and done is false
msgbox hello
done := true

}
IfWinNotActive Volume Spike - Down
{
done = false
}

当我启动脚本并且 window 未激活时,它会显示消息框 Hello。然后 10 秒后它再次显示。如果 window 处于活动状态且 done = false,它应该只显示消息框。知道我做错了什么吗?

您正在使用 #IfWinActive,即 a directive used to create conditional hotkeys。您应该改用 IfWinActive

您还可以在 if 子句中使用函数版本 WinActive()。在我看来,它看起来更干净了。

这是一个简短的例子:

#Persistent

done := false
SetTimer, CheckPopups, 1000 ; Check every second for window
return

CheckPopups:

    if ( WinActive("Volume Spike - Down") ) and (!done) {
        msgBox, Hello
        done := true
    } else {
        done := false
    }

return