
画面上のアイテム(5mm四方の点など)が消失した時、
それを認識して任意の場所を自動的にクリックしてくれるような
ソフトはないでしょうか。
または、画面上の特定の部分の色が変化したときに、
それを認識して任意の場所を自動的にクリックしてくれるような
ソフトはないでしょうか。
クリックを繰返し行ってくれるものや、
特定の時間に特定の場所をクリックしてくれるものはあるようなのですが、
画面上の変化がクリック発動のトリガーになるものがないか探しています。
非常に偏った質問ですが、よろしくお願いします。
No.5ベストアンサー
- 回答日時:
ANo.2のものです。
>ただ、今回スクリプトの画面サイズの部分を
>
>// 画面サイズ
>CONST X_MAX = 1680
>CONST Y_MAX = 1050
>
>と書き直して実行した際、上記のエラーが発生したので、
>UWSCというものは画面サイズ1024×768までしか、
>命令できないんでしょうか。
失礼しました。配列のインデックス計算にバグがありました。
UWSCは2次元配列が使えるようですので、OldColorを2次元配列に修正しました。プログラムとしてもこの方が読みやすいと思いますし。
また、画面サイズを示す特殊変数(G_SCREEN_W,G_SCREEN_H)がありましたので、使用してみました。いままでのように数値を直接記入することでも問題ありません。
// 画面サイズ
CONST X_MAX = G_SCREEN_W
CONST Y_MAX = G_SCREEN_H
DIM OldColor[X_MAX][Y_MAX];
// X座標変化範囲を指定
CONST X_START = 1421
CONST X_END = 1425
// Y座標変化範囲を指定
CONST Y_START = 480
CONST Y_END = 483
Total = ((X_END - X_START) + 1) * ((Y_END - Y_START) + 1)
// 起動時の指定範囲の色を得る
FOR x = X_START to X_END
FOR y = Y_START to Y_END
OldColor[x][y] = PEEKCOLOR( x, y ) // 座標(x,y)の色を得る
NEXT
NEXT
WHILE True
Count = 0
// 起動後の指定範囲の色を得て、変化をチェックする
FOR x = X_START to X_END
FOR y = Y_START to Y_END
NewColor = PEEKCOLOR( x, y )
// 変化あり?
IFB NewColor <> OldColor[x][y]
Count = Count + 1
ENDIF
NEXT
NEXT
// 指定範囲の全ての色が変化?
IFB Count = Total
BREAK
ENDIF
WEND
MSGBOX("指定範囲の全ての色が変化しました")
ご回答ならびにご検討、誠にありがとうございました。
>UWSCは2次元配列が使えるようですので、OldColorを2次元配列に修正しました。
>プログラムとしてもこの方が読みやすいと思いますし。
プログラムに疎い私にはよく理解できませんでしたが、
実際にプログラムを走らせて見たところ、
見事に問題が解消されておりました。
とても、使いやすくなりました。
ありがとうございました。
私ももう少し理解できるよう頑張りたいと思います。
この度は長々と親切にご伝授して頂きまして
誠にありがとうございました。
この感謝の気持ちを大事にしたいと思います。
本当にありがとうございました。
失礼致します。
No.4
- 回答日時:
ANo.2のものです。
>また、もし可能であれば参考までにお聞きしたいのですが、
>実際に色の変化を監視する座標範囲を
>スクリプトに書き込んで実行しようとすると、
>
>>Uスクリプト:変数:OLDCOLOR配列をオーバーしています。
>>22行目:OLDCOLOR[IDX]=PEEKCOLOR(X,Y)
>
>という、警告が出る場合が多々あります。
>座標範囲を少しずらすなどすると問題が解消される場合があるのですが、
>もし原因がわかりましたらお願い致します。
具体的にどのような修正されたのかが分からないので推測になりますが、画面サイズ1024×768を超える座標を指定しているのかもしれません。
>最終的には目標を達せられたようですが、
>少し不安の残る結果となりました。
>再度、検討を繰り返していきたいと思います。
具体的な仕様を示していただければ、的確なアドバイスができるかもしれませんが、仕様を想像して回答しているため、少しズレたアドバイスになってしまったかもしれませんね。
この回答への補足
再度、ご回答ありがとうございます。
大変感謝致します。
また、言葉足らずで申し訳ありません。
>画面サイズ1024×768を超える座標を指定しているのかもしれません。
まさにそれが原因のようです。
画面サイズ1680×1050で使用した為、
部分的に使用可能な範囲(1024×768範囲内)があるだけで、
指定場所によってはプログラムを走らせることができたようです。
ただ、今回スクリプトの画面サイズの部分を
// 画面サイズ
CONST X_MAX = 1680
CONST Y_MAX = 1050
と書き直して実行した際、上記のエラーが発生したので、
UWSCというものは画面サイズ1024×768までしか、
命令できないんでしょうか。
*************************(失敗例1)*****************************
// 画面サイズ
CONST X_MAX = 1680
CONST Y_MAX = 1050
DIM OldColor[X_MAX * Y_MAX];
// X座標変化範囲を指定
CONST X_START = 1421
CONST X_END = 1425
// Y座標変化範囲を指定
CONST Y_START = 480
CONST Y_END = 483
Total = ((X_END - X_START) + 1) * ((Y_END - Y_START) + 1)
// 起動時の指定範囲の色を得る
FOR x = X_START to X_END
FOR y = Y_START to Y_END
Idx = (x * X_MAX) + y
OldColor[Idx] = PEEKCOLOR( x, y ) // 座標(x,y)の色を得る
NEXT
NEXT
WHILE True
Count = 0
// 起動後の指定範囲の色を得て、変化をチェックする
FOR x = X_START to X_END
FOR y = Y_START to Y_END
NewColor = PEEKCOLOR( x, y )
Idx = (x * X_MAX) + y
// 変化あり?
IFB NewColor <> OldColor[Idx]
Count = Count + 1
ENDIF
NEXT
NEXT
// 指定範囲の全ての色が変化?
IFB Count = Total
BREAK
ENDIF
WEND
BTN( LEFT,CLICK)
****************************(成功例)****************************
// 画面サイズ
CONST X_MAX = 1680
CONST Y_MAX = 1050
DIM OldColor[X_MAX * Y_MAX];
// X座標変化範囲を指定
CONST X_START = 1011
CONST X_END = 1018
// Y座標変化範囲を指定
CONST Y_START = 430
CONST Y_END = 442
以下略
***************************(失敗例2:1ドット検出)*************************
// 画面サイズ
CONST X_MAX = 1680
CONST Y_MAX = 1050
DIM OldColor[X_MAX * Y_MAX];
// X座標変化範囲を指定
CONST X_START = 1011
CONST X_END = 1018
// Y座標変化範囲を指定
CONST Y_START = 430
CONST Y_END = 442
Total = ((X_END - X_START) + 1) * ((Y_END - Y_START) + 1)
// 起動時の指定範囲の色を得る
FOR x = X_START to X_END
FOR y = Y_START to Y_END
Idx = (x * X_MAX) + y
OldColor[Idx] = PEEKCOLOR( x, y ) // 座標(x,y)の色を得る
NEXT
NEXT
WHILE True
Count = 0
// 起動後の指定範囲の色を得て、変化をチェックする
FOR x = X_START to X_END
FOR y = Y_START to Y_END
NewColor = PEEKCOLOR( x, y )
Idx = (x * X_MAX) + y
// 変化あり?
IFB NewColor <> OldColor[Idx]
Count = Count + 1
ENDIF
NEXT
NEXT
// 指定範囲の全ての色が変化?
IFB Count = 1
BREAK
ENDIF
WEND
BTN( LEFT,CLICK)
No.3
- 回答日時:
ANo.2のものです。
>あとは、自分の使用するPC画面大きさに数値を合わせ、
>モニターしたい座標範囲は、マウスカーソルの現在座標を
>教えてくれるプログラムを使用して、数値を計測し、
>その値に書き換えれば、良いということで間違いないでしょうか?
>例)画面左上から、だいたいXに5mm、Yに5mm進んだ四方5mm程の範囲は
> 座標(7,7)~(12,12)の全変化を検出する
>というように、スクリプトを書き換えればいいと、認識しています。
上記の認識であっています。
>メッセージボックスで色が変化したことを教えてくれるもののようですが、
>色が変化した直後に、クリックを発動してくれると大変うれしく思います。
>贅沢を言ってしまい申し訳ありません。
クリックはBTN命令を使用します。
座標(100,100)をクリックしたいのであれば、MSGBOXの部分を、BTN( LEFT,CLICK, 100, 100)とすればよいです。
もし、変化したドット位置をクリックしたいということであれば、「Count = Count + 1」を「BREAK 3」に変更して、MSGBOXの部分を、BTN( LEFT,CLICK, x, y)とすればよいです。
ANo.2のスクリプトは起動時の画面との変化をチェックするので、リアルタイムな変化を繰り返し検出するのであれば、修正が必要となります。
変化したドット位置を繰り返しチェックしてクリックするスクリプトは以下のようになります。(前回のスクリプトからの変更点のみ)
ドット単位の処理なので、複数のクリックが行われますので、ご希望の動きとは異なると思いますが、、、
WHILE True
WHILE True
// 起動後の指定範囲の色を得て、変化をチェックする
FOR x = X_START to X_END
FOR y = Y_START to Y_END
NewColor = PEEKCOLOR( x, y )
Idx = (x * X_MAX) + y
// 変化あり?
IFB NewColor <> OldColor[Idx]
OldColor[Idx] = NewColor
BREAK 3
ENDIF
NEXT
NEXT
SLEEP(0.1)
WEND
//マウスクリック
BTN( LEFT,CLICK, x, y)
WEND
なお、私は使用したことがありませんが、指定した画像が画面上にあるかチェックするCHKIMGという命令があります。アイテム消失したときの画像が明確なら、こちらを使用したほうが良さそうですね。
この回答への補足
余談なのかもしれませんが、
いろいろとスクリプト文を組み合わせて、
試行錯誤しているのですが、
監視範囲内の
>1ドットだけの変化を検出したい場合は、
>IFB Count = TotalをIFB Count = 1に変更すれば良い
との事でしたので、それも試してみたのですが、
感度が高すぎるのか、すぐに変化があったと報告があがります。
そこで、Count数を上げるなどしてみたのですが、
それもどうもうまくいきませんでした。
最終的には目標を達せられたようですが、
少し不安の残る結果となりました。
再度、検討を繰り返していきたいと思います。
再度ご回答ありがとうございます。
丁寧にいろいろな提案をして頂きまして誠にありがとうございます。
前半のプログラムで、目的を達することができました。
最後のBTNの命令の際、クリック位置の指定を行わない場合は、
スクリプトに入力した座標位置を空白にすればよいようですね。
しかし、まだ、若干のタイムラグが発生するようなので、
後半に提案して頂いたプログラムも、できるかわかりませんが、
試してみたいと思います。
gooサイトに画像判定のプログラムの質問をされている方が
いるようなので、そちらを参考に頑張ってみたいと思います。
また、もし可能であれば参考までにお聞きしたいのですが、
実際に色の変化を監視する座標範囲を
スクリプトに書き込んで実行しようとすると、
>Uスクリプト:変数:OLDCOLOR配列をオーバーしています。
>22行目:OLDCOLOR[IDX]=PEEKCOLOR(X,Y)
という、警告が出る場合が多々あります。
座標範囲を少しずらすなどすると問題が解消される場合があるのですが、
もし原因がわかりましたらお願い致します。
この度はご親切な回答誠にありがとうございました。
とても嬉しく思います。
難しいかもしれませんが、私も少しでもプログラムを学んで、
運用していけるようになっていきたいと思いました。
ありがとうございました。
No.2
- 回答日時:
UWSCをご存知だということなので、UWSCでスクリプトを作成してみました。
座標(0,0)~(4,4)の全変化を検出するまで実行するスクリプトです。1ドットだけの変化を検出したい場合は、IFB Count = TotalをIFB Count = 1に変更すれば良いです。
具体的な使用例を教えていただければ、もっと具体的にアドバイスできると思います。
即興で作成したものなので、バグがあった場合はご了承ください。
// 画面サイズ
CONST X_MAX = 1024
CONST Y_MAX = 768
DIM OldColor[X_MAX * Y_MAX];
// X座標変化範囲を指定
CONST X_START = 0
CONST X_END = 4
// Y座標変化範囲を指定
CONST Y_START = 0
CONST Y_END = 4
Total = ((X_END - X_START) + 1) * ((Y_END - Y_START) + 1)
// 起動時の指定範囲の色を得る
FOR x = X_START to X_END
FOR y = Y_START to Y_END
Idx = (x * X_MAX) + y
OldColor[Idx] = PEEKCOLOR( x, y ) // 座標(x,y)の色を得る
NEXT
NEXT
WHILE True
Count = 0
// 起動後の指定範囲の色を得て、変化をチェックする
FOR x = X_START to X_END
FOR y = Y_START to Y_END
NewColor = PEEKCOLOR( x, y )
Idx = (x * X_MAX) + y
// 変化あり?
IFB NewColor <> OldColor[Idx]
Count = Count + 1
ENDIF
NEXT
NEXT
// 指定範囲の全ての色が変化?
IFB Count = Total
BREAK
ENDIF
WEND
MSGBOX("指定範囲の色が変化しました")
この回答への補足
ご回答ありがとうございます。
非常に親切な回答に感激しております。ありがとうございました。
当方、プログラムは初心者なので、詳しくはわからないのですが、
プログラムを走らせることはできました。
ありがとうございます。
あとは、自分の使用するPC画面大きさに数値を合わせ、
モニターしたい座標範囲は、マウスカーソルの現在座標を
教えてくれるプログラムを使用して、数値を計測し、
その値に書き換えれば、良いということで間違いないでしょうか?
例)画面左上から、だいたいXに5mm、Yに5mm進んだ四方5mm程の範囲は
座標(7,7)~(12,12)の全変化を検出する
というように、スクリプトを書き換えればいいと、認識しています。
さらに、その四方5mmの範囲内の1ドットのみの変化を見たいときは
IFB Count = TotalをIFB Count = 1にすれば、いいと認識しています。
それから、このスクリプトでは色が変化した場合、
メッセージボックスで色が変化したことを教えてくれるもののようですが、
色が変化した直後に、クリックを発動してくれると大変うれしく思います。
贅沢を言ってしまい申し訳ありません。
クリックの位置は予め、マウスのカーソルを合わせておけば、
いいと考えているので、座標指定を含んだスクリプトでなくても
いいと思います。
具体的用途としては、反射神経を問うようなクリックゲームを
イメージして頂ければ良いと思います(実際は異なるのですが)。
画面上のアイテムを監視し、アイテム消失したとき、瞬時にボタンを押して、そのタイムを競う。
そのようなゲームをイメージして頂ければ良いと思います。
この度は親切な回答ありがとうございました。
引き続きアドバイス頂けますと大変うれしく思います。
よろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Outlook(アウトルック) PCで登録途中の画面から認証コードを確認する方法を教えてください。 3 2022/09/29 06:11
- Windows 8 動画の再生とタイトルの変更方法を教えてください。 3 2022/08/01 14:51
- Windows 10 Windows10でセーフモードが出来ません。 2 2022/04/22 23:37
- プリンタ・スキャナー 印刷 キャンセル&印刷できない 2 2022/11/29 16:45
- HTML・CSS トリミングで表示した画像をクリックで元どおりにしたい 3 2022/12/16 18:49
- Windows 10 Microsoftアカウントでログインできなくなった場合の対処を教えてください 1 2023/03/03 15:45
- Visual Basic(VBA) VBA 画面上のカーソルに文字数字を入力するコードを教えて下さい 1 2022/10/30 10:31
- YouTube youtube画面が青くなる現象 2 2023/07/24 13:07
- Windows 10 外付けハードディスクの使いまわし方 1 2022/09/09 12:43
- マウス・キーボード マウスの左クリックを長押しした際に、”長押しだと判定”されるまでの時間を設定したいです。 3 2023/01/09 11:40
このQ&Aを見た人はこんなQ&Aも見ています
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
スクリプトって、何ですか?ど...
-
自動巡回について
-
PDFファイルを分割するマクロの...
-
Craving Explorerで、いくらや...
-
スクリプトって何?(パソコン初...
-
NetScapeで「お使いのブラウザ...
-
スクリプトエラー
-
シャットダウン時にメッセージ...
-
illustrator10で複数の画像を一...
-
ドクター・ハウスのスクリプト
-
FlashでNow Loading・・・の作...
-
イラストレータに配置した写真...
-
デジタル時計の時刻合わせの方...
-
エクセルのシート上に別のシー...
-
ウインドウを毎回同じ位置、大...
-
Excelでワードアートや図を常に...
-
エクセルでポップアップを出し...
-
エクセルVBAでフォームのListbo...
-
Javascript_submit()完了後に処...
-
Outlookでこのような表示がされ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
スクリプトって、何ですか?ど...
-
PDFファイルを分割するマクロの...
-
【このスクリプトの実行を中止...
-
Googleスプレッドシートで特定...
-
質問なんですけど……
-
Flexible Renamer にてランダム...
-
イラレにエクセルデータ挿入方...
-
スクリプトって何?(パソコン初...
-
Firefoxの拡張NoScriptの使い方...
-
PhotoShopで色域指定による範囲...
-
PDFで年齢を計算したいのです。
-
UWSCというソフトで自動化を行...
-
画面認識型の自動クリックソフ...
-
NetScapeで「お使いのブラウザ...
-
Dreamweaver CS3 外部 JS ファ...
-
バッチファイルでdiskpart.exe...
-
受信メールボックスの中からメ...
-
スクリプトエラー?!
-
このページのスクリプトがIn...
-
複数の写真に一括でフレームを...
おすすめ情報