- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:UWSCの繰り返しとその脱出について)
UWSCの繰り返しと脱出について
このQ&Aのポイント
- UWSCを使用して画像の操作を行う際に、繰り返しと脱出の方法について困っています。
- 画像Aが画面上にあるか確認し、ある場合は画像Bをクリックし、さらに画像Cが出てきた場合は画像Cもクリックするスクリプトを作成しましたが、エラーが発生してしまいます。
- 初心者のため、どの部分が間違っているのかわからず困っています。どなたか教えていただけると助かります。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
自分のところだと、IFBまたはIFの後にきちんと空白入れないと、構文として認識してくれないようです。 ×:IFB(条件 ○:IFB (条件 (エディタは強調表示してくれるので、認識されてると勘違いしますが。) また、最初の3行、初回にSleepが実行されて、以降Repeatから抜けちゃいます。 11行のElseIfの使い方も違います。 12行では既にRepeatから抜けてるので、Breakもエラーになります。 全角空白でインデントして書き直してみると、 REPEAT SLEEP(0.1) // 1.画像Aが画面上にあるか確認 IFB (CHKIMG("A.bmp") = TRUE) THEN // ある場合:2へ // 2.画像Aがある場合、必ず数秒後に画像Bが定位置に出てくるので、画像Bをクリック BTN(left,click,G_IMG_X,G_IMG_Y) SLEEP(1.5) BTN(left,click,1033,654) //画像Bの出てくる場所です // 3.画像Bをクリックした場合 IFB (CHKIMG("C.bmp") = TRUE) THEN // 画像Cが定位置に出てきたら、画像Cをクリック BTN(LEFT, CLICK, 997, 675) //画像Cの出てくる場所です ENDIF // 画像Cが出てこない場合は、1.へ戻る ELSE // ない場合:ループを終了 BREAK ENDIF UNTIL TRUE とか。
お礼
遅い時間にご回答いただき有難うございます。 よくよく見てみると、質問させて頂いた状況と実際とは少し違っていたため、ご回答を基に色々と試行錯誤していたら、お礼が遅れてしまいました。 大変申し訳ございませんでした。 画像Bをクリック後、ランダムに画像C or D or Eが定位置に出現するため、その処理を追加してみました。 また、画像Fが出現した場合、画像Fの少し下をクリックし、その処理が上手くいけば手順1に戻り、上手くいかない場合は、画像Gが定位置に出現するので、画像Gをクリックして手順1に戻りたいので、そちらも追記しました。 REPEAT SLEEP(0.1) // 1.画像Aが特定範囲の画面上にあるか確認 IFB (CHKIMG("A.bmp", 0, 472, 273, 1439, 822, 0, IMG_MSK_BGR4 ) = TRUE) THEN // ある場合:画像Aをクリックする BTN( LEFT, CLICK, G_IMG_X, G_IMG_Y ,100) // 2.画像Aクリック後に定位置に出てくる画像Bをクリック BTN (LEFT, CLICK, 1033, 608, 300) //処理にかかる時間として1.5秒待つ SLEEP(1.5) // 3.画像C(定位置)が出現した場合 IFB (CHKIMG("C.bmp",0, 472, 273, 1439, 822,, IMG_MSK_BGR4) = TRUE) THEN BTN(LEFT, CLICK, 1072, 358,100) //画像Cをクリック ENDIF // 3.画像D(定位置)が出現した場合 IFB (CHKIMG("D.bmp",0, 472, 273, 1439, 822,, IMG_MSK_BGR4) = TRUE) THEN BTN(LEFT, CLICK, 1072, 358,100) //画像Dをクリック ENDIF // 3.画像E(定位置)が出現した場合 IFB (CHKIMG("E.bmp",0, 472, 273, 1439, 822,, IMG_MSK_BGR4) = TRUE) THEN BTN(LEFT, CLICK, 1072, 358,100) //画像Eをクリック ENDIF //画像Fが出た場合 IFB (CHKIMG("F.bmp",0, 472, 273, 1439, 822,, IMG_MSK_BGR4) = TRUE) THEN //画像Fの少し下をクリック BTN( LEFT, CLICK, G_IMG_X, G_IMG_Y+130 ,100) //画像Fをクリックして画像Gが定位置に出現した場合 ELSEIF (CHKIMG("G.bmp",0, 472, 273, 1439, 822,, IMG_MSK_BGR4) = TRUE) THEN //画像Gをクリック BTN(LEFT, CLICK, 1007, 664,100) //画像Gをクリック //上記以外の場合、1.に戻る ELSE ENDIF ELSE // 画面上に画像Aがひとつもない場合:ループを終了 BREAK ENDIF UNTIL TRUE //画面上に画像Aがなくなるまでループを実施 これで、画像Aが画面に出現しなくなるまで、画像B~Fに関する処理が実施される(ループ)と思っていたのですが、実際にやってみると、画像A一つに対してしか処理が実行されず、ループになりませんでした。 そこで、上記をM.uwsとして保存し、下記のような処理を記載しましたら COUNT = ("A.bmp", 0, 472, 273, 1439, 822, -1, IMG_MSK_BGR4 ) For i = 0 TO COUNT Call M.uws NEXT としてみたところ、画像Bがある場所をひたすら連打したり、画像Aが画面上に残っているにも拘らず、ページを遷移したりしてしまいました。 長々と記載してしまいましたが、どこが誤っていて、上記のような現象が起こるのか、お時間がありましたらご教示頂けますと幸いです。 ご無理なようでしたら、新しい質問として再度立ち上げます。。。