ここから本文です

uwscのchkimgxを使ったマクロについて教えてくださいWhile True① ifb CHKIMGX("a.b...

mat********さん

2019/2/1021:36:50

uwscのchkimgxを使ったマクロについて教えてくださいWhile True① ifb CHKIMGX("a.bmp", w_id3, x1, y1, x2, y2, Detect_num, Th

reshold_delta, Target_color)
print "aを発見しました。" //画像を発見したらログに表示
MMV(G_IMGX_X+930,G_IMGX_Y)
Btn(Left,Click,G_IMGX_X+930,G_IMGX_Y)

FUKIDASI("a.bmp" + " : 発見[" + G_IMGX_X + "," + G_IMGX_Y + "]" ,200,0,0,16,"Arial","$00FF00","$808080",0)
While ChkImgx("ok.bmp")//okが消えたら

② elseif
BTN(LEFT,DOWN,1367,382,313)
MMV(1367,382,31)
MMV(1363,382,16)
MMV(1352,382,15)
MMV(1332,393,16)
MMV(1289,430,16)
MMV(1246,477,15)
MMV(1191,537,16)
MMV(1143,589,15)
MMV(1107,630,16)
MMV(1086,652,16)
MMV(1077,663,15)
MMV(1072,668,16)
MMV(1070,670,16)
BTN(LEFT,UP,1069,671,93)
Sleep(0.1)

③ else
CHKIMGX("b.bmp", w_id3, x1, y1, x2, y2, Detect_num, Threshold_delta, Target_color) =BREAK
print "bを発見しました。" //画像を発見したらログに表示
MMV(G_IMGX_X+930,G_IMGX_Y)
Btn(Left,Click,G_IMGX_X+930,G_IMGX_Y)
FUKIDASI("b.bmp" + " : 発見[" + G_IMGX_X + "," + G_IMGX_Y + "]" ,200,0,0,16,"Arial","$00FF00","$808080",0)

//bが消えるのを待つ
While ChkImg("b.bmp")
Sleep(0.1)
endif

wend

このようにしてもelseに記述がありませんと表示されます
①真の式で①がなければ②をずっと実行、①が出たら①をクリックし(出るたびずっとクリック)
③が出たところでループを終了してclickするようにしたいのですがどのように変えればよろしいでしょうか?

閲覧数:
328
回答数:
1
お礼:
500枚

違反報告

ベストアンサーに選ばれた回答

nak********さん

2019/2/1100:17:03

これは・・・少しばかり酷いですね。構文自体何一つ理解できていないのではないかと思わざる得ないです。
下手をすればchkimgxの導入や変数の宣言自体できてるかも怪しい・・・。

せめて変数とIF、WHILEの使い方くらいは学びましょう。解説されているサイトのいくつかサンプルを試して動作させてみれば、早ければ数十分もせず覚えれるはずなので。
とりあえずはchkimgxを使わずに試してみるのをおすすめします。(そこまで書けたならchkimgxに書き換えるのも容易なので)

《以下添削》

//◆ChkimgX.uwsの呼び出しがされていない
While True
//◆↓第二引数から第九引数までの変数が宣言されていない。
ifb CHKIMGX("a.bmp", w_id3, x1, y1, x2, y2, Detect_num, Threshold_delta, Target_color)//1
print "aを発見しました。"
//◆↓不要
MMV(G_IMGX_X+930,G_IMGX_Y)
Btn(Left,Click,G_IMGX_X+930,G_IMGX_Y)

FUKIDASI("a.bmp" + " : 発見[" + G_IMGX_X + "," + G_IMGX_Y + "]" ,200,0,0,16,"Arial","$00FF00","$808080",0)
//◆↓ok.bmpが表示されている間(Trueの間)ループ、となっている、wendがない(どこからどこまでをループするかの指定がない)
While ChkImgx("ok.bmp")//okが消えたら
//◆↓elseifの後に条件式がない、下のelseifにとってifbが存在しない。(whileが閉じられてないせい)
② elseif
BTN(LEFT,DOWN,1367,382,313)
MMV(1367,382,31)
MMV(1363,382,16)
MMV(1352,382,15)
MMV(1332,393,16)
MMV(1289,430,16)
MMV(1246,477,15)
MMV(1191,537,16)
MMV(1143,589,15)
MMV(1107,630,16)
MMV(1086,652,16)
MMV(1077,663,15)
MMV(1072,668,16)
MMV(1070,670,16)
BTN(LEFT,UP,1069,671,93)
Sleep(0.1)
//◆↓下のelseにとってifbが存在しない。(whileが閉じられてないせい)
③ else
//◆↓elseの後に条件式は入らない、breakはループを抜ける際の実行文(条件式で比較されるようなものではない)
CHKIMGX("b.bmp", w_id3, x1, y1, x2, y2, Detect_num, Threshold_delta, Target_color) =BREAK
print "bを発見しました。"
//◆↓不要
MMV(G_IMGX_X+930,G_IMGX_Y)
Btn(Left,Click,G_IMGX_X+930,G_IMGX_Y)
FUKIDASI("b.bmp" + " : 発見[" + G_IMGX_X + "," + G_IMGX_Y + "]" ,200,0,0,16,"Arial","$00FF00","$808080",0)

//◆↓wendがない
While ChkImg("b.bmp")
Sleep(0.1)
endif

wend


《基本的なIFB文》
ifb 条件式1
処理1
elseif 条件式2
処理2
else
処理3
endif

《基本的なWHILE文》
while 条件式 //条件式がTrueの間ループ
while-wend間をループ
wend

《サンプル》
while true //無限ループ
ifb chkimg("画像1")
print "画像1"
elseif chkimg("画像2")
print "画像2"
break //ループを抜ける
else
print "未検出"
endif
wend
print "ループ終了"

《おまけ》
//画像が表示されるまで待つ(!は否定、;は改行扱い、1行書きしたいときに用いる)
while !chkimg("画像");sleep(0.1);wend

  • 質問者

    mat********さん

    2019/2/1118:01:35

    ①のaの画像ががランダムで出現したりします それが出たらそのaの画像をクリックし、aの画像が出ていない時②のマウスのドラッグを行い続ける ここまでをループにしたいです
    ③の画像が出たら①、②のループを抜け出し、クリックして終了という流れを作ろうと思ってます
    変数の画像や、getidなどの変数などは行っています

    ②は画像が出ていない時ドラッグを行うようにすればいいのですか?chikmgはなしでやろうと思ってたので式の書き方をどのようにしたらいいか分かりません。この画像がないなら②を行うような形にすればよろしいのですか?
    あと不要と言われた画像.bmpのmmvとbtnは、窓4つでこていさせてやるつもりで、その位置を指定させてじゃないと左の窓の位置の場所をクリックしてしまいます( 実際の画像のある場所ではなく、その窓がモニター右側で固定させているため、左のx.y座標0.0なら合っています)その為
    Mmv
    Btnのx座標に+900とつけています)

  • その他の返信を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

あわせて知りたい

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる