◇ 目標の画面になるのを待って、処理を続けたい
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 が調べるのは「ファイルが同じかどうか」です。ここでは画像の比較をしていますが、画像ファイル以外の比較にも使えます。