用双百分号包裹是传统的 AHK,基本上没有必要再使用它了。包装双 % 的唯一原因是被困在过去的时代,或者有人可能会争辩说它在某些情况下写起来更方便,或者其他什么,但我不买它。
旧语法被表达式语法取代。
表达式语法更接近于许多其他语言的行为。 AHK 遗留语法真的是一团糟。
所有旧命令(例如 MsgBox)在每个参数上都使用旧的旧语法(除非另有说明)。
如果您在参数开头指定 % 后跟一个空格,则您将强制 AHK 计算该参数上的表达式,而不是将其作为旧文本参数读取。
示例:
MsgBox, 5+5
我们使用的是旧命令,我们没有以 % 和空格开头的参数,所以我们使用的是旧语法。 MsgBox 将打印文字文本 5+5 而不是 10。
MsgBox, % 5+5
同样,旧命令,但现在我们强制 AHK 在此处计算表达式,5+5。
表达式的评估结果将传递给 MsgBox 命令,MsgBox 将打印10。
如果我们想让 MsgBox 打印文字文本 5+5,并使用表达式语法来完成,我们会执行 MsgBox, % "5+5"。
表达式语法中的引号表示我们正在指定一个字符串。
那么问题来了,你要知道什么时候使用表达式语法,什么时候使用旧语法。
默认情况下,您基本上总是在表达式中。
您可以通过例如使用命令或= 来分配它。
如果您不清楚命令和函数之间的区别,这里有一个示例:
Command, % 7+3, % MyCoolArray[4], % SomeOtherNiceFunction(), % false
Function(7+3, MyCoolArray[4], SomeOtherNiceFunction(), false)
在命令中,我们指定了一个%,后跟一个空格来计算每个参数上的表达式,而在函数中,我们不必这样做,因为我们已经在一个表达式中。
如果您不清楚 = 和 := 之间的区别,
= 是旧版且已弃用,它将纯文本分配给变量
:= 分配结果变量的表达式。
所以这就是我可以从头顶上写的东西。
如果你有一些更复杂的例子,我可以尝试展示它们。也许将您可能使用的一些代码转换为表达式语法,使其 100% 摆脱遗留语法。
这里有一个很好的文档页面,您应该阅读一下:
https://www.autohotkey.com/docs/Language.htm