やぁ、みんな。ブラウザゲームやってるかい?
コロナ禍で時間が出来てしまったので、ついつい新しいブラウザゲームに手を出してしまったよ。
そのゲームの話題を扱っている掲示板に言ったら周回が辛いという話が出ていた。というかブラウザゲームって多かれ少なかれ周回あるよね。
あれって時間泥棒だよね。いや、やらなければいいってのは無しで。そこで地道な周回作業をマクロ化する為の、簡単なマクロの作り方を紹介するよ。
UWSCの画像認識を使って周回マクロを作ろう
自分の環境
OS : win10 64bit
ブラウザ : Google chrome
まぁ、ブラウザは何でもいいんだけどね。chrome入れてないって人はこれを機にchromeを入れてもいいんじゃないかな。使っているスマホとgoogle IDで連動させられるから便利だよね。
使用ツール
使用するマクロツールはUWSC
勿論無料。とても軽いし、使い方も単純なのでオススメ!
ダウンロードしたら、解凍して中身を見てみよう。初期のフォルダの中身はこんなん。
それでは起動してみよう。UWSC.exeをダブルクリックして起動してみて。
UWSCの起動と設定
起動したら、UWSCのランチャーが表示されるよ。
左から順に、読込、書込み、再生、録画、設定という並びになってる。今回紹介するマクロの作り方は、初期設定で大丈夫なので設定は変更しなくてもOK。
周回マクロを使いたいブラウザゲームの起動
ではターゲットとなるブラウザゲームを起動してみよう。例として自分が今プレイしている電脳天使ジブリールEXで作業をしていくよ。
周回マクロ作り作業を開始!
マクロ作りの流れを簡単に紹介しておこう。
- ブラウザゲームのハンドルIDをゲット
- マクロファイルにハンドルIDを記載
- 周回する際に、クリックが必要となる部分を画像認識でクリックさせる
- 実際に動かしてみて、安定して動くかを確認する。
こうやって書いてみると、少し難しく見えるかもしれないけれど、別に作業を理解する必要はない。同じように手を動かせばいいだけなので、作業の完了に10分もかからないと思うよ。ではやっていこう。
1.ブラウザゲームのハンドルIDゲット
UWSCのランチャーメニューからビデオマーク(右から2番目)をクリックしよう。そうすると録画モードになる。この状態でクリックすると、クリックした場所を記録してくれる。
今回は何も考えず、録画モードにしたらターゲットとなるブラウザゲームの画面上を一回クリックしてみよう。クリックしたらSTOPを押す。
すると、未保存という文字と、灰色だった保存ボタン、再生ボタンに色がついたね。今回は保存ボタンを押そう。左から2番目のやつね。
ファイル名は何でもいい。日本語でも英語でも数字でも。後からでも名前変えられるから適当につけてもいいよ。オススメとしては対象となるゲームの名前が入っていると後からわかりやすいかもね。
自分は電脳天使ジブリールEXのゲームマクロなので、ファイル名はジブリールマクロにしたよ。名前をつけて保存すると、UWSCのフォルダの中に【保存したファイル名】.UWSというファイルが新しく作られるよ。
2.UWSファイルを関連付ける
次はuwscのファイルを開けるようにしましょう。保存したファイルを
右クリック➡プログラムから開く➡別のプログラムを選択➡メモ帳
□常にこのプログラムを使って、.uwsを開く というチェック項目にチェック。
メモ帳ではなくても、自分の好きなテキストエディタでいいです。メモ帳しか入れてない人も多いと思うので、あえてメモ帳に関連付けしただけです。関連付け出来たところで先ほど保存した.uwsファイルを開いてみましょう。
3.ハンドルIDげっと!
画像クリックして大きくして見てみてね。
1行目と2行目にGETIDの後に” ”で囲まれている部分があるね。
“電脳天使ジブリールEX – FANZA GAMES(旧DMM GAMES R18) – Google Chrome”,”Chrome_WidgetWin_1″
ここで必要になるのは、” ”で囲まれている文字列の中で、一つ目の , まで。
つまり”電脳天使ジブリールEX – FANZA GAMES(旧DMM GAMES R18) – Google Chrome” ここの部分だね。じゃあコピーしよう。
マウスでコピーしたい部分を左クリックしながらなぞってあげて目的の文字まで選択(色を反転)できたら、キーボードのctrlとCを同時押しでコピー。
“電脳天使ジブリールEX – FANZA GAMES(旧DMM GAMES R18) – Google Chrome”
これが今回必要になるハンドルIDだね。キーボードのエンターを押して適当に空白行を作ってそこにコピーしておこう。ペーストのやり方はキーボードのctrlとVを同時押しね。
4.IDを設定するよ
id = GETID("") | |
HND = GETCTLHND(ID,"CHROME_RENDERWIDGETHOSTHWND") | |
MOUSEORG(Hnd, 2) |
基本の型を用意したので、これをコピーして貼り付けよう。そして先ほどゲットしたハンドルIDを設定すると…
id = GETID("電脳天使ジブリールEX – FANZA GAMES(旧DMM GAMES R18) – Google Chrome") | |
Hnd = GETCTLHND(id, "Chrome_RenderWidgetHostHWND") | |
MOUSEORG(Hnd, 2) |
こうなるね。何も難しいことはしてないよ。
5.停止ボタンを押すまで動き続けるようにするよ
これも簡単だよ。画像の様に、while true と wend を記述するだけ。説明するとwhile trueとwendの間にある処理を実行し続けろって意味だね。
もう少しで完成だよ。
6.画像認識を使う
画像認識というのは、画面上に同じ画像があったら何々しろって命令だね。まぁ、難しい説明など不要!コピーすればOK!
IFB CHKIMG("") | |
BTN(LEFT,CLICK,G_IMG_X,G_IMG_Y,10) | |
endif |
もし画像〇〇があったら、そこをクリックしろ。という命令。””の中には画像の名前が入るけど今はまだ画像が無いから空白だね。
7.画像を用意する
- 赤く囲んだ挑戦というボタンを自動で押したいとする。自動化したい画像を画面に表示した状態で、キーボードのPrint Screenボタンを押そう。ディスプレイ上の画面を一瞬でコピーしてくれる。
- windowsなら必ず入っているペイントを起動しよう。起動したらctrl+vでペースト。それでは目的の画像だけ切り出していこう。
切り出し方がわからないという人向けに説明すると、選択ツールで画像認識に必要な部分を選択ツールで選んでctrlとxを同時押しで切り出しだよ。そうしたら新しいファイルを新規で作って、ctrlとvを同時押しで貼り付け。
目的となる画像の周りには空白を作らないようにしよう。(キャンパスサイズを、張り付ける画像サイズよりも小さくしておくことで、細かな調整をする必要なく空白を無くすことが出来るよ)
保存する時は必ず、画像形式をbmpにしよう。jpegでは認識してくれないから注意!挑戦ボタンだから名前は 挑戦.bmp にでもしようか。
沢山の画像を切り出すのが面倒という方はLightshotがオススメ。インストール後、print screenボタンを押すだけでリアルタイムの画面上をトリミング感覚でbmp,png,jpegの好きな形式で画像を切り出せます
8.保存した画像を、uwscのフォルダの中に入れよう
9.画像認識に画像名を挿入しよう
先ほどの型に当てはめると……
IFB CHKIMG("挑戦.bmp") | |
BTN(LEFT,CLICK,G_IMG_X,G_IMG_Y,10) | |
endif |
こうなるね。これで同じ画像が表示された時に、自動でクリックしてくれるようになるよ。この画像認識を必要な分だけ書けば完成だ。単純な周回なら3~4つくらいの画像認識で事足りるんじゃないかな。
マクロの完成!
では完成したマクロを見てみよう。
画像認識を3回使っているね。
もし、電脳ハード.bmpという画像があったらそこをクリックしろ。
もし、おけ.bmpという画像があったらそこをクリックしろ。
もし、挑戦.bmpという画像があったらそこをクリックしろ。
たったの23行のプログラムで、永遠にイベントステージを周回し続けてくれるマクロが完成しました。
説明を飛ばしてしまいましたが、最後の行にあるwend。その一つ上にsleep(0.5)ってありますよね?これも必要なんで書いてください。これは0.5秒の間停止するって意味です。sleepを入れないと高負荷になってしまうので気をつけましょう。
!動かなかったら、ここをチェックしてみよう
- “”はちゃんと半角になっているか?
- ハンドルIDは正しいか?
- どこが間違ってるか判断出来ない人は、以下のテンプレの1行目にハンドルIDを、7行目にbmp画像名を入力してみよう
id = GETID("") | |
Hnd = GETCTLHND(id, "Chrome_RenderWidgetHostHWND") | |
MOUSEORG(Hnd, 2) | |
while true | |
IFB CHKIMG(".bmp") // 認識させたい画像ファイルを指定する | |
BTN(LEFT,CLICK,G_IMG_X,G_IMG_Y,10) | |
endif | |
sleep(0.5) | |
wend |
画像以外のところをクリックしたいんだけど……
画像を認識時に、画像とは別の場所をクリックしたい時は
BTN(LEFT,CLICK,G_IMG_X,G_IMG_Y,10)に数字を足し引きすることで可能です。
BTN(LEFT,CLICK,G_IMG_X+200,G_IMG_Y-50,10)
例えば、こう書くと画像からx方向に+200、y方向に-50の場所をクリックしろということになる。
ターゲットの画像が点滅してて認識してくれない……という時に利用することになると思います。
画像にエフェクトがかかってて画像認識が安定しない
エフェクトの掛かってない画像を探して、そこからクリック時の座標を調整してみよう。コツとしては画像全体を切り出すのではなく、画像の一部を切り出す感じです。大きく切り出してしまうと、画面全体に掛かっている余計なエフェクトが画像認識の邪魔をしてしまう可能性もあります。
例:巨神と誓女のリザルト画面の場合
どうしても出来ない場合はChkImgXという拡張機能を入れる手もあります。ですが、ChkImgXを入れるとブラウザでの裏マクロ化が不可能になるので、ここでの導入方法の紹介は控えたいと思います。
中級者であれば、ChkImgXの導入を。(非裏マクロ)
上級者であれば、Nox+ChkImgXの完全裏マクロを目指すのもいいかもしれません(要ハイスペックPC)
ご利用は計画的に
ブラウザゲームの周回は確かにつらいです。そこでマクロを使えば遥かに楽になるのは確かです。ですがこれは威張れることでも、ドヤることでもないのでひっそりと使いましょう。
今回のマクロの特徴は、マウス操作が奪われないということです。これはマルチディスプレイの時によりメリットが強くなる。
単純なuwscのマクロ機能を使うと、マクロの操作にマウスの操作が追従することでマクロを使いながらyoutubeの動画を探すといった行為や、ネットサーフィンをすることは無理だ。
けれど今回は、目的となるゲームのハンドルIDを指定することでバックグラウンド的な処理を行っているのでマウス操作を奪われることなく、マクロを実行することが出来る。
コメント
マクロ初心者です、画像の通りにやってみたんですが、WHILEに対しWENDが無い 5行目:WHILE TRUE(だったと思います)が出て機能しません
ゲームはオトギフロンティアです
その場合は、綴り間違いですね。while true と wendはセットで使うものなので、どちらかの綴りが間違っていると、そういったエラーが出ますよ。
while trueに綴り間違いがあると、対応するwhileが無いとのエラー文が出ますし。逆に、wendの綴りが間違っていると対応するwendがありませんと出ます。
もう一度、while trueとwendのどちらかに綴り間違いがないか確認してみてください。
確認しましたがやっぱりエラーが出てしまいますね、一応この記事からwhile trueと wendをコピーしてやってみたり自分で書き込んだりしましたができませんでした
オトギRで動作確認済みです。丸々コピペして画像名はご自分で変えてください
ありがとうございます・・・おかげさまで出来ました
情弱相手にわざわざ作っていただき申し訳ありませんでした。
お役に立ったようで良かったです(´・ω・`)b
できた
はじめまして。
マクロ初挑戦でほぼコピペさせていただいてchromeでやってみたのですが
変数:“CHROME_RENDERWIDGETHOSTHWND”が定義されていません
2行目:HND = GETCTLHND(ID,“CHROME_RENDERWIDGETHOSTHWND”)
と表示されて再生されませんでした…
本記事内でご紹介した2行目の記述と上げてもらった記述を並べてみます
正しい記述
Hnd = GETCTLHND(id, “Chrome_RenderWidgetHostHWND”)
寄せられた記述
HND = GETCTLHND(ID,“CHROME_RENDERWIDGETHOSTHWND”)
結構ありがちなミスの1つとして ”(ダブルクォーテーション)があります。見たところ、””が全角になっているようですので、確認してみてください。
記事内のgithubのコードの1つが全角になっていたようです。 すまぬorz
ありがとうございます!画像に全く変化が無い所ならクリックできるようになりました!
ですが目的のボタンが微妙に変化(点灯?)してるようで登録した画像と同じものとして認識してもらえませんでしたorz
そこで画像を認識した時にその画像とは別の場所をクリックする、ということはできますでしょうか?
すいません自己解決しました。
BTN(LEFT,CLICK,G_IMG_X,G_IMG_Y,10)のXとYの後ろに+-数字入れるだけで動かせるとは。
ただ最初認識できていた画像が2周目になると認識しなくなったり、画像認識シビアですねえ…
度々すみません…
ゲーム内の画像だと発光したり煙のようなものがかかって都合が悪かったので、DMMR18ゲームだと必ずある左上の「FANZAGAMES」ロゴを起点に特定個所をクリックさせることにしました。
それでアクティブ状態では問題なく機能して周回できることが確認できたのですが、非アクティブ状態では動かなくなってしまいます…
まだ何か間違っていたら教えていただきたく…(以下マクロ内容)
id = GETID(“ゲームID”)
Hnd = GETCTLHND(id, “Chrome_RenderWidgetHostHWND”)
MOUSEORG(Hnd, 2)
while true
IFB CHKIMG(“画像名.bmp”)
BTN(LEFT,CLICK,G_IMG_X+180,G_IMG_Y+535,10)
endif
sleep(5)
wend
少し調べてみたのですがuwscとの相性のせいかと思われます。仕様となってしまいますので、お力には慣れそうにありません。
わかりました。お手数おかけしてありがとうございました!
マクロ初心者ですが、申し訳ありません。
画像を参考にマクロ制作してみたのですが、マクロの動作はしているようなのですが
実際には周回が出来ていません。
ゲームは巨人と誓女です。
こちらの記事を参考にさせてもらって、実際に巨神と誓女でマクロを作ってみた者ですが
このゲームのボタンは背景が透過していたり微妙に明滅していたりで、うまく画像認識が働かないものが多いです
なので再戦時に出てくる本のアイコンなどの全く動かない画像を認識させて、そこからクリックする場所の座標を取る方法で安定して動作するようになりました
なるほどそれで画像認識が上手くいかなかったのですね。
画像ではなく座標で試しに作ってみます。
ありがとうございました。
度々申し訳ありません。
本を対象に座標をX軸-、Y軸を+でクリックするか試しにやってみたのですが、プログラムは起動しているようですが、クリックしたエフェクトは発生せず、沈黙したままとなります。
間違っている点がありましたらお教え願えるでしょうか。
(以下にスクリプト貼らせていただきます)
id = GETID(“巨神と誓女 R – FANZA GAMES(旧DMM GAMES R18) – Google Chrome”)
Hnd = GETCTLHND(id, “Chrome_RenderWidgetHostHWND”)
MOUSEORG(Hnd, 2)
while true
IFB CHKIMG(“本.bmp”) // 認識させたい画像ファイルを指定する
BTN(LEFT,CLICK,G_IMG_X-1,G_IMG_Y+1,10)
endif
sleep(0.5)
wend
BTN(LEFT,CLICK,G_IMG_X-1,G_IMG_Y+1,10)
-1じゃなくて-100とか-200みたいな大きな数字に設定したらいいと思うよ。-1だけじゃほぼ本画像の座標クリックしてるようなもんだよ
私もこちらの記事を参考にさせてもらって、マクロを組んでみていくつかの部分は組んだ通り動作しているのですが、
巨人との戦闘終了後のリトライの部分がうまくいかず、コメントを参考にさせてもらい動作していない部分をいくつか切り取って軸はそのままで組み込んでみたのですが、他の方が仰っているようにそもそもクリック自体発生しなかったりと動作しないです・・・
他の部分では成功しているので、構文はおかしくないと思うのですがどうしてでしょうか
×動作していない部分
〇点滅したり、動いたりしていない画像
点滅してる画像は使えないです。画像が少しも動いてなければ動作するはずですが、画像を大きく切り取りすぎると画像の外の細かなエフェクトのせいで認識しないとかもあるので、動いてないと思われる画像に関しては、認識したい画像より少し小さめに切り出すのがコツかと
動いてる画像が使えないのは承知しており、大小様々な大きさでいくつかの部分で試してはいるのですが
戦闘前、戦闘敗北時はそれで動作し、戦闘終了後だけは画像を認識させた一回目のみうまく行き、2回目の戦闘終了後はうんともすんとも言わなくなってしまうんですよね。
こんばんは、マクロ初心者なのでこちらのサイトを見ながらやったのですが動きません。何時間もやったのですがお手上げ状態です。申し訳ないのですが何が間違っているのか教えていただけないでしょうか。
id = GETID(“神姫PROJECT R【ブラウザ版】 – FANZA GAMES(旧DMM GAMES R18) – Google Chrome”)
HND = GETCTLHND(ID,”CHROME_RENDERWIDGETHOSTHWND”)
MOUSEORG(Hnd, 2)↓
↓
while true↓
↓
IFB CHKIMG(“イベントへ.bmp”) //認識させたい画像ファイルを指定する↓
BTN(LEFT,CLICK,G_IMG_X,G_IMG_Y,10)↓
endif↓
↓
IFB CHKIMG(“使用する.bmp”) //認識させたい画像ファイルを指定する↓
BTN(LEFT,CLICK,G_IMG_X,G_IMG_Y,10)↓
endif↓
↓
IFB CHKIMG(“再挑戦.bmp”) //認識させたい画像ファイルを指定する↓
BTN(LEFT,CLICK,G_IMG_X,G_IMG_Y,10)↓
endif↓
↓
IFB CHKIMG(“攻撃.bmp”) //認識させたい画像ファイルを指定する↓
BTN(LEFT,CLICK,G_IMG_X,G_IMG_Y,10)↓
endif↓
↓
IFB CHKIMG(“フレンド.bmp”) //認識させたい画像ファイルを指定する↓
BTN(LEFT,CLICK,G_IMG_X,G_IMG_Y,10)↓
endif↓
↓
IFB CHKIMG(“クエストへ行く.bmp”) //認識させたい画像ファイルを指定する↓
BTN(LEFT,CLICK,G_IMG_X,G_IMG_Y,10)↓
endif↓
↓
IFB CHKIMG(“ok.bmp”) //認識させたい画像ファイルを指定する↓
BTN(LEFT,CLICK,G_IMG_X,G_IMG_Y,10)↓
endif↓
↓
sleep(0.5)↓
↓
wend[EOF]
以上です。
動かすと、WHILEに対しWENDが無いと表示されます。
よろしくお願いします。
こんにちは。
示しているコードのダブルクォーツは、正しく半角を使っているのでしょうか
それは確認してください
僕は[EOF]消したらできました
ブラウザゲーの周回用に画像認識を2回行うマクロを組みました。
一か所目は普通に動作しましたが二か所目がなぜかそのボタンの上にマウスオーバーしないと
クリックが動作しません。
二か所目の画像の上にマウスを静止させたままであれば普通に周回してくれます。
G_IMG_X+xxなどの座標調整やsleepでクリックのタイミングなどを変えてみましたがうまくいきません。
これがなぜかわかる方いたらご助言をいただきたく。
どのブラウザゲーかわかんないから何となく思いついた程度だけどマウスオーバーしないとクリックイベントが発生しないようになってるのかも?だとしたらマクロ対策の一環だろうけど
バックエンド処理を諦められるなら画像認識後のクリック処理の前にマウスをクリックする座標に動かせばいいと思う
マクロ自体は動いていてマウスコントロールは保持できていますが、クリック時にアクティブウインドウが持っていかれます。
正しくできていればバックグラウンドのウインドウで動作させることができるのでしょうか?
とても分かりやすい記事、ありがとうございます
もう遅いかもしれませんが、1行目のidと2行目のIDは大文字小文字が違うので動かないのではないかと思います
試しに1行目をIDに変更すると動きました
違うかもしれませんがお確かめください
初めまして。自動化ツールの検索をしていてたどり着いたものなのですが、このソフトをVirusTotal無料オンライン スキャナーにかけたところ「Jiangmin Backdoor.Nhopro.i VBA32 TScope.Trojan.Delf」とでまして、2つのバックドアが検出れましたが、感染は大丈夫なのでしょうか?
こちらにあったリンクからDLさせていただいたファイルはuwsc5302.zipです。
作者様が亡くなられているとも書かれていたので作った方には聞くこともできず、詳しく記事を書かれてソフトも使用されている管理人様へお尋ねするのは筋違いとも思いますがお聞かせいただければ幸いです。
ウィルス感染の危険はないのでしょうか?
こんにちわ。
NOXでのマクロを組む場合
Hnd = GETCTLHND(id, “Chrome_RenderWidgetHostHWND”)のChrome Render~の部分はどうしたらよいのでしょうか。