プロが教える店舗&オフィスのセキュリティ対策術

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の場合はどういった書き方をすればいいのでしょうか??

上手く言いたいことが伝わっているか不安ですが、理解できる方宜しくお願いします。

A 回答 (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
    • good
    • 2
この回答へのお礼

回答ありがとうございます。

まさにダメな例をやっていました。
良い例を試したところ、発見までに多少時間がかかるもののしっかりクリックしにいってくれました。

分かりやすい回答ありがとうございました。m(_ _)m

お礼日時:2010/09/20 21:51

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関数でアクティブにしておく必要があります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

CHKIMGだと画像が小さすぎると反応しないし、少しでも画像に変化があると読み込みませんよね。

書かれた通りの文をエディタに書き込んで動かして見たのですが、画面左上からy600座標の地点までマウスカーソルが動いては画面左上に戻るのを繰り返します。

PEEKCOLORの後にBTN命令入れましたが、指定カラーコード以外の場所でも手当たり次第クリックしてしまってます。

ひょっとして、指定範囲内にカラーコードがあった場合クリックということであれば、指定カラーコードの部分をクリックするわけではないでしょうか??

分かりにくい質問ですいません。

お礼日時:2010/09/19 15:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A