2013-03-31 115 views
1

如何在包含單獨文件的程序中使用定時器? 這裏我舉的例子:AutoHotkey:定時器,標籤和包括

SCRIPT1

#include Script2.ahk 
#include Script3.ahk 
Timer() 
Hello() 
Exit 

SCRIPT2

global variable 

Hello(){ 
    MsgBox, Messsage1 
} 

Script3

Timer(){ 
    SetTimer, Message, 1000 
} 

Message: 
    MsgBox, Messsage2 
    SetTimer, Message, Off 
    return 

該程序將立即顯示消息框「Message2」並關閉。 但是我想在開始後一秒鐘收到「Message1」和「Message2」。這可以做到嗎?

+0

在。腳本3,你應該廣告在'Message:'標籤之前的'返回'。當您啓動腳本3時,腳本將一直運行到最後,因爲沒有任何回車來停止腳本執行所有操作。 –

回答

1

您需要閱讀兩個鏈接。

http://www.autohotkey.com/docs/commands/_Include.htm

當你#include文件,內容簡單地正是這樣的位置插入主腳本。所以你SCRIPT1樣子:

global variable 

Hello(){ 
    MsgBox, Messsage1 
} 

Timer(){ 
    SetTimer, Message, 1000 
} 

Message: 
    MsgBox, Messsage2 
    SetTimer, Message, Off 
    return 

Timer() 
Hello() 
Exit 

腳本啓動時,自動執行部分立即運行: http://www.autohotkey.com/docs/Scripts.htm#auto

所以一切到第一個返回運行(功能被跳過)。這就是爲什麼「消息2' 表示剛和‘消息1’從未顯示

解決方案:

如果您必須包含文件中的子程序的標籤,那麼你可以把#include s的腳本的底部時,自動執行部分後:

Timer() 
Hello() 
Exit 
#include Script2.ahk 
#include Script3.ahk 

但是,不要把子程序標籤內的#include文件,這個確切的原因當然,除非你明白在這個帖子中提到的後果好的做法

+0

感謝您的回答。它真的幫助我。 – Amadare42

+0

'但是,將子程序標籤放在#include文件中並不是一個好習慣,這正是爲什麼AHK需要允許將函數傳遞給SetTimer而不是僅傳遞標籤的原因。 – Synetech