热键if语句使用多个条件

时间:2012-03-26 01:11:19

标签: conditional autohotkey

以下脚本可以使用control-l从任何地方打开Firefox的位置/“真棒”栏,除非使用Acrobat / Adob​​e阅读器。这是因为Acrobat中的control-l全屏显示。它有效,但它很难看,并使用嵌套的#ifWinNotActive

#IfWinNotActive, ahk_class MozillaWindowClass
#IfWinNotActive, ahk_class ahk_class AcrobatSDIWindow
^l::
WinActivate, ahk_class MozillaWindowClass
Send, ^l
return
#IfWinNotActive
#IfWinNotActive

以下代码替换不起作用。 Autohotkey不会抱怨错误,但忽略了!WinActive条件,而且似乎陷入无限循环。有什么想法吗? (我在结束括号之前和之后尝试了return语句。)

^l::
if (!WinActive(ahk_class,MozillaWindowClass)) and (!WinActive(ahk_class,AcrobatSDIWindow)) {
   WinActivate, ahk_class MozillaWindowClass
   Send, ^l
}
return

1 个答案:

答案 0 :(得分:7)

使用WinActive功能,您需要ahk_class MozillaWindowClass周围的引号 而且你不需要逗号。可以通过添加hook $来解决无限循环。

$^l::
if (!WinActive("ahk_class MozillaWindowClass"))
   and (!WinActive("ahk_class AcrobatSDIWindow")) 
{
   WinActivate, ahk_class MozillaWindowClass
   Send, ^l
} else
   Send, ^l
Return

但是,只有在使用过时的AutoHotkey basic时才需要这样写。
除非你有正当理由不升级到AutoHotkey_L(这不太可能) 您可以使用#If directive完成第一个示例中的尝试。

#If !WinActive("ahk_class CalcFrame") && !WinActive("ahk_class Notepad")

^l::
Run, notepad
Winwait, ahk_class Notepad
Send, test
Return

f1::traytip,, test

#If

在此示例中 Ctrl + L F1 仅在编码时起作用 计算器和/或记事本当前未激活,
否则他们就像通常那样行事。

对于不熟悉AutoHotkey简写的人,!表示不是。