◇ 目標の画面になるのを待って、処理を続けたい

Q:「Please Wait...」という画面になったところでマクロの動作を一旦止め、その表示が終わってから再開するにはどうすればいいですか。

A:画像比較や、画像検索を使う方法があります

(1) 画像の比較を使う方法
 「毎回同じ画像が、毎回同じ場所に出てくる」場合は、その部分をファイルに保存し comparefile 関数(V0.72 で機能追加)でファイルの比較をすることで、その画像が出ているかどうかを調べることができます。
 以下の例では、準備として、予め「Please Wait...」付近の画像を「c:\PleaseWait.bmp」というファイルに保存しておいたとします。
  :
:LOOP
delay 1000                  ; ループ中の時間待ち
Capture "c:\temp.bmp" 100,100 500,500   ; PleaseWait.bmp と同じ範囲の画面を c:\temp.bmp に保存
if (= (comparefile "c:\temp.bmp" "c:\PleaseWait.bmp") "True") goto :LOOP   : 二つの画像が同じ(「Please Wait」がまだ画面に出ている)なら、:LOOP に戻る
  :

(2) 画像の検索を使う方法
 出てくる場所が一定でない場合は、画面の中に問題の画像と同じ部分がないかどうか検索をし、無ければ次に進む、という方法があります。
 (1) と同様、予め「Please Wait...」付近の画像を「c:\PleaseWait.bmp」というファイルに保存しておいたとして、
  :
OpenGraph 1 "c:\PleaseWait.bmp"     ; c:\PleaseWait.bmp を1番のファイルとしてオープンする

:LOOP
delay 1000               ; ループ中の時間待ち
CaptureScreen "c:\screen.bmp"     ; 画面全体を c:\screen.bmp に保存
OpenGraph 2 "c:\screen.bmp"       ; c:\screen.bmp を2番のファイルとしてオープンする

set %0 (SearchGraph 2 1)        ; 2番の画像の中で、1番の画像を探し、その結果を変数 %0 に

CloseGraph 2              ; とりあえず2番のファイルをクローズ
if (<> %0 "False") goto :LOOP      ; 2番の画像の中に1番の画像がまだあれば、:LOOP へジャンプ。無くなっていれば、次へ進む
CloseGraph 1              ; 1番のファイルをクローズするのを忘れずに
  :

 当然ですが、比較や検索に使う画像ファイルは「毎回同じになる範囲」だけを保存したものにしてください。例えば、ウィンドウの四隅が丸まっている場合、ウィンドウ全体を保存してしまうと四隅の「ウィンドウの下にある部分」が画像に含まれてしまうため、その部分が違っていると「違う画像」と判断される危険があります。
 なお、comparefile が調べるのは「ファイルが同じかどうか」です。ここでは画像の比較をしていますが、画像ファイル以外の比較にも使えます。