見守り電球またはGPS端末が特価中!

1.画像1をクリック
2.画像2をクリック
  画像2が見つからなければ、見つかるまでスペースキーを押す
  画像2をクリック
3.画像3をクリック
  画像3が見つからなければ、見つかるまでスペースキーを押す
  画像3をクリック
この繰り返しをしたいのですが、途中までしかわかりませんでした。
どうしたらいいのでしょうか?

//画像1だったら画像1をクリック
IF CHKIMG( 画像1, [透過色/色無視, x1, y1, x2, y2] ) THEN BTN(LEFT,CLICK,G_IMG_X,G_IMG_Y)

このQ&Aに関連する最新のQ&A

A 回答 (2件)

> どうやって座標を調べたらいのでしょうか?



調べるも何もありません。至って単純です。比較のネタにする画像(例えば画像2)の大きさは解っているわけですから、それのX,Yの大きさを2で割った数をG_IMG_XとYに足せば、CHKIMGで見つけた画像のど真ん中になります。これなら確実です。

(最初からそう書けばよかったですね…)

CHKIMG関数ですが、あまり小さい画像(16ドット未満?)は使えません。エラーにはならないんですけど、拾ってくれませんので、注意してください。見つけたい対象が小さい場合、その周辺も一緒にキャプチャして、16ドット以上になるようにします。

それでは健闘を祈ります。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2007/08/13 11:40

2.の部分の例を示します。



While True //画像2が現れるのを待つループ
 IFb CHKIMG("画像2.bmp")
  BTN(LEFT,CLICK,G_IMG_X,G_IMG_Y) //見つかったのでクリックする
  Break //ループを脱出する
 EndIf
 KBD(VK_SPACE,CLICK,40) //見つからないのでスペースキーを押す
 SLEEP(0.1) //念のため、0.1秒待つ
Wend
//次の処理へ

ひょっとしたら、画像をクリックするとき、G_IMG_XとYそのままの座標ではなく、画像の大きさにもよりますが、いくつか足してやった方が動作が安定するかも知れません。そのままの座標だと、画像の左隅を示しているので、ほんのわずかでもマウスが動くと、画像の外に出てしまい、クリックが空振りに終わる心配があります。

この回答への補足

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

座標を変えたほうがいいとのことですが、どうやって座標を調べたらいのでしょうか?

補足日時:2007/08/09 09:12
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QUWSC 画像判定と条件分岐について

UWSC 画像判定と条件分岐について質問です

1.画像Aがあるか判定する
2.画像Aがあれば、画像B又は画像Cをクリックする
3.画像Aなければ、sleepで少し秒数を開けてから1からやり直す
以降繰り返し

というプログラムを書きたいのですが、画面上の画像を判定して画像AがあるときだけB,Cをクリック
させる方法がよくわかりません。
加えてBを判定してクリック、Cを判定してクリックというのは
ifb部分を二つ使い別々に扱えば書けるのですが、 elseなど用いて一ブロックのifb-endifでの
表し方もよくわからないので合わせてそちらも教えていただきたいです

御回答よろしくお願いします

Aベストアンサー

> 加えてBを判定してクリック、Cを判定してクリックというのは

それは、画像BとCがどちらも存在するので両方ともクリックしておくと言うことか、それともBがなければCをクリックするのか、どっちでしょう?前者の場合はELSEは使わない(って言うか使えない)ので、IFを二つ並べるしか方法はないです。なぜなら、IFB~ELSE~ENDIFの形にすると、最初のIFBの条件を満たした場合はELSE以下は実行されず、ENDIFに抜けてしまいます。

と言うことを踏まえて書くと、次のような感じでしょうか。

While True
  Ifb ChkImg("画像A")
    Sleep(適当な待ち時間を入れる。待つ必要がなければこのSleep自体が不要)
    Ifb ChkImg("画像B")
      //画像Bをクリック。ただし見つけた座標より若干内側にしないと空振りの
      //危険があるので、+2している。この値は適当に調整のこと
      Btn(Left,Click,G_IMG_X+2,G_IMG_Y+2,20)
      //この後続けて画像Cもチェックしたい場合は、次のContinueを消す
      Continue
    EndIf
    If ChkImg("画像C") Then Btn(Left,Click,G_IMG_X+2,G_IMG_Y+2,20)
  EndIf
  Sleep(適当な待ち時間を入れる。)
Wend

ちなみにIFB~ELSE~ENDIFの書き方は、特に悩むことはなくて…

Ifb 条件
  条件成立時の処理
Else
  条件不成立時の処理
EndIf

の形になります。Elseの後でさらに条件判定をしたければ、ElseIfとするか、あるいはElseの下にさらにIfあるいはIfbを書きます。次のような感じで。

Ifb 条件A
  条件A成立時の処理
Else
  Ifb 条件A不成立時のさらなる条件B
    条件B成立時の処理
  EndIf
EndIf

> 加えてBを判定してクリック、Cを判定してクリックというのは

それは、画像BとCがどちらも存在するので両方ともクリックしておくと言うことか、それともBがなければCをクリックするのか、どっちでしょう?前者の場合はELSEは使わない(って言うか使えない)ので、IFを二つ並べるしか方法はないです。なぜなら、IFB~ELSE~ENDIFの形にすると、最初のIFBの条件を満たした場合はELSE以下は実行されず、ENDIFに抜けてしまいます。

と言うことを踏まえて書くと、次のような感じでしょうか。

While True
  Ifb Ch...続きを読む

QUWSC 画像認識で条件分岐

画像Aが出てくるまで待ち画面をクリック、その後、画像Bが出てくるまで待ち画面をクリック。
画像Aが現れなければ、画像Bが出てくるまで待ち、画像をクリックする。
という文を書きたいのですが、うまくいきません。

画像Aはランダムで現れます。画像Aが現れた場合、画面をクリックしない限り、画像Bは現れません。

以下の文では画像Aが現れない限りはうまく回るのですが、画像Aが現れるとそこで止まってしまいます。どこがまずいのでしょうか。
何分この手のものエクセルぐらいしか触ったことがなく困っています。よろしくお願いします。
//
if chkimg("A.bmp")=true then
btn(left,0,100,100,50)
else
repeat
sleep(0.2)
until chkimg("B.bmp")=true
btn(left,0,100,100,50)
endif
//

Aベストアンサー

> 以下のように記述してみたんですが

完璧じゃないですか!画像Aがクリックしたい目標物だったら、確かにG_IMG_X,G_IMG_Yを使うのが一番確実な方法です。これだと、もし画像Aの表示される場所が変わっても影響を受けませんから。ただG_IMG_X,G_IMG_Yは画像の左上隅を指しているため、個人的には気味が悪いと感じるので(すごいギリギリの場所をクリックしているわけだから)、4くらい足しています。画像がクリック目標に対して余白を持っている場合は、足す数が4では足りない場合もあります。

ちなみにG_IMG_Xを変数にコピーせずに使うことも可能なので、それでやると大幅に短く書けます。

REPEAT
SLEEP(0.1)
IF chkimg("A.bmp") Then BTN(left,0,G_IMG_X,G_IMG_Y,50)
UNTIL chkimg("B.bmp")
BTN(left,0,100,100,50)

> 私が質問文であげていたのでは、画像Aをチェックする文に繰り返し処理がかかって
> いなかったのですね。それで止まっていたんだと思います。

VBAだけ見てきた人が知ってる世界とUWSCはかなり異質なものなので、迷って当然と思います。VBAはある意味普通のVBと同じくイベント駆動型の言語だから、クリックイベントなどの中に処理を書いておけば、いちいちループで繰り返し見張っている必要がないのに対し、UWSCにはイベントの概念がなく、クリックもキー入力もスクリプトに書いた場所でしか判定されない、よって繰り返しにしないと一回しか見てくれない。またVBAだとマクロの最終行に来ても次の操作が来るまで待機するだけだけど、UWSCではスクリプトが終了する等。

> 以下のように記述してみたんですが

完璧じゃないですか!画像Aがクリックしたい目標物だったら、確かにG_IMG_X,G_IMG_Yを使うのが一番確実な方法です。これだと、もし画像Aの表示される場所が変わっても影響を受けませんから。ただG_IMG_X,G_IMG_Yは画像の左上隅を指しているため、個人的には気味が悪いと感じるので(すごいギリギリの場所をクリックしているわけだから)、4くらい足しています。画像がクリック目標に対して余白を持っている場合は、足す数が4では足りない場合もあります。

ちなみにG_IMG_Xを...続きを読む

Quwsc画像認識のあいまい判定について

uwscのCHKIMG関数にて画像を判定したマクロを組むことは出来たのですが、1ドットでも変化があると同じ画像として判定されません。

しかし調べてみると、あるブログにはuwscで画像のあいまい判定が可能と書いてありました。
もしかしたらほかに情報が出てこない以上、失礼ですがそのブログの人の勘違いという可能性もありますが、検索して出来た以上気になります。これは可能なのでしょうか?可能なのでしたら方法を教えていただけませんか?

あと今回のことにはあまり関係ありませんが、uwscのヘルプが目次で項目をクリックしているのですが表示されません。開き方が間違っているんでしょうか?

Aベストアンサー

>しかし調べてみると、あるブログにはuwscで画像のあいまい判定が可能と書いてありました。

どうやら有志の方がCHKIMGXという拡張関数を作成されているようですよ。
調べてみてください。

Quwscの画像認識に失敗します。

uwsc超初心者です。
genymotionという仮想androidでゲームのボタンをポチポチすることをしたいのですが、画像認識してくれません。

無知な僕ですが頑張って書いてみました。

ACW(GETID("Genymotion for personal use - Google Nexus 7 - 4.3 (800x1280, 213dpi) - 192.168.56.101","QWidget"),522,121,438,676,0)
IFB CHKIMG("1.bmp") // 認識させたい画像ファイルを指定する
// 画像認識に成功した場合の処理をここに書く
MMV(G_IMG_X, G_IMG_Y)
BTN(LEFT,CLICK)
ELSE
// 画像認識に失敗した場合の処理をここに書く
MSGBOX("画像認識に失敗しました。")
ENDIF

これで実行したら「画像認識に失敗しました」と出てきます。
画像形式はbmpです。

だれか助けてください。

Aベストアンサー

WinShotで設定が正しければ(ビットマップで保存・減色しない)、確実にbmpになっているはず。それも使ったことがあるツールですし。保存したものをペイントで開いてみればわかるでしょう。拡張子を変えただけのインチキだったら開けないか、文句を言われるはずなんで。

普通はPrintScreenキーを押して、ペイントに貼り付けて欲しい部分を切り出し、ビットマップで保存するだけです。

どっちの方法でも、減色せず24ビットのビットマップで保存する必要はありますが、やっていることはツールか手作業かの違いだけです。ただし先の回答で貼ったリンク先にも書いてあったと思いますが、画面コピーは色が微妙に変わることがあるようなので、UWSC側でchkimgする時に色の認識幅を設定するか、色情報を無視してやる必要があるかも知れません。UWSCのヘルプでchkimgのところを参照するか、ググってみましょう。

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

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

先日UWSCをダウンロードし、画像リンクを自動でクリックするスクリプトを作りました。
インターネット上で、商品を選んで「予約購入する」という画像リンクをクリックしたいのですが

Ifb CHKIMG("予約購入する.bmp") = TRUE THEN
  BTN(LEFT,CLICK,G_IMG_X,G_IMG_Y)
Endif

のように作っても全く動きません。
UWSC40ファイルの中に予約購入する.bmpを保存してます。

うーん一体どうして?昨日から調べているけど全くわかりません。
回答よろしくお願い致します。

Aベストアンサー

別の内容になってきてしまうのでこれ以上のことは別スレたててね
ウィンドウタイトルを取得してアクティブかさせてPageDownキーの入力を追加してみました

OPTION EXPLICIT
Dim x_max,y_max,TITLE,STEP_END
Dim i,id
x_max=1000 //検索範囲x方向最大
y_max=1000 //検索範囲y方向最大
TITLE="Firefox" //ウィンドウのタイトル
STEP_END=3 //pagedownを繰り返す数

id=GETID(TITLE)
MSGBOX("画像認識")
FOR i=0 TO STEP_END STEP 1
ifb CHKIMG(".\question.bmp",0,0,0,x_max,y_max,0,IMG_MSK_BGR4)
CTRLWIN(id,ACTIVATE)
BTN(LEFT, CLICK,G_IMG_X, G_IMG_Y)
MSGBOX("画像ありました")
else
 MSGBOX("画像なし")
Endif
CTRLWIN(id,ACTIVATE)
KBD(VK_NEXT,CLICK)
NEXT

別の内容になってきてしまうのでこれ以上のことは別スレたててね
ウィンドウタイトルを取得してアクティブかさせてPageDownキーの入力を追加してみました

OPTION EXPLICIT
Dim x_max,y_max,TITLE,STEP_END
Dim i,id
x_max=1000 //検索範囲x方向最大
y_max=1000 //検索範囲y方向最大
TITLE="Firefox" //ウィンドウのタイトル
STEP_END=3 //pagedownを繰り返す数

