UWSCでPEEKCOLORを使い指定ウィンドウ内に指定したカラーコードがあるか判別する方法

このQ&Aのポイント
  • UWSCでPEEKCOLORを使い指定ウィンドウ内に、指定したカラーコードがあるかを判別する方法を教えてください。
  • ACW(GETID("xxxxx"),880,0,800,600,0)やCHKIMG("xxxx.bmp",0)を使用して画像認識する方法はありますが、PEEKCOLORでのカラーコードの判別方法が分かりません。
  • x=G_IMG_Xという命令で指定ウィンドウ内の画像の座標を取得できますが、PEEKCOLORの場合はどのように記述すれば良いのでしょうか?
回答を見る
  • ベストアンサー

UWSCでPEEKCOLORを使い指定ウィンドウ内に、指定したカラーコ

UWSCでPEEKCOLORを使い指定ウィンドウ内に、指定したカラーコードがあるかを判別して そこをクリックさせたいのですが、画像認識の場合 ACW(GETID("xxxxx"),880,0,800,600,0) CHKIMG("xxxx.bmp",0) x=G_IMG_X // 画像の座標をxへ代入 y=G_IMG_Y // 画像の座標をyへ代入 BTN(LEFT, CLICK, x+30, y-30, 60) x=G_IMG_X という命令で指定ウィンドウ内の画像を(x,y)座標に自動で代入してもらえるのですが、PEEKCOLORの場合はどういった書き方をすればいいのでしょうか?? 上手く言いたいことが伝わっているか不安ですが、理解できる方宜しくお願いします。

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

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

>PEEKCOLORの後にBTN命令入れましたが、指定カラーコード以外の場所でも手当たり次第クリックしてしまってます。 それって、次みたいにしたってことですか?だったら当然そうなります。 ダメな例: For x=1 to 800  For y=1 to 600   If PeekColor(x,y)=探しているカラーコード Then Break 2   Btn(LEFT,CLICK,x,y)  Next Next 良い例1: For x=1 to 800  For y=1 to 600   If PeekColor(x,y)=探しているカラーコード Then Break 2  Next Next Btn(LEFT,CLICK,x,y) 良い例2: For x=1 to 800  For y=1 to 600   Ifb PeekColor(x,y)=探しているカラーコード    Btn(LEFT,CLICK,x,y)    Break 2   EndIf  Next Next

Origin_69
質問者

お礼

回答ありがとうございます。 まさにダメな例をやっていました。 良い例を試したところ、発見までに多少時間がかかるもののしっかりクリックしにいってくれました。 分かりやすい回答ありがとうございました。m(_ _)m

その他の回答 (1)

noname#194317
noname#194317
回答No.1

PEEKCOLOR関数の動作は、「ユーザーが指定した座標のカラーコードを返す」であり、「指定されたカラーコードが画面上のどこにあるかを返す」わけではありません。なのですげ~原始的に、探したい範囲をループでなめて自分で探すしかないですね。例えば以下のスクリプトを実行すると、xとyに見つかった座標が入っています。 For x=1 to 800  For y=1 to 600   If PeekColor(x,y)=探しているカラーコード Then Break 2  Next Next これを見て「じゃあ探したい色1ドットの画像を使ってChkImg関数で探せば一発じゃんか、俺って頭いい~!」と思った人は、ワナにはまります(苦笑)。ChkImg関数って、あまり小さい画像は見つけられないんですよね。経験上、縦横16ドット以上ない画像は見落としてしまうようです。(バージョンによって見つけられる大きさが変わるかも知れない) あとワナがもう一点あって、PeekColor関数はウィンドウIDが引数にありません。すなわち、デスクトップに見えているものしか探さないので、もし検索対象が別のアプリに隠されていたらそれは見つかりません。なので必ず事前に、Acw関数でアクティブにしておく必要があります。

Origin_69
質問者

お礼

回答ありがとうございます。 CHKIMGだと画像が小さすぎると反応しないし、少しでも画像に変化があると読み込みませんよね。 書かれた通りの文をエディタに書き込んで動かして見たのですが、画面左上からy600座標の地点までマウスカーソルが動いては画面左上に戻るのを繰り返します。 PEEKCOLORの後にBTN命令入れましたが、指定カラーコード以外の場所でも手当たり次第クリックしてしまってます。 ひょっとして、指定範囲内にカラーコードがあった場合クリックということであれば、指定カラーコードの部分をクリックするわけではないでしょうか?? 分かりにくい質問ですいません。

