- ベストアンサー
UWSCでPEEKCOLORを使い指定ウィンドウ内に指定したカラーコードがあるか判別する方法
- UWSCでPEEKCOLORを使い指定ウィンドウ内に、指定したカラーコードがあるかを判別する方法を教えてください。
- ACW(GETID("xxxxx"),880,0,800,600,0)やCHKIMG("xxxx.bmp",0)を使用して画像認識する方法はありますが、PEEKCOLORでのカラーコードの判別方法が分かりません。
- x=G_IMG_Xという命令で指定ウィンドウ内の画像の座標を取得できますが、PEEKCOLORの場合はどのように記述すれば良いのでしょうか?
- みんなの回答 (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
その他の回答 (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関数でアクティブにしておく必要があります。
お礼
回答ありがとうございます。 CHKIMGだと画像が小さすぎると反応しないし、少しでも画像に変化があると読み込みませんよね。 書かれた通りの文をエディタに書き込んで動かして見たのですが、画面左上からy600座標の地点までマウスカーソルが動いては画面左上に戻るのを繰り返します。 PEEKCOLORの後にBTN命令入れましたが、指定カラーコード以外の場所でも手当たり次第クリックしてしまってます。 ひょっとして、指定範囲内にカラーコードがあった場合クリックということであれば、指定カラーコードの部分をクリックするわけではないでしょうか?? 分かりにくい質問ですいません。
お礼
回答ありがとうございます。 まさにダメな例をやっていました。 良い例を試したところ、発見までに多少時間がかかるもののしっかりクリックしにいってくれました。 分かりやすい回答ありがとうございました。m(_ _)m