一定時間ごとに処理をする方法

一定時間ごとに処理をさせるためにはSLEEP関数を利用すれば簡単に実現できます。

しかし、一定時間経過するまでの間に他の処理をさせようとすると単純なSLEEP関数ではどうにもなりません。

ここでは一定時間経過するまでに他の処理をすることも可能なサンプルを紹介します。

GETTIME関数は2000年1月1日から何秒経過したかを調べることができます。

この仕組みを利用し、現在の経過秒数から前回の経過秒数を引いて経過秒数を得ます。

GETTIME関数の仕様のため1秒単位の精度になります。

 

一定時間ごとに処理をするサンプル

基本的にループを考慮していますが1回だけの処理もできるようにしました。サンプル中のコメントを参考にしてください。

interval = 10 // 何秒ごとに処理をするか
lastTime = GETTIME() // 初回で予期せぬ動作を防ぐために必要
WHILE !GETKEYSTATE(VK_ESC) // ESCキーを押すことでスクリプトのループから抜ける
 now = GETTIME() // 現在の経過秒数を取得
 IFB (now - lastTime) >= interval // 一定時間以上経過したかチェック
  // ここに処理を書く
  PRINT "一定時間経過しました" // 確認用にメッセージを表示させてみる
  lastTime = GETTIME() // 前回の処理完了時刻を更新
  // BREAK 1 // この命令を有効にすれば1回だけしか処理をしなくなる
 ENDIF
 SLEEP(1) // 1秒ごとに調べるためにウェイトを入れる
WEND

 

GETTIME関数リファレンス

GETTIME関数のリファレンスをマニュアルから転載します。

戻値 = GETTIME( [±n日, 基準日] ) 
引数
 ±n日: nを指定すると当日もしくは基準日からプラスマイナス n日とする、小数点以下は時間(デフォルト=0)
 基準日: 指定された日付を基に日付を設定する (デフォルト=当日)
      ("YYYYMMDD" or "YYYY/MM/DD" or "YYYY-MM-DD" or "YYYYMMDDHHNNSS" or "YYYY/MM/DD HH:NN:SS")
戻値
 2000年1月1日からの秒数を返す

 値がセットされる特殊変数
  G_TIME_YY    // 年
  G_TIME_MM    // 月
  G_TIME_DD    // 日
  G_TIME_HH    // 時
  G_TIME_NN    // 分
  G_TIME_SS    // 秒
  G_TIME_ZZ    // ミリ秒
  G_TIME_WW    // 曜日 (0:日曜....6:土曜)
  G_TIME_YY2   // 年をxxの文字型
  G_TIME_MM2    // 月をxxの文字型
  G_TIME_DD2   // 日をxxの文字型
  G_TIME_HH2   // 時をxxの文字型
  G_TIME_NN2   // 分をxxの文字型
  G_TIME_SS2   // 秒をxxの文字型
  G_TIME_ZZ2   // ミリ秒をxxxの文字型
  G_TIME_YY4   // 年をxxxxの文字型

 

BREAK命令リファレンス

BREAK命令のリファレンスをマニュアルから転載します。

 BREAK [定数]   
 多重ループ中にて定数が指定された場合に、その定数分ループをBREAKする (デフォルト 定数=1)

 

任意のキーを押している間、マウスの左クリックを連打させる方法

クリックを連打するのも面倒なので自動化させましょう。

連打のONとOFFを簡単に切り替えられるよう、任煮のキーを押している間だけ連打させるようにします。

スクリプトの中身で難しいことはしていません。

任意のキーが押されているか監視し、押されている間はクリックを連打させるだけです。

使い勝手が良くなるよう、任意のキーを変更させるのもいいでしょう。

 

任意のキーを押している間、マウスの左クリックを連打させるサンプル

Shiftキーでマウスの左クリックを連打します。

ESCキーで終了するようにしました。

PRINT "ESCキーで終了します"
WHILE !GETKEYSTATE(VK_ESC)
 WHILE GETKEYSTATE(VK_SHIFT) // Shiftキーで連打開始
  BTN(LEFT, CLICK)
  SLEEP(0.1) // 連打する間隔を指定(秒)
 WEND
 SLEEP(0.1)
WEND

 

他に使われそうな仮想キーコード

VK_ALT
VK_CTRL
VK_RCTRL

一定時間何もしない方法

一定時間何もさせないためにはSLEEP関数を利用します。

引数で何秒待機するか指定できます。このとき小数点以下の値を指定することも可能です。

処理をループさせる場合はSLEEP関数を利用して待機状態を入れるようにしましょう。そうしないとCPU負荷がすごいことになるかもしれません。

 

一定時間何もしないサンプル

SLEEP(60) // 60秒、つまり1分間何もしない

 

処理のループにSLEEP関数を入れるサンプル

PRINT "ESCキーで終了します"
WHILE !GETKEYSTATE(VK_ESC)
 // ここに処理を書く
 SLEEP(0.1)
WEND

 

SLEEP関数リファレンス

SLEEP関数のリファレンスをマニュアルから転載します。

SLEEP( 秒 )
引数
 秒: スリープする秒数(最小=0.001)