プログラミングをかじったことのないわたしが、uwscをつい最近使い始めました。
さまざまなサイトから構文を引用して自分なりに組んでみたのですが、エラーこそでないですが思ったように回りません。
見当違いのことを書いているかもしれませんがどうぞよろしくお願いいたします。
やりたいことを軽く説明しますと、
・画像***.bmpを認識したら事前に組んだスクリプト□□□.uwsを読み込む
・画像〇〇〇.bmpを認識したらその画像をクリックする
・画像△△△.bmpを認識したらその画像をクリックする
・画像×××.bmpを認識したらその画像をクリックする
これらをいつでも認識して実行するマクロを組みたいです。
全くわからないなりに組んでみたのがこちらです。
修正とご指導のほどよろしくお願いします。
tmp=0
If (chkimg("***.bmp")=True)then tmp=1
If (chkimg("〇〇〇.bmp")=True)then tmp=2
If (chkimg("△△△.bmp")=True)then tmp=3
If (chkimg("×××.bmp")=True)then tmp=4
select tmp
case 1
call □□□.uws
case 2
BTN(LEFT, CLICK, G_IMG_X+50, G_IMG_Y+10, 5)
case 3
BTN(LEFT, CLICK, G_IMG_X+50, G_IMG_Y+10, 5)
case 4
BTN(LEFT, CLICK, G_IMG_X+50, G_IMG_Y+10, 5)
Default
BTN(LEFT, CLICK, G_IMG_X+50, G_IMG_Y+10, 5)
selend
→このスクリプトを◆.uwsとして保存し、
For 回数 = 1 to 50
call ◆.uws
next
exit
→とりあえず50回だけ回す設定にしました。
50回だけまわすこのスクリプトをuwscに読み込ませてマクロを起動させましたができませんでした。
説明しきれてないところや分かりにくいところがございましたら
わかる範囲でお答えしますので、よろしくお願いします。
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
> とエラーがでてきます、、
ESKじゃなくて、ESCです。スペルミスですね。
> にそれぞれwhileを組み込むのか
そうです。狙った画像が消えたかどうかは、それぞれのIFBの中で判定します。IFだと複数行に渡る処理を内蔵できないので、IFB~ENDIFを使ってください。ただ消えた確認は入れなくてもいける可能性も高いんで、まずは入れずにやってみては?
それと、IFBを4つ使ってそれぞれのクリック処理をそこに書いた場合は、SELECT~SELENDの処理は全部不要になり、変数tmpも不要になります。非常に単純になりますね。
WHILE TRUE
SLEEP(0.1) //念のため
IF GETKEYSTATE(VK_ESC) THEN BREAK
//1つ目の画像の判定
IFB chkimg("C:\Users\担当\Desktop\uwsc5302\クリア.bmp")
BTN(LEFT, CLICK…
//(場合によってはここに消えるのを待つ処理を入れる)
ENDIF
//2つ目の画像の判定
:
1つ目と同じ感じでIFBを書く。残りも一緒
:
WEND
No.5
- 回答日時:
> こちらはどのあたりに入れれば
実はとっても簡単で、◆.uwsをこのループの中に入れてしまえばいいです。
WHILE TRUE
SLEEP(0.1) //念のため
IF GETKEYSTATE(VK_ESC) THEN BREAK
tmp=0
If (chkimg("***.bmp")=True)then tmp=1
:
中略
:
BTN(LEFT, CLICK, G_IMG_X+50, G_IMG_Y+10, 5)
selend
WEND
ということです。こうすればこのスクリプト単体で実行できるし、反応してなさそうだったらESCキーで止められます。
あと画像認識の場合、画像ファイル名はフォルダ名も指定すべきですね。フォルダ名を省略すると、スクリプトと同じフォルダを見に行くと思いました。なので…
chkimg("***.bmp")
ではなく、
chkimg("C:\Users\貴方のユーザ名\Pictures\***.bmp")
のように、画像を入れているフォルダをフルパス指定しろってことです。
あと懸念事項として、クリックする対象がクリックしてもすぐには消えない場合は、消えるまで何度もクリックしてしまいます。今回提案してる方法だったらループ内にSLEEP(0.1)が入ってるので、この間に消えてくれるとは思いますが、場合によっては消えるのを待つ処理が必要になるかも知れません。以下がその例で、***.bmpで指定されたものが画面から消えるまでループが実行され続けます。
WHILE chkimg("C:\Users\貴方のユーザ名\Pictures\***.bmp")
SLEEP(0.1)
WEND
最後にもう1点、最初にIFで4つ判定してるけど、これは判定したその場でクリック処理を行う方が必ず全ての画像をクリックできるし、わかりやすいです。
IFB chkimg("C:\Users\貴方のユーザ名\Pictures\***.bmp")
BTN(LEFT, CLICK…
//(場合によってはここに消えるのを待つ処理を入れる)
ENDIF
IFB chkimg("C:\Users\貴方のユーザ名\Pictures\〇〇〇.bmp")
BTN(LEFT, CLICK…
//(場合によってはここに消えるのを待つ処理を入れる)
ENDIF
マウスカーソルの指摘もありますが、それの影響は受けないので平気です。Print Screenで画面キャプチャして、画像内に入ってこないものはCHKIMGの認識対象外になります。
No.4
- 回答日時:
デバッガがあるならステップ実行を、無いならログ出力して
どういう状態なのか把握した方が良いです。
以下補足コメントがあれば解決の糸口になるかもしれません。
◆.uwsだけ実行した場合判定できますか?
ループで実行した時だけ判定できないということですか?
2回目以降のループ時、マウスカーソルが邪魔してませんか?
まず、
If (chkimg("***.bmp")=True)then tmp=1
:
と連続しているくだり。
勝ち抜きになっていないので、4種類の画像が画面上にある時はtmpは必ず4になるけど問題無い?
とりあえずselect 文の前に
print tmp など追加して、判定ができているか確認すべきです。
また、認識する画像の色幅を持たせ、判定を甘くしてみる方法も1つ
引数未指定なので完全一致しない限り見つかった と判定されないので
第8引数の色幅を指定してみてください。
マウスカーソルが画像認識の邪魔をするようであれば、
仮でselendの後にMMV(0,0)など入れて、マウスカーソルを端に追いやるなどすると良いかも。
No.3
- 回答日時:
> 指定の画像が認識しないのです。
じぶんのとこでは認識してクリックしてます。
画像ファイルがまずいか、画像が表示されていない、画像がアニメーションとかしていてマッチしないとかでは。
No.1
- 回答日時:
□□□.uws とやらがどんなスクリプトなのかも気になりますが、おそらく50回ループではすぐに終わってしまい、確認にならなさそうな予感がします。
こういう変化待ちの場合は以下みたいな無限ループにしておいて、キーが押されたらループを抜けるようにした方が都合がいいと思います。以下の例では、ESCキーを押すとループが終わります。これだと◆.uwsとして保存してCALLする必要もありません。WHILE TRUE
SLEEP(0.1) //念のため
IF GETKEYSTATE(VK_ESC) THEN BREAK
WEND
あと、G_IMG_X+50 とかがクリック目標から外れちゃってるってオチはないですよね?確かにG_IMG_Xだけだとぴくっとでもマウスが動くと誤動作する危険がありますが、+50はずいぶんでかいよなと思ったんで。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) uwscとWinShotを使いスクリーンショットを撮る 1 2022/06/30 21:15
- その他(プログラミング・Web制作) uwscのCHKING関数の画像の認識がうまくいかない。 1 2022/06/18 20:55
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Excel(エクセル) Excel2019 マクロを使用し画像を貼り付けした際のリンク切れについて 2 2022/11/15 16:14
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- JavaScript jQueryで同じクラス名のものを別物として扱いたい 1 2022/06/17 14:14
このQ&Aを見た人はこんなQ&Aも見ています
-
見学に行くとしたら【天国】と【地獄】どっち?
みなさんは、一度だけ見学に行けるとしたら【天国】と【地獄】どちらに行きたいですか? 理由も聞きたいです。
-
スマホに会話を聞かれているな!?と思ったことありますか?
スマートフォンで検索はしてないのに、友達と話していた製品の広告が直後に出てきたりすることってありませんか? こんな感じでスマホに会話を聞かれているかも!?と思ったエピソードってありますか?
-
2024年に成し遂げたこと
今年も残すところわずか。 皆さんが今年達成したことを教えていただきたいです。 どんな小さなものでも構いません。
-
集合写真、どこに映る?
あなたが集合写真を撮られるとき、画角のどのあたりにいることが多いですか? 私は振り返ってみると右の端にいることが多い気がします。
-
我が家のお雑煮スタイル、教えて下さい
我が家のお雑煮スタイル、教えて下さい! (お汁)味噌汁系? すまし汁系? (お餅)角餅? 丸餅? / プレーンなお餅? あんこ餅?
-
uwcs のマクロで画像認識をしてその画像があればクリックというマクロを作成したのですが、クリック後
その他(開発・運用・管理)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「黒歴史」教えて下さい
- ・2024年においていきたいもの
- ・我が家のお雑煮スタイル、教えて下さい
- ・店員も客も斜め上を行くデパートの福袋
- ・食べられるかと思ったけど…ダメでした
- ・【大喜利】【投稿~12/28】こんなおせち料理は嫌だ
- ・前回の年越しの瞬間、何してた?
- ・【お題】マッチョ習字
- ・モテ期を経験した方いらっしゃいますか?
- ・一番最初にネットにつないだのはいつ?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
画像が分割されて切り替わる、...
-
XML管理による写真を更新しても...
-
ImageMagickでgif画像の一部が...
-
UWSCで指定した画像が来たとき...
-
UWSCで指定箇所のみループ
-
同じ画像を複数回表示させる
-
TempleteField列を行ごとに編集...
-
画像の重ね合わせがうまくでき...
-
C# Picturebox 縮小・拡大時の...
-
「using Windows」でエラーが出る
-
UWSC 画像認識で条件分岐
-
万華鏡
-
画像がうまく切り替わらない
-
bmp形式の画像を色の深さを24ビ...
-
svgクリップパスの応用コーディ...
-
スマホでサイトの画像を長押し→...
-
UWSCを使った画像認証マク...
-
【WPF】画像の切り替え
-
uwcs のマクロで画像認識をして...
-
生成AI画像について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel ユーザーフォームで表示...
-
uwcs のマクロで画像認識をして...
-
背景画像の繰り返しについて
-
jqueryスライダーを2段でスライ...
-
「using Windows」でエラーが出る
-
【EXCEL VBA】ダブルクリックで...
-
画像のビット数を変更する方法
-
EXCEL VBA 複数のImageコントロ...
-
スマホでサイトの画像を長押し→...
-
【WPF】画像の切り替え
-
vb.net 画像の透過について
-
同じ画像を複数回表示させる
-
画像が分割されて切り替わる、...
-
VBA シート毎に画像挿入
-
UWSC 画像判定と条件分岐について
-
UWSC 画像認識で条件分岐
-
UWSCの色判定
-
VBAのユーザーフォームのイメー...
-
UWSCの画像認識と条件分岐につ...
-
gif 画像上の ボタンに リン...
おすすめ情報
何がどうできなかったか記載するのを忘れていました。。
すみません。
エラーが出るわけではなく、マクロ自体は回っているみたいです
指定の画像が認識しないのです。
それぞれ個々では回るみたいなのですが
caseに入れると画像を認識してくれなくなってしまいます。。
□□□.uwsの中身は***.uwsの画像を認識して別の座標を連続タッチするというような内容になっております。
お教えいただいた内容の
WHILE TRUE
SLEEP(0.1) //念のため
IF GETKEYSTATE(VK_ESC) THEN BREAK
WEND
こちらはどのあたりに入れればよいのでしょうか、
ほんとに右も左もわからなくてすみません、、
クリックの座標が仮にずれていたら、そのずれている座標にカーソルが移動すると思うのですがそのようなこともなかったので、、
caseを使わないでこの画像を認識したらクリックするというマクロそれぞれ別に組んでみて回してみると、その画像自体は認識してクリックしてくれるんです、、、
何らかの理由でマッチしていない可能性があるんですかね、、
◆.uwsのみで実行し再確認したところ、
case1以外は認識してくれませんでした、
認識せずにそのままマクロが終了するといった感じです。
4種類の画像がいっぺんに同じモニター中には表示されることはないんです。
仮に表示されたとすると4になるんですね、、
色幅の指定なんてあるんですか、、!
それはどうやったらよいのでしょうか、、
変数:VK_ESKが定義されていません
3行目:IF GETKEYSTATE(VK_ESK) THEN BREAK
とエラーがでてきます、、
わざわざcaseをつけなくてもループのマクロを組めばクリックしてくれるってことですね
盲点でした、、
WHILE chkimg("C:\Users\貴方のユーザ名\Pictures\***.bmp")
SLEEP(0.1)
WEND
これはどこに書けばいいのですか、、?
tmp=0の下の
If (chkimg("C:\Users\担当\Desktop\uwsc5302\クリア.bmp")=True)then tmp=1
にそれぞれwhileを組み込むのか
またcaseとは別にしたに書き込めばよいのかどちらでしょうか、