プロが教えるわが家の防犯対策術!

uwcs のマクロで画像認識をしてその画像があればクリックというマクロを作成したのですが、クリック後すぐに消えて困ります。指定の画像があればクリックしクリック後も画像があればクリックすふマクロが作りたいです。タイムアウトをなくしたいのですがどのようなものを作ればいいでしょうか?

質問者からの補足コメント

  • 何故かできませんね

    ただ単に僕に知識がないだけだとは思いますがw

      補足日時:2018/08/07 16:29
  • やはりできません

    「uwcs のマクロで画像認識をしてその画」の補足画像2
      補足日時:2018/08/07 16:30
  • 関数: COMMON_IMG_CLICK がありません。

    2行目: COMMON_IMG_CLICK ("画像",0,0,0.0,0)

    と出てきます。自分の理解できる範囲を超えているようですね。

      補足日時:2018/08/07 16:32
  • ちなみに\が出せないので¥になりますが大丈夫だと思います

      補足日時:2018/08/09 00:40
  • かっこ悪い方の画像認識は全く使えません…←使いこなせてないだけ

    かっこいい方の画像認識は動作しますが画像を認識してくれませね(´・ω・`)

    「uwcs のマクロで画像認識をしてその画」の補足画像5
      補足日時:2018/08/09 22:40
  • 皆さまご回答ありがとうございます!ご回答がないようですのでベストアンサーを選んで締めさせていただきます。同じ内容の同じジャンルで質問をしているのでそちらの方にご回答いただけると助かります

      補足日時:2018/08/10 17:52

A 回答 (7件)

> IFB CHKIMG(("C:\フォルダ", "*画像.bmp"))



終了

って、一言で終わらせるな!!

フォルダを追記するって発想は間違ってないけど、書き方は思いっきり間違ってるし、*画像って画像が複数あるって意味だとしたら、CHKIMG関数は1回で1つの画像しか調べられないので、そもそもそんな使い方ができません。だから終了。

って、あくまで終わらせる気かよ!!

ネタはともかく、CHKIMG関数でフォルダ込みの指定をする場合の書き方はこうなります。

CHKIMG("C:\フォルダ\サブフォルダ\画像.bmp")

私だったら長いフォルダ名を使わないで済ませるため、C:\TEST みたいな短い名前のフォルダを作ります。このとき、フォルダ名にスペースを入れるのは何かとめんどいことになりやすいため、避けます。

で、1回で1つの画像しか調べられないってことは、調べたい画像がいっぱいあったら画像の数だけCHKIMG関数を呼び出さなきゃいけないってことになります。一番安直なのは、それを全部べた書きすること。以下みたいに。

IFB CHKIMG("C:\フォルダ\サブフォルダ\画像1.bmp")
BTN(LEFT,CLICK,G_IMG_X+1,G_IMG_Y+1,50)
ENDIF

IFB CHKIMG("C:\フォルダ\サブフォルダ\画像2.bmp")
BTN(LEFT,CLICK,G_IMG_X+1,G_IMG_Y+1,50)
ENDIF

ただこれで書く気になれるのは3つくらいまでで、それより多いと非効率的&カッコ悪いじゃないですか。そんな時こそNo.2回答で出してくれてるループ処理の出番。以下はC:\TESTフォルダに画像が入ってる前提のスクリプトです。Escキーを押すと中断する機能付き。これはGETKEYSTATE関数を使っています。ただしこの関数はイベント型じゃないため、IFを実行してる時にESCが押された場合のみ機能するので、たぶん反応が悪いです。何度かバシバシ押さないと効かないかも。

bmpfiles=GETDIR("C:\TEST", "*.bmp")-1 //C:\TESTフォルダにあるbmpファイル名の一覧を取得

WHILE TRUE

FOR i=0 TO bmpfiles //bmpファイルの数だけ繰り返す

IFB CHKIMG(GETDIR_FILES[i])
BTN(LEFT,CLICK,G_IMG_X+1,G_IMG_Y+1,50)
SLEEP(0.1)
IF GETKEYSTATE(VK_ESC) THEN EXITEXIT //Escキーを押すと終了する
ENDIF

NEXT

WEND
    • good
    • 0
この回答へのお礼

今出先で試せないので後からになりますがありがとうございます。

書き方としてはフォルダ(マクロ+サブフォルダを入れてるフォルダ)+サブフォルダ(bmpを入れているフォルダ)+bmpでいいんですね!

何回もありがとうございます!

お礼日時:2018/08/09 18:55

> 全く出来ません…よろしければスクリプトをいただけませんか?



そちらで使ってる画像ファイル名がわかんないのに、どうやってスクリプトを書けと?また、できませんってのは具体的にどうできないんですか?認識されないのか?それとも何かエラーが出るのか?回答者からはそちらで起きていることは全く見えませんから、質問者が自ら伝えないとわかんないんですよ。

(言う前から、ああ~それはxxですねって言われたら侵入されてます。ヤバいです)

また画像ファイル名が合ってても、入れるフォルダがスクリプトと同じフォルダじゃないとダメなこともすでに回答したとおりです。もう一度ファイル名間違ってないか(全角半角違いとかはありがち)、同じフォルダに入れてあるか、よ~く確認してください。あと、UWSCに読み込ませてるスクリプトが直したスクリプトとは別のフォルダのだった!!ってのもときどきやらかす失敗だったりします。
    • good
    • 1
この回答へのお礼

自分で見ててもめんどくさい奴になってますねw何度も申し訳ありません。

先程頂いたもののファイル名を変えただけなのでこれでいいのかわかりませんが素人で全く理解できていないかも知れません。申し訳ありません

WHILE TRUE

IFB CHKIMG(("C:\フォルダ", "*画像.bmp"))
BTN(LEFT,CLICK,G_IMG_X+1,G_IMG_Y+1,50)
ENDIF

WEND

お礼日時:2018/08/09 00:39

> ファイルに入れた画像を認識してくれるものも教えて



今のままでも、画像.bmpと言う画像ファイルと比較してるので、これを使いたい画像ファイル名に変えるだけです。後はスクリプトと同じファルダに入れておくってのさえ間違えなければおk。
    • good
    • 1
この回答へのお礼

何度もご回答ありがとうございますファイル名に変えましたが全く出来ません…よろしければスクリプトをいただけませんか?お時間お取りしてしまい本当に申し訳ありません!

お礼日時:2018/08/08 21:38

COMMON_IMG_CLICKは、UWSC組み込み関数には存在しません。

以下のページに出てきてるユーザー定義関数じゃないですか?ここで紹介されてるコードを今のスクリプト内にコピペしないと、絶対に動きません。

https://jitekineko.com/tips-uwsc-image-recogniti …

これを使わないでやる場合は、CHKIMG関数を使います。以下のスクリプトだと、画面内に画像.bmpを見つけたらクリックするという動作を永遠に繰り返します。画像.bmpは、スクリプトと同じフォルダに入れておいてください。

WHILE TRUE

IFB CHKIMG("画像.bmp")
BTN(LEFT,CLICK,G_IMG_X+1,G_IMG_Y+1,50)
ENDIF

WEND
    • good
    • 0
この回答へのお礼

こんな感じのやつです!本当に助かります。宜しければファイルに入れた画像を認識してくれるものも教えていただけませんか?

どちらにしろベストアンサーはfakeflakeさんにさせていただきますので回答なさらなくても構いません

お礼日時:2018/08/08 15:36

No.1のお礼に書かれてるスクリプトだって、同じになりますよ。


こちらにコピペする際に、COMMON_IMG_CLICKの部分を省略してるからでしょう。


No.1のお礼のスクリプトが動いてるなら、バックアップ取っといてその部分を書き換えては。
「uwcs のマクロで画像認識をしてその画」の回答画像3
    • good
    • 0
この回答へのお礼

どのような文にすればいいのか全くわかりません…それがわかればこちらの質問は締めさせていただきます。ご回答ありがとうございました

お礼日時:2018/08/07 17:32

COMMON_IMG_CLICK が何してるか不明瞭です。


画像を探してクリック、画像が無かったらFalseを返すって考えていいんでしょうか?


なら、延々クリックさせるなら、

While True
 COMMON_IMG_CLICK("画像", 0, 0, 0, 0, 0)
 Sleep(0.5)
Wend

とか。

--
> できれば特定のフォルダにある複数の画像を認識してクリックできると

だと、

Dim iFile

While True
 For iFile=0 to GETDIR("C:\フォルダ", "*.bmp")-1
  COMMON_IMG_CLICK(GETDIR_FILES[iFile], 0, 0, 0, 0, 0)
 Next
 Sleep(0.5)
Wend
    • good
    • 1
この回答へのお礼

素人で理解できていないかもしれないのですが、少し試して見ます。

お礼日時:2018/08/07 16:12

現状はどういうスクリプトですか?ループで画像が出るのを見張り続け、見つけたらクリックと言うスクリプトならば何度でも繰り返してクリックされるので、問題ないはずですが。

それとタイムアウトとは何でしょう?
    • good
    • 0
この回答へのお礼

kekka = 0
START_TM = Gettime()
WHILE (COMMON_IMG_CLICK("画像", 0, 0, 0, 0, 0) = False)
SLEEP(0.5)
IFB Gettime() - START_TM > 10
kekka = 1
BREAK
ENDIF
WEND
IFB kekka = 1
MSGBOX("タイムアウト")
ELSE
MSGBOX("クリック")
ENDIF
こんな感じですね。10秒でタイムアウトするようにしているのですがこれを無くしたいです。全く詳しくない初心者ですいません。

できれば特定のフォルダにある複数の画像を認識してクリックできると助かります。

お礼日時:2018/08/07 14:27

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

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


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