UWSCの繰り返しと脱出について
- UWSCを使用して画像の操作を行う際に、繰り返しと脱出の方法について困っています。
- 画像Aが画面上にあるか確認し、ある場合は画像Bをクリックし、さらに画像Cが出てきた場合は画像Cもクリックするスクリプトを作成しましたが、エラーが発生してしまいます。
- 初心者のため、どの部分が間違っているのかわからず困っています。どなたか教えていただけると助かります。
- ベストアンサー
UWSCの繰り返しとその脱出について
今、以下のようなプログラムをUWSで書きたいと思っています。 1.画像Aが画面上にあるか確認 ある場合:2へ ない場合:ループを終了 2.画像Aがある場合、必ず数秒後に画像Bが定位置に出てくるので、画像Bをクリック 3.画像Bをクリックした場合 画像Cが定位置に出てきたら、画像Cをクリック 画像Cが出てこない場合は、1.へ戻る そこで、以下のようなスクリプト?を記載しましたが、「対応するIFBがない。10行目:ENDIF」と返されます。 ----------------------------- REPEAT SLEEP(0.1) UNTIL TRUE IFB(CHKIMG("A.bmp") = TRUE) THEN BTN(left,click,G_IMG_X,G_IMG_Y) SLEEP(1.5) BTN(left,click,1033,654) //画像Bの出てくる場所です IFB(CHKIMG("C.bmp") = TRUE) THEN BTN(LEFT, CLICK, 997, 675) //画像Cの出てくる場所です ENDIF ELSEIF BREAK ENDIF ----------------------------- ちなみに、画像Aは画面上に複数ある場合もあれば、一つもない場合もあり、出現数はランダムです。 複数ある場合は、全て画像Aクリック→画像Bクリックを行う必要があります(その際、画像Cが出てくれば、画像Cもクリックが必要になります)。 自分なりに調べてみたのですが、何分初心者なもので、なにがどう間違っているのかよく分かりません。 どなたかご教授頂けないでしょうか。宜しくお願いします。
- k1k9z9k6
- お礼率97% (45/46)
- その他(プログラミング・開発)
- 回答数1
- ありがとう数1
- みんなの回答 (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 とか。
関連するQ&A
- uwscについて
画像認識で質問があります。 画像Aがあった場合画像Aをクリックするのは出来るのですが 画像Aがあった場合画像Bをクリックする場合どのようにすればいいのでしょうか? IFB (CHKIMG("A.bmp")=TRUE) THEN SLEEP(0.3) //B、C出現までの間を調整 IFB (CHKIMG("B.bmp")=TRUE) THEN BTN(LEFT, CLICK, G_IMG_X, G_IMG_y) ELSEIF (CHKIMG("C.bmp")=TRUE) THEN BTN(LEFT, CLICK, G_IMG_X, G_IMG_y) ENDIF しらべてこのとおりやってみたら 最初のIFBに対してENDIFがないと言われてうまくいきません ちょっと調べたのですが分からなかったので助けてください
- 締切済み
- その他(プログラミング・開発)
- UWSCのスクリプトについて
画像Dを認識したら画面上に画像Bがあっても 処理Bを実行しない為にはどうしたら良いでしょうか。 -------- while True BTN(LEFT,click,150,10,110) //処理A Sleep(2) ifb CHKIMG("A.bmp") x=G_IMG_X y=G_IMG_Y BTN(left,click,x,y,110) Sleep(1.5) endif Ifb ChkImg("B.bmp") //処理B BTN(LEFT,click,1120,90,110) Sleep(1) KBD(VK_return,DOWN,30) endif ifb CHKIMG("C.bmp") //処理C x=G_IMG_X y=G_IMG_Y BTN(left,click,x,y,110) Sleep(1.5) wend --------
- ベストアンサー
- その他(プログラミング・開発)
- UWSCについて
画像がAになったらその画像をクリックしてBに変わったらまたクリックするというのを作りたいのですがどうにもA画像の時にクリックが連打になってしまします どこが悪いのでしょうか? While True Ifb ChkImg("A.bmp",0) BTN(LEFT,CLICK,G_IMG_X+5,G_IMG_Y+5,80) ChkImg("B.bmp",0) BTN(LEFT,CLICK,G_IMG_X+5,G_IMG_Y+5,80) ENDIF WEND
- ベストアンサー
- その他(プログラミング・開発)
- UWSCの画像認識について
質問させていただきます ifb CHKIMG("画像.bmp",) BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y) endif これを複数の画像でやりたいときは ifb CHKIMG("画像.bmp",) BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y) endif ifb CHKIMG("画像.bmp",) BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y) endif のようにしないとだめなのでしょうか? それとも ifb CHKIMG("画像.bmp",) CHKIMG("画像.bmp",) CHKIMG("画像.bmp",) CHKIMG("画像.bmp",) BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y) endif こんな感じにまとめる事はできるのでしょうか? 例として教えてもらえると助かります。 よろしくお願いします
- ベストアンサー
- その他(プログラミング・開発)
- UWSCのプログラミングついて教えてください。
UWSCについてです。 私は、UWSCをまだ1週間ほどしか触っていない超初心者です。 下記のようなプログラミングを組みたいと思っているので、プログラミング初挑戦なので右も左も良く分かっていません。 UWSCのプログラミングに詳しい方助けてください。 私の組みたいプログラミングは ("A.BMP",0)を無制限ループしつつ、("B.BMP",0)は2時間おきにループしつつ、("C.BMP",0)を30分間に30回実行する 場合のプログラミングです。【3つ同時進行です。】 宜しくお願いします。 while True ifb CHKIMG("A.BMP",0) x=G_IMG_X // 画像の座標をxへ代入 y=G_IMG_Y // 画像の座標をyへ代入 BTN(LEFT, CLICK, x, y, 80) endif ifb CHKIMG("B.BMP",0) x=G_IMG_X // 画像の座標をxへ代入 y=G_IMG_Y // 画像の座標をyへ代入 BTN(LEFT, CLICK, x, y, 80) endif ifb CHKIMG("C.BMP",0) x=G_IMG_X // 画像の座標をxへ代入 y=G_IMG_Y // 画像の座標をyへ代入 BTN(LEFT, CLICK, x, y, 80) endif wend
- 締切済み
- その他(プログラミング・開発)
- UWSCで指定箇所のみループ
UWSCで指定した箇所へ戻ってループさせたいのですが、やり方がわかりません。 上手く説明ができないのですが… 例えば… while True Z地点 //Aの画像があればクリックしてX地点へ ifb CHKIMG("画像A") x=G_IMG_X y=G_IMG_Y BTN(LEFT, CLICK, x, y, 300) endif X地点 //Bの画像があればクリック、無ければZ地点へ戻る ifb CHKIMG("画像B") x=G_IMG_X y=G_IMG_Y BTN(LEFT, CLICK, x, y, 300) endif wend という感じで…、状況によってプログラムの指定した行へ移動させたいのですが どうすれば良いのでしょうか? 上手く説明できなくてすみませんが、教えてください。 よろしくお願いします。
- 締切済み
- その他(プログラミング・開発)
- UWSC 画像認識で条件分岐
画像Aが出てくるまで待ち画面をクリック、その後、画像Bが出てくるまで待ち画面をクリック。 画像Aが現れなければ、画像Bが出てくるまで待ち、画像をクリックする。 という文を書きたいのですが、うまくいきません。 画像Aはランダムで現れます。画像Aが現れた場合、画面をクリックしない限り、画像Bは現れません。 以下の文では画像Aが現れない限りはうまく回るのですが、画像Aが現れるとそこで止まってしまいます。どこがまずいのでしょうか。 何分この手のものエクセルぐらいしか触ったことがなく困っています。よろしくお願いします。 // if chkimg("A.bmp")=true then btn(left,0,100,100,50) else repeat sleep(0.2) until chkimg("B.bmp")=true btn(left,0,100,100,50) endif //
- ベストアンサー
- その他(プログラミング・開発)
- UWSCのスクリプト作成について
UWSC初心者です。 画像を判別して、見つけたらクリックするものを作りました。 while True if GETKEYSTATE(VK_ESC) then exit ifb CHKIMG("目標.bmp") BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y) endif sleep(2) wend 目的は動きのある目標を認識してクリックしたいのですが、作り方が分からないので、とりあえず目標を画像判定で少しでもクリックできればと作りました。 でもやはり画像判定の場合は目標.bmpと一致でなければならないので、たまにしかクリックしてくれません。 なので、目標をいろいろな角度から画像保存し、数で攻めたいと思います。 目標.bmp→クリック ↓なし 目標1.bmp→クリック ↓なし 目標2.bmp→クリック というものを作りたいのですが、混乱してきて分からないので教えてください。
- 締切済み
- フリーウェア・フリーソフト
- uwscでマクロ作成
1画像Aが見つかったらそこをクリック×1 2画像Bが出てくるので画像Bをクリック×2 3ある座標をクリック×1 4再度画像Bをクリック×7 まったくの初心者ですが このようなマクロを作りたく思い作ってみたのですがまったくできません。。 if GETKEYSTATE(VK_ESC) then exit ifb CHKIMG("画像A",0) BTN(LEFT, CLICK, x, y, 80) ENDIF ifb CHKIMG("画像B",0) BTN(LEFT, CLICK, x, y, 80) BTN(LEFT, CLICK, x, y, 80) BTN(LEFT,CLICK,176,399,100) BTN(LEFT, CLICK, x, y, 80) BTN(LEFT, CLICK, x, y, 80) BTN(LEFT, CLICK, x, y, 80) BTN(LEFT, CLICK, x, y, 80) BTN(LEFT, CLICK, x, y, 80) BTN(LEFT, CLICK, x, y, 80) BTN(LEFT, CLICK, x, y, 80) ENDIF このような感じです 画像はペイントで切り取ったものを使い、uwsファイルと同じ所に入れていますが違う所で引っかかるようです。
- 締切済み
- その他(インターネット・Webサービス)
- UWSCのスクリプトについて
日々のルーチンワークで退屈な作業をPC様にやっていただこうとUWSCの学習をしています。 以前は記録して使用したのですが不定期にマウス座標が変わるようになったため.UWSを書いてみてます。ど素人ですがやっと画像をファイルに格納して作業ができるまでになりました。 使用環境はwin7です。 質問内容ですが手間が多いのと説明がへたなのでプログラムより質問内容が理解できないほうが心配です。出来るだけ分っていただけるように頑張りますのでご教授お願いします。 画像A 画像B 画像C 以上がWEBブラウザ上に表示されたときに以下の作業をします。 オーダーフォームの利用規約同意[ボタン]、確認画像[ボタン]、購入画像[ボタン]を押下する。 どれが表示されてもオーダーフォームの作業が発生します。 ほかの質問で以下のような回答があったので参考にしたのですが繰り返し探してはくれるのですが オーダーフォームの作業を書くことができません。。 ≪転記≫ WHILE (TRUE) //WENDまで無限ループ IFB (CHKIMG("A.bmp")=TRUE) THEN CHKIMG("1.bmp") //「1」画像の座標を調べる BTN(LEFT, G_IMG_X, G_IMG_Y) ELSE IFB (CHKIMG("B.bmp")=TRUE) THEN CHKIMG("2.bmp") //「2」画像の座標を調べる BTN(LEFT, G_IMG_X, G_IMG_Y) ELSE ・・・以下略・・・ ENDIF WEND 自分でも頑張ってみますがご教授頂けると幸いです。 よろしくおねがいいたします。
- ベストアンサー
- SE・インフラ・Webエンジニア
お礼
遅い時間にご回答いただき有難うございます。 よくよく見てみると、質問させて頂いた状況と実際とは少し違っていたため、ご回答を基に色々と試行錯誤していたら、お礼が遅れてしまいました。 大変申し訳ございませんでした。 画像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が画面上に残っているにも拘らず、ページを遷移したりしてしまいました。 長々と記載してしまいましたが、どこが誤っていて、上記のような現象が起こるのか、お時間がありましたらご教示頂けますと幸いです。 ご無理なようでしたら、新しい質問として再度立ち上げます。。。