UWSC初心者用スレ2
質問なんですが、PCを買い替えた場合、モニターのサイズと解像度が同じなら画像をそのまま新しいPCでも流用することは可能ですか? それとも画像を再取得する必要があるのでしょうか? 拡大縮小してなければモニタの解像度が違っても行けるだろ >>36 ブラウザの操作ならブラウザの縦横幅を同じにすれば使える 解像度は影響しないように汎用的に作れば良い 色が グラボやOSやソフトで、グラデやスムジを切るか、旧と同じに 動く画像を認識させる方法ってないのかな? いくら調べても静止画像の認識方法しか出てこないんだけど 動いてる画像を録画ツールで記録して、静止画に分解して、分解した画像をchkimgxで認識させてる windows11へアップグレードしたけど画像が撮り直しになってしまった 仮想OSのほうもイメージ自体は変わってないはずだけどそっちも画像が取り直しになって めんどくさいから10に戻した 初心者です。同じ名前の複数ウインドウを指定位置にそれぞれ移動させたいのですがうまくいきません GETALLWINではやりたい動きにはならなかったので他の方法でわかる人いませんか? 見つかったウィンドウを順番に指定位置に移動するのではダメということですか 自動化しない場合は同じ名前のウィンドウをどうやって区別しますか >>51 1番目に見つけたのを左上、2番目を右上、3番目を左下みたいな感じにしたいです ACWでの区別の方法がわからない状態です 見つけた順を元にするのならわざわざ区別する必要は無いだろ 見つけたものから順に処理させれば良いだけのことだ >>53 使い方がわかってないのでは >>52 getallwinで取れるidの配列をforループか個別にacwに指定したらダメですか FOR n = 0 TO GETALLWIN() - 1 DIM ID = ALL_WIN_ID[n] acw(id,位置指定とか) 省略 ネットのテンプレ文を少し変えて使ってるレベルの理解度なので応用とかは全然わかってないです >>54 試してみます ありがとうございます >>55 >>54 に書かれているものと組み合わせて STATUS()でとったタイトルを IF で判断して必要な場合だけ ACW()するようにする 特殊な表示をしていればSTATUS()で思うような内容が 返ってこないことはありえるけど滅多にないだろう テスト中STATUS() で返ってくる内容をチェックするには ウィンドウ数が少なければMSGBOX() 多ければSLEEP()で適当に時間をとりながらPRINTを使う 選択的に表示しないで にPRINT一回一回にSLEEPを使わず GETALLWIN()の内容を全部表示したあと SLEEP()を長くとってまとめてチェックすれば IFでの処理間違いで表示が出ない場合などの確認ができる テスト中はSTOPFORM()を表示して 止めたいときに止められるようにしておくといい >>56 詳しくありがとうございます やってみます 実行中 UWSC自体の位置を変えて終わるときに位置を元に戻す といったことをやりたいのですが UWSC自体のウィンドウの制御ってどうやるんでしょう? >>58 UWSC自体というのが https://img02.hamazo.tv/usr/k/t/p/ktpcschool/uwsc.png ( https://ktpcschool.hamazo.tv/e7906854.html ) (↑このURLは画像を借りた場所という以上の意味はないです) これのことだとしたら GETID("UWSC", "TUMain_uwsc") で取得したIDで動かすことができる ただ、もしかしたら勘違いしてるんじゃないかという気がするのは 実行時にそのウィンドウは別に必要ないということ コマンドプロンプトその他から c:\dokoka\UWSC.exe c:\script\nanika.uws param1 param2 param3 ... の形で実行されさえすればいい 拡張子uwsと関連付けができていればエクスプローラー上で uwsをダブルクリックすれば動作するようになる HKEY_CLASSES_ROOT\Applications\UWSC.exe\shell\open\command や HKEY_CLASSES_ROOT\uws_auto_file\shell\open\command の 既定値を "c:\dokoka\UWSC.exe" "%1" %* のように「%*」 をつければパラメータも扱えるようになるので uwsのショートカットにパラメータを記述して動かせるようになる コマンドプロンプトでもいちいちUWSC.exeを書かなくても c:\uwsscript\nanika.uws param1 param2 param3 ... で動かせるようになる 環境変数PATHにc:\uwsscript を追加すれば パスを指定する必要もなくなり nanika.uws param1 param2 param3 ... で動作させられるようになる 「一定時間マウス操作が無かった時に発動する命令」についての質問です 命令@を繰り返し続ける ↓ 1分間クリックが行われなかった場合は 命令Aを行う ↓ 命令@の繰り返しに戻る という命令文を「adbの裏マクロ」で組みたいです。 通常のマクロで上記を行う場合は「マウスカーソルの座標が移動したかどうか」 を発動条件にすればできると聞きましたが、 マウスの動かない裏マクロで上記をみたす命令文は構築できるのでしょうか できる場合は例文やヒントを教えていただきたいです 1分間クリックが行われない状況が多岐にわたるため 「特定の画面になったら命令Aを行う」はできそうにありませんでした マウスカーソルの座標を取得し、一分後のマウスカーソルの座標と比較 >>63 マウスが動かないためそれが出来ず困っています 「クリックが行われたかどうか」の有無を判定する命令文があればいいのですが… 下の想定はあってる? ゲームを裏で自動で動かす一方で表ではPCをいろいろ使ってる ゲーム内で1分クリックがなかった場合は命令2をする クリックはどうやって行われるの? 命令1の中にクリックが含まれる? 気が向いた時に自分でゲーム操作してクリックする? THREAD checkCur() //以下の命令文を「checkCur()」で監視する WHILE TRUE //@を繰り返す (操作@) WEND PROCEDURE checkCur() //「checkCur()」の効果を下記のうように定める t = GETTIME() WHILE TRUE x = G_MOUSE_X y = G_MOUSE_Y SLEEP(1) IF G_MOUSE_X <> x OR G_MOUSE_Y <> y THEN t = GETTIME() FUKIDASI(GETTIME() - t) IF GETTIME() - t >= 60 THEN BREAK WEND (任意の操作A) //60秒何もなかったらAを実行 FEND >>65 想定としては PCを全く触らない想定です クリックのが実行は 特定の画像を見つけたら、定位置3か所程度をクリックするというものです これを@の繰り返し部分につかっています。 他人の書いた命令文の見様見真似で >>66 を走らせてみたのですが @を60秒間繰り返したのち、すぐにAが発動しちゃっていて 裏マクロのクリックはマウスの動作として認識されていないようでした それ画像が見つからない状態が一定時間経過したら命令2に移行するでいいんじゃないの adbによるタップはマウスカーソル座標とか全く関係無いよ >>68 その方式にしたら私の知識でもうまく作れそうですね… ただ、他のマクロにも利用できる汎用性のあるものを作りたいと考えていて 「一定時間クリックが行われなければ」をトリガーにした命令文を作りたい と考えています 改めて調べてみたのだけどクリック判定は難しそうです ひとまず、画像なしを一定時間(複数回)検知したら〜という方式で作ってみます ありがとうございます >>66 checkCur() は一度Aを実行すると終了して それを実行していたスレッドも終了してしまう ループを2重にしてAを実行したあとはまた最初っから の処理を繰り返す必要があるのでは タップしたかどうかで判定したいならadbによるタップを関数化して 関数内でグローバル変数に最後にタップした時間をGETTIMEで入れればいい こんなん? public isclicked=0 (省略) procedure adbclick(引数省略) isclicked=1 doscmd(引数省略) fend >>71 たしかにその通りでした >66だとA発動条件の監視は1度だけになっていました 見てわかるのがすごい。私は走らさせないとわからなかった >>72 >>73 言っていることは朧げに分かりますが それを命令文化する知識が足りません。でもありがとうございます! >>73 を参考に方法を調べてみます >>76 Windowsが動くマックなら使えるでしょ 試してないけど 質問します。 無料バージョンとProバージョで、単にExcel起動させるスクリプトなんですが、無料はちゃんと動くがProは工ラーが出てしまう。 Verはどちらも 5.3.0.2です。 ただ、ー部のスクリプトはProでも動きます。 使い始めて間がないので、よくわかってないところが大部分です。 よろしくお願いします。 動くスクリプトと動かないスクリプトをそのまま貼り付けて書き込みしましょう ついでにどう動かないのか エラーメッセージが何なのかも書いた方がいい 78です。 家に帰ったら、スクリプトとエラーの表示内容をアップします。 >>78 です EXCEL = CREATEOLEOBJ("Excel.Application") EXCEL.visible = True EXCEL.Workbooks.add() セキュリティソフトを起動させておくと>>83 のエラーが出たけど、OFFにしておくと問題ない EXCEL = CREATEOLEOBJ("Excel.Application") EXCEL.Workbooks.add() EXCEL.visible = True 昨日まで問題なく使えてたChklmgXが急に画像認識しなくなったんだけど何か原因ありますか? 原因が有りすぎて特定できん 一つずつ原因を探って行くしか無い たびたび認識しなくなるようなら 認識用の画像を取り込むマクロ組んだほうが早い >>86 ですが、どんな感じでおかしくなったかというと、 例えば「OK」というボタンがあって、色々な「OK」ボタンがあるのですが、その違いはほとんどありません。 (OとKの隙間が何ミリ違うとかのレベル) 先日までは色々な「OK」ボタンを全て認識してくれていたのですが、急に認識しなくなりました。 どれぐらい認識しないかというと通常のChklmgぐらい認識してくれません。 >>90 chkimgXは全く同じ形でも大きさが変わると認識できない なぜ今まで認識できていたかはわからないけどそれが本来の挙動 Windows10だとスケーリング変えるだけで動かなくなるからそこがが一番怪しいと思うけど 次の日いきなりということ他のソフトの影響や権限関係で画像キャプチャ自体を拾えなくなってる可能性もある OKボタンをキャプチャできないように対策された可能性も 画像の撮り直しするしかないだろうな 自分も年2回くらいの頻度でゲームのメンテ後にそういう状況になる アンチエイリアスが掛かっていると 同じ画像のはずなのに僅かなドットの違いで 反応しなくなったりするみたいだな なんならビデオカードのドライバが変わるだけでアウトだったりするしな ほんの僅かな違いで認識しなくなる OKの画像でダメならOだけの画像にするとはよくやる ギリギリまで無駄な部分を削って誤差を少なくするのは基本 画像認識で押さなくとも、CLKITEMで押せたりもする すみません教えて下さい! @〜Bの写真を順番にクリックしたいんですけど@の写真がなければAとBの動作はしないようにするには@のchkimg()のあとに=trueをつけるといいんですか? あと@〜Bを順番に動作させたい場合はstepは使わないですか?step入れてみたのですが訳がわからなく使っててよく分かりません @の画像とAの画像同時に存在するときに動作するようにする ifb chkimg@ and chkimgA click 教えてもらえませんか? アクティブなウィンドウで選択している文字をCTRL+Cでコピーしたいのですが アクティブなウィンドウが取得できません ACW(GETID(GET_ACTIVE_WIN))をやっているのですが 別のウィンドウからコピペされてしまいます ACW(0)だとALT+F1ではコピーできますが、再生ボタンを押すと 別のウィンドウからのコピペになってしまします どうしたらアクティブなウィンドウを指定できますか? >>103 自己解決です。 どうしても使いたい機能がある別のマクロソフトと 組み合わせることにしたので アクティブなウィンドウの指定がいらなくなりました お騒がせしてすいません こんばんは。初心者用スレではない方でも書き込んだのですが、こちらにお分かりになる方いればお教えいただきたいです。 タブレットPCを使用しているのですが、画面のタップを記録できず困っています。マウスでのクリックではなくタップを自動化したいのですが、どのようにすればよいでしょうか? chkimgxで教えてください。 エラーが出て動作確認の為に以下のようなコードを書きました。 if chkimgx(image file) msgbox(“1”) else msgbox(“2”) endif if chkimgx(image file) msgbox(“3”) else msgbox(“4”) endif これを実行すると2回目のifでエラーになります。 なぜでしょうか? " syntax error " と " file not foud " と " null pointer exception " では対処が違う ご指摘ありがとうごさいます。 STARTUP_CHKIMGX() SHUTDOWN_CHKIMGX() 使用する時この中に記述しないといけないのを見落としていました。 なんとか本来行たい事も出来ました。 すみませんでした。 バグの原因の多くが、スペルミスか記述漏れである事は多い どうせスペルミスだろと思って見直す事はよくある あいまい検索プラグインのchkimgXをDLしたいのですがどこにあるでしょうか? ご指南お願いします。 piggy-bank.jp の DNS アドレスが見つかりませんでしたとなり、みつけられませんでした。 いろんなサイトに転載されてるから chkimgX DL でググればDL出来るサイトは普通に見つかる 最近uwscを使い始めてnoxにadbコマンドを送ってゲームの自動化をしていたのですが、キーボード入力が出来なくて困ってます。 調べたところadb shell input keyevent A でキーボードのAが入力されるみたいなのですが、実行してみたところ何も起きません。 //入力 CMD = "cd C:\Program Files (x86)\Nox\bin & nox_adb shell input keyevent A" print CMD //CMDの内容を確認 DOSCMD(CMD) //Noxに操作を送信 sleep(1) //操作送信後1秒待機 上記実際に試したスクリプトですがどこか間違っているのでしょうか? >>118 一度に複数のコマンドを実行する場合は<#CR>改行でつなぐ CMD = "cd C:\Program Files (x86)\Nox\bin<#CR>nox_adb shell input keyevent A" 自分も>>118 と同じく最近uwscとnox_adbを使い始めたのですが、 chkimgXで得られたG_IMGX_XとG_IMGX_Yをnox_adbに送るとタップ位置が(xy両方)ズレてしまいます。 ifb CHKIMGX("image1.bmp", winid, x1, y1, x2, y2, Detect_num, Threshold_delta, Target_color) THEN BTN(LEFT,CLICK,g_imgx_x, g_imgx_y,0)//←これは正しい位置をタップする DOSCMD(dir + "nox_adb shell input touchscreen tap " + (g_imgx_x) + " " + (g_imgx_y - windowflamesize))//←これはズレる ソースコードはQiitaの「UWSC × Nox でゲームマクロを作成する。」をほぼそのまま使ってます。 ズレが無くなるようにするにはどう書けば良いでしょうか? G_IMGX_XとG_IMGX_Yを+か-して調整すれば良い >>121 ズレる位置が常に一定なら±するだけですが、固定値では無いんです。 何らかの法則はありそうなのですが、その計算式の求め方というか根拠が分かりません。 nox_adbのタップ位置 = G_IMGX_Y * ??? + ??? Umiumi Windows SCript だっけ? Delphiで作られているらしいな c#等の.net系は実現出来るのだろうか .net系は実現できるのだろうかってどういう意味? 見た目は今風になるだろうけどDelphiよりは確実にもっさりしたのが出来上がる 今UWSCと同じような物を作る最適な言語はなんだ Delphiは優秀だけど古いよな pythonじゃね それかruby ゲームのマクロ目的だからExcelを自動化みたいな考えは無い rubyはGUIが弱くってそこを補うためにuwsc使ってるからuwscの代替となるかと言われると無理な気がする Python 1991年 Ruby 1993年 Delphi 1995年 どれも大差ないよ Python等のインタプリター言語で uwscのインタプリターを作ったら 遅くなり過ぎるだろ いや、当たり前のこと言ってるようにしか思えないんだが 作者がもうこの世にいない以上、今あるUWSCでどうにかするしかない >>135 fukidasiだけでもめっちゃ便利なんです マルチスレッドを使えば 吹き出し64個同時表示が可能なんだよな エスケープ文字のエスケープ方法を知りませんか? ダブルクォーテーション、改行、タブは エスケープ文字として<#DBL>、<#CR>、<#TAB>が割り当てられていますが、 例えば「"テスト<#DBL>です"」という文字列をファイルに出力すると エスケープされて「テスト"です」という内容のファイルが出来ます。 これをエスケープされないように「テスト<#DBL>です」と出力するには どうすればいいのでしょうか? >>143 //全部大文字 をやめる msgbox("a<#"+"dBL>b") //または option specialchar msgbox("a<#"+"DBL>b") >>145 これは自分では解決無理でした 本当にありがとうございました モヤモヤが動いていて画像が指定クリック出来ません💦 あいまい画像検索しても上手くいかないのですが方法はありますか? モザイクを無視して文字列だけを認識させるという事か? >>147 > モヤモヤが動いていて画像が指定クリック出来ません💦 > あいまい画像検索しても上手くいかないのですが方法はありますか? 集まれスレで返答貰ったので〆ます✨ オンラインゲームでマーケットにアイテムが出品された瞬間に購入するbotを作る場合 uwscとpythonどちらのほうが早く購入することができますか? >>154 そんなのBANせれて終わりだろ 出品されたか確認の為に頻繁に問い合わせしたら即バレるわ >>156 それはそうかもしれませんが、単純に速さはどちらが上ですか? 同じウィンドウ名とクラス名のブラウザアプリ(ChromeとEdge)で、同時に同じ箇所を1回だけ裏クリックしたいです。 色々なサイトを参考にして書いてみたのですが、全く動作しませんでした。 どう改善すれば良いかご教示ください。 FUNCTION GETID2(title, class, n) DIM cnt = 0 FOR i = 0 TO GETALLWIN() - 1 DIM ID = ALL_WIN_ID[i] DIM targetTitle = STATUS(ID, ST_TITLE) DIM targetClass = STATUS(ID, ST_CLASS) IFB POS(title, targetTitle) <> 0 AND POS(class, targetClass) <> 0 THEN cnt = cnt + 1 IFB cnt = n THEN RESULT = ID EXIT ENDIF ENDIF NEXT IF n = 0 THEN RESULT = cnt FEND FOR i = 1 TO ("ゲーム名", "Chrome_RenderWidgetHostHWND", 0) mouseorg(i, 2, MORG_BACK) BTN(LEFT, CLICK, 319, 474) NEXT For i = 1 to 100 BTN(LEFT,CLICK,x1,y1,0) sleep(5) BTN(LEFT,CLICK,x2,y2,0) sleep(5) BTN(LEFT,CLICK,x3,y3,0) sleep(5) BTN(LEFT,CLICK,x4,y4,0) sleep(5) next これを実行中に画像Aが表示されたらそれをクリックして再開するにはどうすればいいですか。 >>159 画像があればクリックするという関数をつくって それをBTN()とBTN()の間で呼ぶようにすればいい THREAD()を使ったりするとクリックの競合が 発生しないように制御しなければならなくなるので こちらのほうが素直 For i = 1 to 100 BTN(LEFT,CLICK,x1,y1,0) sleep(5) BTN(LEFT,CLICK,x2,y2,0) sleep(5) BTN(LEFT,CLICK,x3,y3,0) sleep(5) BTN(LEFT,CLICK,x4,y4,0) sleep(5) IFB CHKIMG("画像A.bmp");BTN(LEFT,CLICK,G_IMG_X+5,G_IMG_Y+5,0);ENDIF next >>160 BTN()が100以上など数が多い場合も間で呼ぶしかないのでしょうか。 >> 161 4回クリックした後に画像検索をするのではなく、1クリックごとに画像検索できるようにしたいです。 返信ありがとうございました。自分でも調べてみます。何かわかれば教えてください。 >>162 こんな感じでどう? For i = 1 to 100 HOGE1(x[i],y[i]) next PROCEDURE HOGE1(x, y) BTN(LEFT,CLICK,x,y,0) sleep(5) IFB CHKIMG("画像A.bmp");BTN(LEFT,CLICK,G_IMG_X+5,G_IMG_Y+5,0);ENDIF FEND >>163 ありがとうございます。 試してみます。 >>165 ChromeあるいはEdgeのどちらか単体で裏クリックはできてますか? それができればあとはさほど難しくないです >>165 ChromeとEdgeでBTN(LEFT, CLICK, 319, 474)ができれば良いのか? >>166 解説しているサイトから拾ってきた以下のコードで裏クリックできることは確認できました id = GetID("ゲーム名") id = GetCtlHnd(id,"Chrome_RenderWidgetHostHWND") MouseOrg(id,2) BTN(LEFT, CLICK, 319, 474) MouseOrg(0) >>167 はい、両方で同時に同じ箇所をクリックしたいです ただ、どちらもウィンドウ名とクラス名が全く同じなので、そこでどうすればいいのかわからなくなってしまいました //難しく考えすぎなんじゃ無いの? DIM クローム = GETID("Chrome"),エッジ = GETID("Edge") MOUSEORG(クローム,2,2) BTN(LEFT,CLICK,319,474) MOUSEORG(0) MOUSEORG(エッジ,2,2) BTN(LEFT,CLICK,319,474) MOUSEORG(0) >>169 ごめんなさい、説明不足でした そのブラウザゲームというのが、ブラウザから独立したアプリ?のような扱いになっているので、 タイトル名にChromeやEdgeといった文字が含まれておらず、ゲーム名だけなのです >>158 のソースはgetid2を呼んでるのかと呼んでるなら引数のn=0が仕事してなさそうな気がするけどその辺は正しいの? >>170 タイトル指定が面倒な時の裏技みたいなもんだから、ChromeやEdgeがタイトルに含まれてる必要はないよ >>170 GETIDはタイトルだけじゃなくてクラス名も指定できる これでChromeとEdgeの識別ができる クラス名はChromeとEdgeの片方を起動した状態で GETALLWIN() FOR win IN ALL_WIN_ID IF STATUS(win,ST_TITLE) = "ゲーム名" THEN PRINT STATUS(win,ST_CLASS) NEXT で取得できる 何をしてるかはヘルプのGETALLWINとSTATUSを読めばわかるとおもう >>172 試しにコピペで動作させてみたのですが、クリックは発生しませんでした… 文字コードはUTF8でも構わないのでしょうか? >>173 仰っていただいたコードで取得してみましたが、両方とも Chrome_WidgetWin_1 で、同じクラス名でした ブラウザから独立したアプリ以外は閉じるか最小化して、余計なモノを無視するようにすれば出来るかも テキトウなゲームアプリで試したら出来たし >>174 >>173 の調査で、Chrome_WidgetWin_1 が無事に2個あるなら どっちかがChromeのIDで、もう一方がEdgeのIDなので FOR GameWinID = 0 TO RESIZE(ALL_WIN_ID) - 1 IFB ゲームのIDかどうかSTATUS(GameWinID , ST_TITLE)で調べる ゲームのIDだったら>>168 念のためカウントしてPRINT ENDIF NEXT 3個以上なら、ここの判定を改良 IFB ゲームのIDかどうかSTATUS(GameWinID , ST_TITLE)で調べる STATUS(ID, ST_PATH) // EXEのパスを返す STATUS(ID, ST_PARENT) // 親ウィンドウのIDを返す、親が無ければ-1 などと組み合わせて >>176 書きわすれ。どこか最初の方で AllWinID = GETALLWIN() をやっておいて FOR GameWinID = 0 TO RESIZE(ALL_WIN_ID) - 1 も FOR GameWinID = 0 TO AllWinID - 1 のほうがわかりやすいかも 初心者スレだからこのゲームのここでこうしたいけど出来ないまで書いちゃえば? >>170 試しにこれを実行してみてほしい DIM sSearchTitle = INPUT("指定するブラウザのアクティブなタブ表示を入力") DIM idWnd = getid(sSearchTitle) DIM sBrowserName = WhatBrowser(idWnd) MSGBOX("ブラウザは"+sBrowserName) FUNCTION WhatBrowser(idWnd) RESULT = "不明" DIM sFullTitle = STATUS(idWnd, ST_TITLE) //MSGBOX(sFullTitle) INPUT("ウィンドウのフルタイトル", sFullTitle ) IFB POS( " - Google Chrome", sFullTitle) THEN RESULT = "Chrome" ELSEIF POS( " - Chromium", sFullTitle) THEN RESULT = "Chromium" // ELSEIF POS( " - Microsoft Edge", sFullTitle) THEN // Microsoftの後ろはゼロ幅スペース: U+200Bに続いて通常のスペース // UTF-8 保存でなら使用できる ELSEIF POS( " - Microsoft", sFullTitle) AND POS(" Edge", sFullTitle) THEN RESULT = "Edge" ELSEIF POS( " - Vivaldi", sFullTitle) THEN RESULT = "Vivaldi" ENDIF FEND これでの判定があっていれば >>169 のいうとおり 最初からChromeかEdgeか指定して取得できる 表示上ブラウザ名がついていなくても内部的にはたぶんついている GETID() はタイトルの一部のみで取得できそれが先頭部分である必要もない もしこれで判定できなければ https://plaza.rakuten.co.jp/dmaster/diary/200512210004/ のように実行EXE名を取得できるのでそれで判定する方法がある ただChromeでは問題なかったが Edgeの場合何かのセキュリティが効いているらしくEnumProcessModules() がエラーになった 皆さん色々とありがとうございます これ以上混乱させてはいけないと思うので、やりたい事を具体的に書かせていただきます 放置少女 for ブラウザ というブラウザ版のゲームで、姫プレイという60秒ごとにクリックするコンテンツがあるのですが 2つのアカウントを作業がてら操作するのが煩わしかったので、自動化させたいと思いました ブラウザゲームだとウィンドウが裏とかで隠れてるとゲームが止まるってのがありがちだけどそこは問題ないのかと思った ブラウザのプロファイルを使い分ければchrome2個とかedge2個別アカウントで動かせるからどっちかで動いたらブラウザは1種類にしたほうがいいと思った >>182 止まったりしますね 画面が少しでも見えてたら止まらないようなのでウィンドウをずらして表示してますが >>181 みたいなやり方を実現したいなら仮想環境(Vmwareなど)で、いってみれば画面まるごと別にして自動化させる ブラウザゲームを2つ同時にする程度ならi5-11400とかRyzenの3600あたりで十分だと思いますけどね 裏で動作させるために Chromeの場合 chrome://flags/#calculate-native-win-occlusion を Disabled にする Edgeの場合 edge://flags/#calculate-native-win-occlusion を Disabled にする 自分の場合はこの方法で対処できています あと、Chromeのプロファイルを2個使うという発想は頭からスッポリ抜け落ちていました その場合は同じクラス名のウィンドウを同時に操作するにはどう記述すれば良いのでしょうか? ゲームでマウス右クリック中は ADS できるゲームなんだけど 右クリックをしたら ADS 状態を保持して 右クリックを押したらADS状態を解除するように するにはどうしたらいいんでしょうか? >>187 右クリックを押してはなして ADS 状態ですね ・右クリックをしたら ・右クリックを押したら の違いがまったくわからん スイッチでいうところのオルタネイトにしたい話なんでしょ >>190 そうですオルタネートにしたいんです 右クリック一回押すと押したままの状態にして もう1回押すと押した状態を解除する >>191 autohotkeyならできますよがんばって下さいね 手が不自由な障害者向けのサンプルコードがあるので参考にできるでしょう while peekcolor(x,y)=緑 処理0 ... 処理99 wend みたいなwhile文だと、処理34をやってるときに赤になっても処理99まで一通りやってから終わらせてしまう (x,y)が緑じゃなくなった瞬間whileを抜けるにはどしたらええん? >>193 自分が書いてる通りに 処理xが終わるたびに緑じゃなかったらループを抜けるようにする それでも希望通りのタイミングじゃなかったら 1行ごとに緑じゃなくなったかどうか調べる THREADって各スレッド間の通信は グローバル変数を使うしかないのか uwscってコピー防止することってできますか? たとえばuwsc開いたらパスワード要求されてそれ入力しないと使えなくて なおかつ1か月たつとそのパスワードは使えなくなる方法とか 月額2000円でパスワード買わないと使用できなくなるような方法です よろしくお願いします! >>199 そんな機能はないが、パスワードを書いたテキストファイルをサーバーにUPして、 起動時にそれを読み込んで入力したパスワードと照合すれば出来るだろ サーバーに金掛けたく無ければ無料サーバー使っても良い 数日前からfirefoxでPosACC(id, x, y, ACC_BACK)でテキスト文字を 所得できなくなってしまって困っております。 何か良い方法はないでしょうか・・・ 機械語命令のNOPのような何もしない命令はありますか IF文とかでNOPが書ければ簡単に書けるという事が割とあるので、何とかしたいです そうもいかないのです 条件分岐の都合で何も書かない訳にもいかないので、面倒くさいです >>207 色々調べてみた? 結論から言うとそんな命令はありません あなたは面倒くさいとストレスMAXにして頑張ってください 条件分岐でNOPを入れると書きやすいとはどういう例が有るんだ? 無いなら作る PROCEDURE NOP() EXIT FEND ちょっと困ったので賢者の皆さん力をかしてくだしあ https://imepic.jp/20231015/526320 CHKIMGで2パターン処理が必要 一パターン目のCNKIMGからのクリックで見た目が変わるので 次に変わってないものをクリックした後で、一回目クリックしたものを もう一度クリックしたい。 //一回目 cnt=CHKIMG("audl.bmp",1,,,,,-1,IMG_MSK_BGR2) for i=1 to cnt BTN(LEFT,CLICK,ALL_IMG_X[cnt-i]+15,ALL_IMG_Y[cnt-i]+15,20) next //二回目 no=CHKIMG("audl2.bmp",,,,,,-1,IMG_MSK_BGR2) for i=1 to no BTN(LEFT,CLICK,ALL_IMG_X[no-i]+15,ALL_IMG_Y[no-i]+15,20) next //一回目クリックしたところを再度クリック for i=1 to cnt BTN(LEFT,CLICK,ALL_IMG_X[cnt-i]+15,ALL_IMG_Y[cnt-i]+15,20) next 最後のfor文ですがクリックするのは「2回目」のALL_IMG_X[no-i]+15になる 1回目の結果を変数にいれてしまえ!と思ったのですが入らない・・・エラー・・・ 2回目の判定画像と1回目の判定画像は部分的に重なるので、 2回目をやる前に1回目をもう一度クリックするのはダメ >>211 テキトウな変数にALL_IMG_X[cnt-i]+15,ALL_IMG_Y[cnt-i]+15の座標を入れれば良い IMGX=ALL_IMG_X[cnt-i]+15 IMGY=ALL_IMG_Y[cnt-i]+15 >>214 ですよね・・・・ そうすればいい!と思いついたのですが、エラーでやられちゃって //一回目クリックしたところを再度クリック BTN(LEFT,CLICK,IMGX,IMGY,20) 座標が同じならこれでよい //一回目 for i=1 to cnt cntx[i]=ALL_IMG_X[i-1]+15 cnty[i]=ALL_IMG_Y[i-1]+15 next これで「宣言のない配列です」 だったので適当な変数cntx,cntyを以下のようにしてみたらエラーは出なくなったものの dim cntx[i]=ALL_IMG_X[i-1]+15 dim cnty[i]=ALL_IMG_y[i-1]+15 (中略) //三回目 for i=1 to cnt BTN(LEFT,CLICK,cntx[0],cnty[0],20) next ここで1回目の座標の、なぜか最後の座標がクリックになる。 cntx[i]では「定義が間違っています」になり、 for i=1 to cnt print cnty[i] next で中身見てみたら真っ白で、取得したやつどこやった!!っていう状態に(汗 >>216 1回目と3回目の座標は同じですが 2回目が異なるのです。 なので1回目の変数を適当な変数に放り込んで、3回目で読めばいい。 はずなんですが・・・ならなくて。 CALL ChkImgX.uws // ChkImgX関数をインクルード startup_chkimgx() //一回目 cnt = CHKIMGX("ringo1.png",0,0,0,1920,1080,-1,5) for i=0 to cnt-1 IMGX=ALL_IMGX_X[i]+15 IMGY=ALL_IMGX_Y[i]+15 BTN(LEFT,CLICK,IMGX,IMGY,20) SLEEP(1) next //二回目 cnt = CHKIMGX("ringo2.png",0,0,0,1920,1080,-1,5) for i=0 to cnt-1 BTN(LEFT,CLICK,ALL_IMGX_X[i]+15,ALL_IMGX_Y[i]+15,20) SLEEP(1) next //一回目クリックしたところを再度クリック BTN(LEFT,CLICK,IMGX,IMGY,20) shutdown_chkimgx() //一回目クリックしたところを再度クリック これがですね・・・forで書いているように1回目でクリックするのは複数回で、 3回めのforでそれを全部クリックしたい、ということなのです。 伝え方下手くそかよ・・・ごめんなさい・・・ その問題点がこの部分。 >ここで1回目の座標の、なぜか最後の座標がクリックになる。 cntx[i]でfor回るごとに追加にならないの・・・?(´;ω;`)ブワッ 追加関数までありがとうございます。某辞書で見ていたけどスルーしてました。 グレースケールでもいけるのは面白いですね IMGX、IMGYを配列にして座標を入れれば良い 透過PNGを使って認識させるちょっとした裏技を使ってる dim IMGX[100],IMGY[100] //一回目 cnt1 = CHKIMGX("ringo1.png",0,0,0,1920,1080,-1,5) for i=0 to cnt1-1 IMGX[i]=ALL_IMGX_X[i]+15 IMGY[i]=ALL_IMGX_Y[i]+15 BTN(LEFT,CLICK,IMGX[i],IMGY[i],20) SLEEP(1) next //二回目 cnt2 = CHKIMGX("ringo2.png",0,0,0,1920,1080,-1,5) for i=0 to cnt2-1 BTN(LEFT,CLICK,ALL_IMGX_X[i]+15,ALL_IMGX_Y[i]+15,20) SLEEP(1) next //一回目クリックしたところを再度クリック for i=0 to cnt1-1 BTN(LEFT,CLICK,IMGX[i],IMGY[i],20) SLEEP(1) next >>222 できたーーーー!! 神様ありがとうございます。 >dim IMGX[100],IMGY[100] これだっ! これ知らなかったです・・・。 コードもちゃんと動きました。これで今日寝られます。 他お力添えいただいた皆様もありがとうございました! スクールでpythonを学習する機会があって調べたらモジュール化してUWSCに似た感じに出来る方法がわかったので 練習と学習がてらにpythonへ移植してるけどモジュール化してるとはいえかなり冗長な内容になってる UWSCがいかに優れてるかよくわかるなぁ もちろん使いこなせたらpythonの方が上だろうけどまだ初心者にとってはUWSCの方が使い勝手いいと思わせられる スマホゲームの自動操作はAndroidエミュをUWSCで操作するのが王道なの?それとも直接何かのプログラムでデータサーバーにアクセスして操作したりするものなの? 王道は知らない データサーバーと直接通信できるゲームは多分ない 中継サーバーと直接通信するのは即BAN対象 uwscで操作も大抵はBAN対象 エミュを操作するUWSCを検出するのは困難だろうが エミュレータ自体が締め出されるんじゃないの >>229 クリック場所や時間にランダム入れるのは 一番初めにやることだよね それって周回作業する場合は1時間とかで切り上げるってこと? 24時間回すとかどう考えても手動じゃないし >>231 無料で24時間何かしら回すものがあるような糞仕様しか作れない会社は 取り締まり能力も低いから 課金者をぶっちぎってランキング1位とか目立たない限り大丈夫 無課金で目立ったら証拠とか関係なしにBANされる 向こうも商売だからな スタミナとか消費するものを課金で無限に購入して回すのはやったことないから知らん 同じスマホゲームのアカウントを6個作って NOX6個同時起動させてUWSCで延々と周回させて遊んでいた 運営に怪しまれないように同アカウントで連続操作を避けて回し続けた 面白過ぎて夢中になった nox playerでスマホゲームやってます。 標準でマクロ機能もあるんですが UWSCはそれより条件を細かく設定できるイメージかな? pc上でnoxの表示箇所や幅を変更しても そのまま対応してくれるのでしょうか? Citraはしらんけど、CLKITEMで仮想キーコード送っても無反応で、SCKEYなら送れた事がある Windows11にしたらChkImgXが使えなくなってしまった Windows11で画像を撮り直してみましたが、マッチしません どのような原因が考えられますか? OSには依存しないので、ChkImgXのエラーが出てないなら書き方が悪いとしか 画像もOSによって認識が変わることも無い そもそもどう書いて、どういうエラーが出てるかも分からないのにエスパー解答しろというのもな〜 >>241 おま環で自分の環境が悪いだけなのかもしれない 問題の切り分けのために試していただけるとありがたいです ・sample.uws(付属のサンプルを少し修正したもの) --------------------------------------- CALL ChkImgX.uws startup_chkimgx() // 画像サイズを取得 dim w, h imagesize("sample.png", w, h) print "画像 幅:" + w + "px,高さ:" + h + "px" // 5chトップページを開く doscmd("start https://5ch.net/" ;) sleep(3) id = getid(GET_ACTIVE_WIN) // トップ画像をマッチングで探してクリック if chkimgx("sample.png", id) print "見つけた スコア:" + G_IMGX_SCORE acw(id) mmv(G_IMGX_X, G_IMGX_Y) btn(LEFT, CLICK, G_IMGX_X, G_IMGX_Y) else print "ない?" endif shutdown_chkimgx() sleep(60) 規定のブラウザはChromeです ・sample.png https://i.imgur.com/9UWr90v.png (5chのトップ画面のスクリーンショットから、https://5ch.net/images/5ch_mascot_normal.png の一部を切り取り) ■Windows7 ・結果 トップ画面の画像(https://5ch.net/images/5ch_mascot_normal.png の縮小表示画像)をクリックして、https://5ch.net/ を開く ・print --------------------------------------- 画像 幅:56px,高さ:47px 見つけた スコア:0.1 --------------------------------------- ■Windows11 ・結果 画像がマッチせず ・print --------------------------------------- 画像 幅:56px,高さ:47px ない? --------------------------------------- //とりあえず、ChkImgX.uwsの簡易テスト //画像を保存してその画像を認識できればOKと表示する CALL ChkImgX.uws startup_chkimgx() SAVEIMG("test.bmp",0,100,100,100,100,TRUE) IFB ChkImgX("test.bmp");msgbox("OK");ENDIF shutdown_chkimgx() 難しく考えないで、簡単に書けば良いんだよ とりあえず、これでクリック出来た CALL ChkImgX.uws startup_chkimgx() doscmd("start https://5ch.net/" ;) sleep(3) id = getid(GET_ACTIVE_WIN) ACW(id,0,0,1400,1000) sleep(2) IFB ChkImgX("sample.png");BTN(LEFT,CLICK,G_IMGX_X+5, G_IMGX_Y+5);ENDIF shutdown_chkimgx() MOUSEORGでバックグラウンドで操作させる場合はwindows11でも問題なく使えますか windows10では使えないとか認識しないとかの情報が多く出てくるし・・・ windows10で使えないならwindows11では使えない? 使えてないね だから自分はVmwareで仮想環境を作ってそっちで動かしてる 結果的にバッググラウンドと同じになる まあマシンパワーがそれなりに必要 windows11で普通にMOUSEORG使えてる Vmwareで仮想環境も出来なくないけど、windows11で使えなかったから互換性の問題だと思って、 C:\Program Files (x86)\UWSCフォルダ内のUWSC.exeを互換性モードでWindows7に設定したら使えた MOUSEORGとCHKIMGXの連携の仕方がググってもあまり出てこない 出てこないという事はあまりやってる人がいないのか? 少し実験してみるか read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる