
プログラミングをかじったことのないわたしが、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も見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【WPF】画像の切り替え
-
「using Windows」でエラーが出る
-
【EXCEL VBA】ダブルクリックで...
-
HTML内に読み込んでいない画像...
-
vbを使った画像認識
-
画像のビット数を変更する方法
-
raspberry pi でプログラムを開...
-
VBAのユーザーフォームのイメー...
-
VBA シート毎に画像挿入
-
vb.net 画像の透過について
-
背景画像の繰り返しについて
-
イメージマップでマウスオーバ...
-
OpenCVを使った画像の切り抜き
-
画像が自動で残像が残るように...
-
gif 画像上の ボタンに リン...
-
画像のピクセルデータの取得
-
画像の重ね合わせがうまくでき...
-
エクセルのマクロでコンタクト...
-
画像認識アルゴリズムについて
-
パネルに画像
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
背景画像の繰り返しについて
-
EXCEL VBA 複数のImageコントロ...
-
【EXCEL VBA】ダブルクリックで...
-
uwcs のマクロで画像認識をして...
-
UWSCの画像認識と条件分岐につ...
-
UWSCでループ処理がうまくいき...
-
vb.net 画像の透過について
-
「using Windows」でエラーが出る
-
Excel ユーザーフォームで表示...
-
UWSC 画像判定と条件分岐について
-
uwscの画像認識に失敗します。
-
画像のビット数を変更する方法
-
jqueryスライダーを2段でスライ...
-
画像処理したBitmapをピクチャ...
-
UWSCの色判定
-
UWSCについて
-
スマホでサイトの画像を長押し→...
-
VBAのユーザーフォームのイメー...
-
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とは別にしたに書き込めばよいのかどちらでしょうか、