サブルーチンを指定間隔で実行する
SetTimer, Label [, Period|On|Off, Priority]
引数名 | 説明 |
---|---|
Label |
ラベル名。ホットキーラベルなどでも可能。 「%LabelName%」のような変数参照でもよい。 |
Period|On|Off |
|
Priority | スレッドの割り込み優先度を指定。 |
タイマーを使用すれば、定期的に処理を実行したり、何かを監視したりすることができる。
タイマーを設定しても常駐にはならないので、ホットキーを登録しないスクリプトを常駐させたい場合#Persistent指令を記述する必要がある。
タイマーは、設定されたあと指定時間が経過してから初めて実行される。
Onにしたり間隔を設定したりすると、前回実行からの経過時間がリセットされ、現在の時間から指定時間経過後に次の実行が行われる。
タイマーは、前回のスレッドが開始されたときから指定時間経過後に次が実行される。
ただし、同じタイマースレッドが重複して実行されることはない。
同じタイマーのタイマースレッドが実行中に、次の時間が来た場合、既存のタイマースレッドの終了を待って即座に次のタイマースレッドが開始される。
Suspendされている間もタイマーは動き続ける。
Pauseされると全てのタイマーは停止する。
OSの制限により、NT系では10ミリ秒、9x系では55ミリ秒より短い間隔では実行できない。
これより短い間隔を指定した場合は、最小間隔に設定される。
タイマーやホットキーが確実に指定通りに実行されるようにするには、SetBatchLinesによる処理速度やThreadによるスレッド割り込みの設定などを調節する必要がある。
Gosub, Return, Threads, Menu, #Persistent
; Example #1: Close unwanted windows whenever they appear: SetTimer, CloseMailWarnings, 250 return CloseMailWarnings: WinClose, Microsoft Outlook, A timeout occured while communicating WinClose, Microsoft Outlook, A connection to the server could not be established return
; Example #2: Wait for a certain window to appear and then alert the user: SetTimer, Alert1, 500 return Alert1: IfWinNotExist, Video Conversion, Process Complete return ; Otherwise: SetTimer, Alert1, Off ; i.e. the timer turns itself off here. SplashTextOn, , , The video conversion is finished. Sleep, 3000 SplashTextOff return
; Example #3: Detection of single, double, and triple-presses of a hotkey. This ; allows a hotkey to perform a different operation depending on how many times ; you press it: #c:: if winc_presses > 0 ; SetTimer already started, so we log the keypress instead. { winc_presses += 1 return } ; Otherwise, this is the first press of a new series. Set count to 1 and start ; the timer: winc_presses = 1 SetTimer, KeyWinC, 400 ; Wait for more presses within a 400 millisecond window. return KeyWinC: SetTimer, KeyWinC, off if winc_presses = 1 ; The key was pressed once. { Run, m:\ ; Open a folder. } else if winc_presses = 2 ; The key was pressed twice. { Run, m:\multimedia ; Open a different folder. } else if winc_presses > 2 { MsgBox, Three or more clicks detected. } ; Regardless of which action above was triggered, reset the count to ; prepare for the next series of presses: winc_presses = 0 return