为什么命令不在SetTimer之后运行?

为什么命令不在SetTimer之后运行?,timer,autohotkey,Timer,Autohotkey,此代码将显示消息框: Msgbox, Hello SetTimer, CheckTime, 1000 ; updates every 1 second CheckTime: Return 但这并不是: SetTimer, CheckTime, 1000 ; updates every 1 second CheckTime: Return Msgbox, Hello 为什么呢?我看不出命令有什么特别之处。只要找到第一个Return关键字,脚本就会停止执行新行 第一个顶级返回之后的所有内容将

此代码将显示消息框:

Msgbox, Hello

SetTimer, CheckTime, 1000 ; updates every 1 second
CheckTime:
Return
但这并不是:

SetTimer, CheckTime, 1000 ; updates every 1 second
CheckTime:
Return

Msgbox, Hello

为什么呢?我看不出命令有什么特别之处。

只要找到第一个
Return
关键字,脚本就会停止执行新行

第一个顶级
返回之后的所有内容将在初始执行时被忽略,除非已从上面的行调用它

看看这段代码:

MsgBox, I'll run!!!

MsgBox, Me 2!!!

Gosub, PastReturn

overPastReturn()

MsgBox, Me 5!!!

Return ; This is the first Top Level Return. Code Stops Executing Here.

MsgBox, Not Me!!!

PastReturn:
    MsgBox, Me 3!!!
Return ; This Return Belongs to PastReturn Label.

MsgBox, Not Me 2!!!

overPastReturn(){
    MsgBox, Me 4!!!
}

我明白了,但这也很奇怪,因为您可以有多个独立的
#If
函数,并且每个函数都需要
返回。我有一个多年来一直在使用的完整脚本,它包含了很多顶级
return
s#如果与
return
关键字无关,那么它就是热键的上下文。这并不奇怪。正如预期的那样,许多语言在主线程中都会这样做。我仍然不明白为什么在
return
之后脚本应该停止。有3个顶级
return
s,但它仍然有效。在该脚本上自动执行的唯一部分是:
LastInteraction:=A_TickCount
SetTimer,CheckIdle,1000;每隔1秒
脚本的其余部分将通过其他方式调用。假设您在返回后移动setTimer;它永远不会被称为。空间热键仍然可以工作。