id=GETID(TITLE)
MSGBOX("画像認識")
FOR i=0 TO STEP_END STEP 1
ifb CHKIMG(".\question.bmp",0,0,0,x_max,y_max,0,IMG_MSK_BGR4)
CTRLWIN(id,ACTIV...続きを読む

QUWSCの終了の仕方

UWSCの終了の仕方

仕事でUWSCのマクロソフトを使っています。
一箇所の部分だけ素早くクリックをループさせるマクロをしていますが、
アプリケーションを開いて使うため、ALT+1などを押しても終了することなく
アプリケーション側のALT+1の動作があるので困っています。
ただただマウスを動かして終了しようとしても、どうすることもできなくて、
結局はログオフにしてしまいました。

UWSCを好きなときに一時停止、もしくは強制終了をすることは可能でしょうか?
やり方を教えて下さい。もし、プログラムなどで終了させる方法がありましたら
初心者でも分かるように教えて頂ければ幸いです。

Aベストアンサー

ループしているマクロの中に以下の一文を書いてください
If GetKeyState(Vk_Esc) Then Break

Escキーを押すとループから抜けます。

QUWSCの色認識幅のスクリプトを正しく治していただけませんか?

環境はwindows8.1です。
私は、genymotionという仮想androidを使いゲームのポチポチするようにしたいです。
画像認識のスクリプトを組んだのですが、先日質問さしてもらってchkimgする時に色の認識幅を設定しなければ画像認識できないとわかったので、いろいろ調べたのですが色の幅を設定するスクリプトの組み方がよくわかりません。

普通の画像認識スクリプトは、

ACW(GETID("Genymotion for personal use - Google Nexus 7 - 4.3 (800x1280, 213dpi) - 192.168.56.101","QWidget"),522,121,438,676,0)
IFB CHKIMG("A.bmp") // 認識させたい画像ファイルを指定する
// 画像認識に成功した場合の処理をここに書く
MMV(G_IMG_X, G_IMG_Y)
BTN(LEFT,CLICK)
ELSE
// 画像認識に失敗した場合の処理をここに書く
MSGBOX("画像認識に失敗しました。")
ENDIF

です。

このスクリプトに色幅を設定するスクリプトをネットで調べて自分なりに組んでみました。


ACW(GETID("Genymotion for personal use - Google Nexus 7 - 4.3 (800x1280, 213dpi) - 192.168.56.101","QWidget"),522,121,438,676,0)
IFB CHKIMG("A.bmp") // 認識させたい画像ファイルを指定する

Function CheckColorScope(PosX, PosY, Element, BaseValue, Scope)
// 指定された色要素の値を取得
Select Element
Case "R"
ElementValue = PeekColor(PosX, PosY) And $FF;
Case "G"
ElementValue = (PeekColor(PosX, PosY) And $FF00) / $100;
Case "B"
ElementValue = (PeekColor(PosX, PosY) And $FF0000) / $10000;
Default
Result = False; Return;
SelEnd

// 色要素の値が、指定範囲内であれば True を返す
Ifb (ElementValue >= BaseValue - Scope) And (ElementValue <= BaseValue + Scope) Then
Result = True;
Else
Result = False;
// 画像認識に成功した場合の処理をここに書く
MMV(G_IMG_X, G_IMG_Y)
BTN(LEFT,CLICK)
ELSE
// 画像認識に失敗した場合の処理をここに書く
MSGBOX("画像認識に失敗しました。")
ENDIF

これで組んでみましたが、エラーが出ます。
大変面倒なんですが、治していただけないでしょうか?
よろしくお願いします。
添付した画像が認識したい画像です。

環境はwindows8.1です。
私は、genymotionという仮想androidを使いゲームのポチポチするようにしたいです。
画像認識のスクリプトを組んだのですが、先日質問さしてもらってchkimgする時に色の認識幅を設定しなければ画像認識できないとわかったので、いろいろ調べたのですが色の幅を設定するスクリプトの組み方がよくわかりません。

普通の画像認識スクリプトは、

ACW(GETID("Genymotion for personal use - Google Nexus 7 - 4.3 (800x1280, 213dpi) - 192.168.56.101","QWidget"),522,121,438,676,0)
...続きを読む

Aベストアンサー

一個前の質問に回答したものです
その後気が付いたのですが 元々 https://oshiete.goo.ne.jp/qa/9023762.html から
継続してる質問のようですね

状況からして UWSC以前の問題として BMPや JPG 画像がどういったものなのかという事を
理解されていないことに問題があるのではないかと思われます

今回の質問に関していえば Functionに対して FENDがありませんので
文法的にエラーになるはずです

色幅持たせてカバーする以前に 基本的になぜ 画像認識に失敗しました
となるのかを把握する方が先ではないかと考えます

試しに
SAVEIMG("A.bmp",100,200,300,400)
PRINT CHKIMG("A.bmp")
を実行してみましょう
それで FALSE が表示されるようであれば デスクトップの表示が何かの理由で常に更新されているはずです
(普通は TRUE になるってことです)

それが動くなら 上記SAVEIMG の座標位置を変更して
保存される画像が本来のチェックしたい画像になるように調整して元のスクリプトで動くかを確認してください


元の質問で No3に書かれてる変換ってのは 単純にファイル名をjpgー>bmpに変更したときの話で
(ファイルの中身はJPGでファイル拡張子だけBMP)

No2であなたが疑問に聞かれてる内容の答えは
一旦JPGで保存された画像をペイントなどで開いてBMPとして保存したファイルを意味しますので
(中身BMP拡張子もBMP)
根本的にNo3での回答は意味を取り違えています

なぜそれではダメかってのは最初に書いたBMP・JPG画像がそれぞれどういったものなのかを理解してれば分かります

一個前の質問に回答したものです
その後気が付いたのですが 元々 https://oshiete.goo.ne.jp/qa/9023762.html から
継続してる質問のようですね

状況からして UWSC以前の問題として BMPや JPG 画像がどういったものなのかという事を
理解されていないことに問題があるのではないかと思われます

今回の質問に関していえば Functionに対して FENDがありませんので
文法的にエラーになるはずです

色幅持たせてカバーする以前に 基本的になぜ 画像認識に失敗しました
となるのかを把握する方が先ではないか...続きを読む

QUWSCでMOUSEORG関数が上手く処理できません

UWSCでMOUSEORG関数が上手くいきません

ACW(GETID("無題 - メモ帳","Notepad"))
sleep(1)
KBD(VK_A,CLICK,40)

このコードだとメモ帳に入力出来ます。

しかしバックグラウンドでAと打たせるコードで
id=GETID("無題 - メモ帳","Notepad")
mouseorg(id,2)
sleep(1)
KBD(VK_A,CLICK,40)

これだと無反応です。

処理を画像認識に入れ替えたら画像は認識しますがクリック操作などは受け付けない感じです。

コードに問題ありますか?コードに問題がないとすれば環境に問題があって
それが弊害となるケースはあるのでしょうか?

【環境】
OS Windows7 sp1 64bit
使用しているツール UWSC フリーソフト 5.1.1の最新版
セキュリティーソフト ノートン360(試用版)

Aベストアンサー

以下にそのままのコードがあります
http://fluxonix.asia/kannsuu/mouseorg/

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

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

Aベストアンサー

>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

QUWSC「画像が無い場合」

UWSCについての質問です
指定の画像がある場合、スクリプトを実行させるというのは分かりますが
逆に、画像が無い場合にのみ、特定のスクリプトを実行させるという事は可能でしょうか?

具体例としては
指定の画像がある場合は何もせず
指定の画像が消えた場合 msgbox("画像が消えました") とメッセージボックスを表示させる

よろしくお願い致します

Aベストアンサー

こうすればできます。簡単でしょ?

If ChkImg("探したい画像.bmp")=FALSE Then MsgBox("ないっぽいですぅ")

ただし、初めからなかった場合もこれで引っかかってしまうので、一度表示されてから消えたというのを検出したければ、次のようにする必要があります。

//初期化
あった=FALSE
//画像探しのループ
//目的の画像が一度見つかってそれが消えるまで回り続ける
Whlie TURE
  //他にやりたい処理があるならここに書く
  //画像の判定
  If ChkImg("探したい画像.bmp") Then あった=TRUE
  Ifb あった AND ChkImg("探したい画像.bmp")=FALSE
    MsgBox("消えたみたいですぅ")
    あった=FALSE
  EndIf
Wend

ついでに言うと、If文はTRUEかFALSEかを判定する文であり、関数だろうが式だろうが、判定できるのはTRUEかFALSEだけです。しかし逆を言うと、ChkImg関数のように結果がTRUEかFALSEで返る関数であれば、=TRUEなどといちいち書く必要はありません。なのでUWSCのサンプルでは、TRUEかFALSEを返す関数がIf文内にある場合、=TRUEという表記を省略しています。その方がスクリプトの見た目が簡潔にできますから。なのでサンプルがもしこれを省略していなかったら、この質問をする前に気付いていたでしょうね。

こうすればできます。簡単でしょ?

If ChkImg("探したい画像.bmp")=FALSE Then MsgBox("ないっぽいですぅ")

ただし、初めからなかった場合もこれで引っかかってしまうので、一度表示されてから消えたというのを検出したければ、次のようにする必要があります。

//初期化
あった=FALSE
//画像探しのループ
//目的の画像が一度見つかってそれが消えるまで回り続ける
Whlie TURE
  //他にやりたい処理があるならここに書く
  //画像の判定
  If ChkImg("探したい画像.bmp") Then あった=TRUE
  Ifb あった...続きを読む


人気Q&Aランキング