UWSCを使ったプログラム作成のためのマクロコード

このQ&Aのポイント
  • UWSCを使って黄色いpushボタンを左クリックすると赤いラインが上昇します。指定した色の位置で自動的に停止させるためにはRGB値を設定し、多数の色に対応できるように組み替える必要があります。
  • 現在、設定は1組のみであり、多数の色に対応するためにはマクロコードを変更する必要があります。
  • 変更する部分については具体的な説明が必要です。お力をお貸しください。
回答を見る
  • ベストアンサー

UWSC 用のマクロコードを教えてください

UWSC を使ったプログラムを作成しています。 黄色い部分の push ボタンを左クリックすると 赤いラインが上昇します。 それを決められた色のところまで自動で動くようにしたいのです。 今ある赤色ラインで止めたいのです。 黄色いpushは 10種類ほどあり 色が多数あります。 画像を習得してどの画像にも対応できるようにしたい。 赤いラインを止める場所を 色を指定して止める RGB値を設定して 毎回ここでクリックが外れるような設定 現在設定している状況は 1組のみの設定なのでこれを多数に対応できるように組み替えたいのです。 ************************************************ RGBcolor(x2+17,y4+40) ifb R >255 and G < 255 and B < 51 then u = true elseif R > 100 and G < 100 and B > 177 then u = true endif RGBcolor(x2-17,y4+40) ifb R >255 and G < 255 and B < 51 then u = true elseif R > 100 and G < 100 and B > 177 then u = true endif ifb peekcolor(x2,y4-100) = 0 then ifb chkimg("push1.bmp",-1,0,0,yoko-10,tate-10,1) then elseif chkimg("push01",1,0,0,yoko-10,tate-10,1,IMG_MSK_BGR2) then elseif chkimg("push02.bmp",1,0,0,yoko-10,tate-10,1,IMG_MSK_BGR2) then endif x4 = G_IMG_X + 6 //押すの上端 y4 = G_IMG_Y - 1 //押すの上端 RGBcolor(x4,y4) ifb R>255 and G>200 and G<255 and B>30 and B<70 then turiage() endif endif *************************************************** この部分を変更したいのですが よくわからなくて。 どうかお力をお貸しください。

この投稿のマルチメディアは削除されているためご覧いただけません。

質問者が選んだベストアンサー

  • ベストアンサー
noname#194317
noname#194317
回答No.1

ここまで作ってあるのに、どうして解らないかの方が謎に思えますが、要するにこの処理全体をFunctionかProcedureに入れてしまって、10個分のボタンの画像とクリックしたい座標、止めたい色のRGB値を変数にして渡せばできるでしょう。見たところ、座標はすでにx2,y4みたいな変数で受けているので、この値を変えていくだけです。 ところでこのスクリプト、関数RGBcolorやturiageの定義内容が消されていたり、変数の説明が書かれていないなど、非常に読みづらいです。これで全てではなくて、抜粋したものですね。elseifの後の処理も消されているっぽいですし。長すぎるので編集した場合は、ある程度コメントを書き足しておかないと、意味不明になりますよ。 あと、一つ疑問があります。PeekColorの戻り値をR,G,Bに分解すると、それぞれの値は最大で255にしかならないので、ところどころにあるIf文で「R>255」みたいな判定をしている部分は全て偽になり、意味がない気がします。(これも関数RGBcolorの定義内容がわからないため、正否が判断できない)

acom33
質問者

お礼

抜粋したものです。すいません。あまりに長かったので。 Functionで処理してみました。 ありがとうございました。

関連する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の画像認識について

    質問させていただきます 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について

    画像が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のスクリプトについて

    画像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で指定箇所のみループ

    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のプログラミングついて教えてください。

    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の繰り返しとその脱出について

    今、以下のようなプログラムを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もクリックが必要になります)。 自分なりに調べてみたのですが、何分初心者なもので、なにがどう間違っているのかよく分かりません。 どなたかご教授頂けないでしょうか。宜しくお願いします。

  • 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 自分でも頑張ってみますがご教授頂けると幸いです。 よろしくおねがいいたします。

  • UWSCで任意ボタンをおした時 複数条件分岐

    UWSCでのプログラムの書き方についての質問です。 ある任意のボタンをおした時に指定した画像があるか確かめてあれば 指定した画像をクリックさせたい場合の方法を教えていただきたいです。 EScボタンをを押すまで無限ループ。 条件が複数あるのでIFを使いたいとかんがえています 任意のボタンを押したことで、指定した画像と一致するものがあるか確かめ、 一致した場合、指定した画像をクリックする。 それを沢山作りたい。 追加していきたい。 いくつまでの条件分岐ができるのかわからないし、 どのコマンドを使えば良いのかもわからず1年近く四苦八苦していました。 一般的条件分岐だとIF関数ですが、 もっと楽な方法があれば お手数ではございますが 解説付きでご教授のほどよろしくお願いします。 --------------------- WHILE !GETKEYSTATE(VK_ESC) //ESCを押すまでループ   if GETKEYSTATE(VK_y) then //yが押されたら BTN(LEFT,CLICK,g_img_x,g_img_y) //画像1をクリック    elseif GETKEYSTATE(VK_u) then //uが押されたら chkimg("画像2.bmp")=true BTN(LEFT,CLICK,g_img_x,g_img_y) //画像2をクリック elseif GETKEYSTATE(VK_t) then //tが押されたら chkimg("画像3.bmp")=true BTN(LEFT,CLICK,g_img_x,g_img_y) //画像3をクリック elseif GETKEYSTATE(VK_a) then //aが押されたら chkimg("画像4.bmp")=true BTN(LEFT,CLICK,g_img_x,g_img_y) //画像4をクリック elseif GETKEYSTATE(VK_w) then //wが押されたら chkimg("画像5.bmp")=true BTN(LEFT,CLICK,g_img_x,g_img_y) //画像5をクリック endif wend --------------------- 上記が 自分で書いたプログラムなのですが、 間違いだらけと承知の上 恥を忍んで重ね重ねご教授のほど よろしくお願い申し上げます

  • 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ファイルと同じ所に入れていますが違う所で引っかかるようです。

専門家に質問してみよう