ぺんちゃん日記

食と歴史と IT と。 Web の旅人ぺんじろうが好奇心赴くままに彷徨います 。

【AutoHotkey】タイマーを使って見る。

f:id:yasushiito:20190403184928p:plain
まだタイマーを使ったことがないので試してみます。
ウィンドウをスクロールさせるなどの操作をさせたい場合に待ち時間のタイミングの取り方をスリープで実装してしまうと気が利いた動作にできないことがあります。

今回はテストなので Firefox の生存確認をするスクリプトを組んでみます。

一秒ごとに Firefox のプロセスが生きていることを確認して、亡くなっていたら終了します。
タスクマネージャーなどでAutoHotkeyのプロセスを確認しながら、 Firefox を終了させるとこちらも終了することを確認します。

f:id:yasushiito:20190408191151p:plain
ご覧の通りAutoHotkeyが常駐してますね。
これが消えることを確認します 。

出来上がったのはこちら。

#Persistent
    SetTimer, timerTest, 1000
    Return
timerTest:
    prc := WinExist("ahk_exe firefox.exe")
    If (prc = 0) 
    {
        SetTimer, timerTest,Off
        ExitApp
    }

SetTimerでタイマーを設定します。
一定の時間が経過する毎にサブルーチンを呼び出します。
第1パラメータで呼び出されるサブルーチンのラベルを指定します。
第2パラメータでタイマーを発生させたい感覚を設定します。
単位はミリ秒なので1000で1秒となります。
詳しくはこちら。

ahkwiki.net

このサンプルですと一秒ごとにtimerTestが呼び出されることになります。
サブルーチン内で Firefox のプロセスを探して、見つからなかったらスクリプトを終了させます。

#Persistentはスクリプトを常駐プロセスをするために入れます。
今回のようにホットキーの定義がない場合はスクリプトの終わりまでたどり着くと終了してしまいます。
当たり前の話ですが終了されてしまうと監視することはできませんから常駐してもらいます。

ahkwiki.net

最大のはまりポイントはスクリプト終了前にタイマーをオフにしておくこと。

        SetTimer, timerTest,Off
        ExitApp

これをしておかないとタイマーが生きているので、 Auto HOT key のプロセスがいつまでも残ってしまいます。
これに気付かなくて1時間ほど溶かしました。
忘れるな タイマータスクの 後始末。