関連するQ&A

  • 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の画像認識について

    プログラム初心者ですがUWSCでプログラムを作っています 画像認識において認識するべき画像が複数種類あるときのパターンができなくて困っています ifb CHKIMG("青空") x=G_IMG_X // 画像の座標をxへ代入 y=G_IMG_Y // 画像の座標をyへ代入 BTN(LEFT,CLICK,x,y,100) SLEEP(0.5) else Endif のように、単独の画像を認識し、その画像をクリックさせることはできるのですが 「青空」もしくは「夕空」もしくは「夜空」が出た時にその画像をクリックする のような命令をかくことができません ifb CHKIMG("青空" or "夕空" or"夜空") のような形でかければいいのですが、もちろんこれでは動きませんでした どうすればこれを実行できるようになるのか教えてくださいm(__)m

  • UWSCの指定画像チェック

    UWSCを利用して、画面内に指定画像があるか無いかチェックし、あればクリックしたりするスクリプト文を作成したいのですが・・・、うまくいきません; 詳しい方、どうか回答お願いしますm(_ _)m 自分の作ったスクリプト文は下記のとおりです。 ""のところの「A」はフォルダ名で、「neko.bmp」が画像ファイル名です。   IFB CHKIMG(".\A\neko.bmp")     MMV(G_IMG_X,G_IMG_Y)     KBD(VK_CTRL,DOWN)     BTN(LEFT,DOWN,G_IMG_X,G_IMG_Y)     KBD(VK_CTRL,UP)     BTN(LEFT,UP,G_IMG_X,G_IMG_Y)   ENDIF 上記のスクリプト文でUWSCを実行させると、なぜか「エラー NOT Found".\A\neko.bmp"」と出てき、実行してくれません。 画像の問題ではあると思うのですが、ちゃんとuws形式で保存されてますし、画像の方もbmp形式になってるので・・・どこか悪いのかと、思い当たるふしがありません。 悪いところや指摘がございましたらどうか教えてくださいm(_ _)m また、スクリプト文を作れる方がいましたら作成を頼めませんでしょうか。。。 私の希望する、UWSCの実行は下記のとおりです。また、"neko"は画像ファイル名のことです。 "neko"が画面内にあるか無いかチェックし、もしあれば、Ctrlキーを押したまま、"neko"が見つかった座標に左クリック。 この繰り返し。

  • 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でのプログラムの書き方についての質問です。 ある任意のボタンをおした時に指定した画像があるか確かめてあれば 指定した画像をクリックさせたい場合の方法を教えていただきたいです。 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画像認識で座標の位置がずれてしまいます。

    ifb CHKIMG( "XXX", -1, 0, 0, 0, 0, -1,  ) x=G_IMG_X // 画像の座標をxへ代入 y=G_IMG_Y // 画像の座標をyへ代入 endif パソコンを変えた途端にこの症状は発生しました。 x,yの変数をメッセージボックスで出しているのですが、実際の画像と異なった座標を指定していまいます。 他の座標ツールとは座標が異なっているのです。 画像をクリックしてみても、実際の画像の位置とは違う場所をクリックしてしまいます。 画像の座標は一番左上が表示されることは存じております。 グラフィックボードを実装しています。OSのバージョンは8.1です。 原因は何が考えられるでしょうか。ご教授お願いいたします。

  • UWSCのPEEKCOLORについての質問

    「とある座標x」の「色」が「a」であった場合「○○をする」 違う場合は何もしないというマクロを組む場合は下記のようにやればできるのですが ----------------------------------------------------------------------- ifb PEEKCOLOR(「とある座標x」) = ($「a」) then //「とある座標x」の「色」が「a」であった場合 ACW(GETID("BpOnline__0.02.UWS - メモ帳","Notepad") //「○○する(ここではメモ帳をアクティブに)」  else //「色がaでないなら何もしない」    Endif  ------------------------------------------------------------- 「とある座標x」の「色」が「a」であり なおかつ「とある座標y」の「色」が「b」であった場合「○○をする」 違う場合は何もしない (両方の条件を満たしている場合意外は何もしてほしくない) というようにしたい場合はどのようにしたらいいのでしょうか 自分なりに考えて下記のようにやってみたのですが上のものと同じ挙動をしてしまいます。 ---------------------------------------------------------------- ifb PEEKCOLOR(「とある座標x」) = ($「a」) then //「とある座標x」の「色」が「a」であった場合 ifb PEEKCOLOR(「とある座標y」) = ($「b」) then //「とある座標y」の「色」が「b」であった場合 ACW(GETID("BpOnline__0.02.UWS - メモ帳","Notepad") //「○○する(ここではメモ帳をアクティブに)」  else //「色がaでないなら何もしない」   Endif   else //「色がaでないなら何もしない」   Endif  -------------------------------------------------------------------------- ifb PEEKCOLOR(「とある座標x」) = ($「a」) and PEEKCOLOR(「とある座標y」) = ($「b」)then  //「とある座標x」の「色」が「a」であった場合 and 「とある座標y」の「色」が「b」であった場合 ACW(GETID("BpOnline__0.02.UWS - メモ帳","Notepad") //「○○する(ここではメモ帳をアクティブに)」  else //「色がaでないなら何もしない」    Endif  ------------------------------------------------------------------- ifb PEEKCOLOR(「とある座標x」) = ($「a」) and PEEKCOLOR(「とある座標y」) = ($「b」)then これのandをorにしても同じでした。 どうかご教示くださいませ

  • UWSCを使って画像リンクをクリックするとき???

    UWSCを使って画像リンクをクリックするとき??? 先日UWSCをダウンロードし、画像リンクを自動でクリックするスクリプトを作りました。 インターネット上で、商品を選んで「予約購入する」という画像リンクをクリックしたいのですが Ifb CHKIMG("予約購入する.bmp") = TRUE THEN   BTN(LEFT,CLICK,G_IMG_X,G_IMG_Y) Endif のように作っても全く動きません。 UWSC40ファイルの中に予約購入する.bmpを保存してます。 うーん一体どうして?昨日から調べているけど全くわかりません。 回答よろしくお願い致します。

  • 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 こんな感じにまとめる事はできるのでしょうか? 例として教えてもらえると助かります。 よろしくお願いします