UWSC初心者用スレ
■ このスレッドは過去ログ倉庫に格納されています
UWSC初心者用スレです わかってる人はこっち 自動化ツールUWSC使いよ集まれ21 http://egg.5ch.net/test/read.cgi/software/1533818531/ 降臨される神々においては相手を人と思わず猿と思し召されるよう 何卒お願い申し上げます >>310 配列宣言を間違えました。 DIM a = 1,2,3 ではなく、DIM a[] = 1,2,3 になります。 この状態で aaaa["abs"] = a すると「次元数が合いません」のエラーになります。 ttps://junjun777.hatenablog.com/entry/20121022/uwsc_hashtbl_parameter ググろう >>313 なるほど >>310 を aaaa["abs"] = SLICE(a) とすればあとはそのままいけるね ケアレスミスの FOR j = 0 TO (LENGTH(value) - j) を FOR j = 0 TO (LENGTH(value) - 1) にする必要はあるけど べつに配列の内容をJOIN()で保存して SPLIT()で取り出して再配列化するとかいう必要はないのか >>310 5ちゃんに書き込んだ行頭のスペースやタブは削除されるので 全角スペースにすれば字下げできる uwscは字下げを全角スペースのままにしても実行可能 CMD = "cd D:\ChangZhi\LDPlayer & adb -s 127.0.0.1:5555 shell input tap 200 200" DOSCMD(CMD) エミュレーターの画面がタップされる。 次にDOSCMDで画像認識から得られた座標を変数に置き換えて attack_x=g_imgx_x attack_y=g_imgx_y CMD = "cd D:\ChangZhi\LDPlayer & adb -s 127.0.0.1:5555 shell input tap " + (attack_x) + " " + (attack_y) print CMD DOSCMD(CMD) こちらの場合だとタップされない。 printを見る限り座標自体は送られているようなのですが動作しません どう弄ればいいのか正直分かりません。分かる方いたら教えて欲しいです すいません自己解決しました ウィンドウ側の座標とエミュレーター側の座標を勘違いしてました 久々に使おうとしたところ 記録(R)ボタンで操作を記録しようとしたら 最初のウインドウ移動コード以降全く記録できませんがもう使えないのでしょうか 作者死亡の噂があるし… 記録できない、(記録されていないので)有効データはありませんってことは良くあるってネットで話題沸騰中 低レベル記録にすればなんとかなるかも そうなんですね 高レベル記録にすると空っぽになってしまう UWSC+Noxの環境で画像認識のマクロ使っているのですが Noxを起動しマクロを動かしながら、別のゲームをフルスクリーンで遊ぶと動かなくなってしまいます。 確認した所ボーダレスもダメで動くのはウィンドウモードでは動きました。 殆ど ttps://qiita.com/macro_no_deshi/items/dd3b3405123bad0cfe4a ここのサイトを見て作りました なにかいい手段はないでしょうか? 別ゲーをフルスクリーンにすることでディスプレイの解像度変わって動作不良みたいな事なってそう 呼び出されたマクロの中にEXITEXITがあると呼び出しもとのマクロまで終了するの何とかなりませんか? EXITEXITを使わなければいい そのスクリプトの構造が悪い 起動時パラメータでEXIT/EXITEXIT実行を切り分け >>326 なるほど、そういう方法がありましたね。 ただEXITEXITの挙動にどうも納得がいかないですね。 レスには感謝いたします。 >>327 CALLしたスクリプトは呼び出し元にとりこんで実行されてるだけだからね EXITEXITで呼び出し元が終了するのは通常通りの挙動 どうしてもEXITEXITで呼び出し元終了させたくないなら EXECとかDOSCMDから同期フラグ立てて呼び出すとかしないと無理 どこに納得がいかないのか興味があるな…そもそもなんでEXITEXIT使ってるのか てか呼び出し元も終了させたいときはどうするつもりなのか >>330 マクロの中でサブルーチンがあり、そこでサブルーチンのみを終了するときはEXIT, マクロ自体を終了するときはEXITEXITを使っています。 単独でこのマクロを動かすときは正常に動きます。しかし、他のマクロから呼び出し ループさせようとしても1回動いて呼出し元のマクロごと終了してしまうのですよ。 >>331 うーん? サブルーチン側にEXITEXITある時点で作りが悪いよと言ったら怒られるかな ぶっちゃけEXITEXITなんてGOTO並みの超限定的な場面でしか使うべきじゃない命令だし サブルーチンは関数にして返り値出してメインで EXITすればいいだけだよね 例えばだけどboolean型にして 今EXITのところと最後はRETURN TRUE EXITEXITのところはRETURN FALSE 呼び出し側はこんな感じで IF !関数名() EXITEXIT 逆でもいいかな、まあお好みで 連投すまん 呼び出し側はEXITすれば良いって話なのにEXITEXITにしてしまったEXITに読み替えてね >>332 作りの悪いマクロですみません。 レスには感謝です。 NOXであるゲームにあるミニゲームの釣りマクロを作ったのですが、 画像発見からクリックまでにラグがあるみたいでクリックしたときには、釣り上げるタイミングを逃しています。 CMD0 = "cd C:\Nox\bin & nox_adb shell input touchscreen tap " + (350) + " " + (1030) ///////ヒットしたら釣り上げる ifb CHKIMGX("釣りヒット.bmp", winid, 115, 430, 230, 555, Detect_num, Threshold_delta, Target_color) print "ヒット" //画像を発見したらログに表示 DOSCMD(CMD0) //Noxに操作を送信 Sleep(0.1) こんな感じで作ってあるのですが、なにかいいアドバイスはありませんか? 何処で遅延発生してるのかわからないけど ChkImgXで遅延発生してるならマッチングの範囲絞るとかマッチング画像トリムして小さくするとか ChkImgXエアプだから出来るかはしらない >>338 です 調べたら、adbでの操作は遅延が出るみたいでそれが原因でした btn(left,click,400,140,10) にしたら大丈夫でした NOXで画像認識でマクロ使っているのですが、 NOX解像度の設定が720x1280でモニタ解像度が1920x1280のためNOXの実際のウィンドウサイズは581x1060なっているため 画像認識をしても座標がずれてしまいます。今は画像認識したら予め決めた座標をクリックするようにしています NOXの解像度を540x960にすると問題なく動きます NOXの解像度を変更しないで、座標のズレを直す方法はないでしょうか? >>342 正確なサイズが分かってるなら比率を掛けるだけでは?(タイトルバー分忘れないように) モニタの縦に収まるサイズで問題ないならそれでいいじゃんとも思うが ゲームの座標はクリックしてそこのドットの座標とカラーなりなんなりを記憶・登録するようにすると便利だよ どのゲームやアプリでも使いまわしが利くしね 今のところメジャーな3Dゲーム4作品程度にしか使ってないけど、自動戦闘はすべてpeekcolorで済んでる このスレで人気?のchkimgはいかにも遅そうなので出番がない Botかよ。 そんな使われ方じゃ作者が可哀想だな。 >>345 可哀想も何も、後から画像関係の関数がわざわざ増強されたのは作者も認知してるってこった 私はその前から同様の機能を拡張して使っていたので新関数を使ってないがね 仮想マシンでUWSCを使う際に uwsファイルや画像認識用の画像がネットワークドライブにある場合 フルパス指定しても、「Not found 中断しますか?」と聞かれ 画像認識ができません。パスにはスペースは入っていませんが、日本語は入っています。 コマンドプロンプトでネットワークドライブをZに割り当てるなど いろいろ試してみましたが、解決には至りませんでした。 ファイルが大量かつ、仮想マシンが何台もあるので、コピーなどはできません。 どなたか解決策を教えていただけないでしょうか。よろしくお願いいたします。 >>349 です。 書き忘れていました。仮想1台1台別のuwsを使用しています。 使う画像はすべて同じなので、画像をまとめているファイルは別にあり パスを指定しなければなりません。uwsと画像が同じフォルダにある場合でも 同じような現象が起きます。 試してみて ネットワークをドライブ名にマップした場合でも そのパス名に日本語が入っていても(表のように0x5Cが含まれている文字も含め) 問題は起こらななかった CHKIMG()に渡すパス名が "\\machine\folder\表現\a.bmp" のようなネットワークパスだとしても有効だった なにか勘違いしているだけで 単純にパス名が間違っているのではないか 例の記事でnoxマクロが誰でも組めるようになったせいでレベルの低下が著しいな ファイルパス・ユーザー名など、システム関係に、ASCII 以外を使ったらダメ! 半角英数字(英小文字のみ)と、アンダーバーだけを使うと安全 外人の作ったアプリは、sjis を想定していないから! ネットワークドライブでも問題ないし、Googleドライブでも問題ない ただ意識せずに毎秒画像見に行ってたせいで転送量がすごい はじめまして、このミジンコ誰か教えてください。 noxにてadbを使ってバックグラウンドにて動作するマクロを作成しようと思っております。 単純なタップやスワイプ等のコマンド送信は出来たのですが、画像認識(chkimg)のような仕組みは可能なのでしょうか? また可能ならどのようなソースの書き方をすればいいのか教えて頂けませんでしょうか? よろしくお願いします このスレもしくは前スレに同じような質問や実践的内容が書いてあるよ すいません!pro版でRECIEを使おうとしたらL18が存在しません とでるのは、割れだからでしょうか?それとシリアルは必ず17桁でしょうか? >>358 そのあと正式な登録がされてません とでるんですが 割れだからって言われて、それに対して正式な登録が〜って聞く意味が分からん 正式な登録してから出直してこい noxのadbって別窓でフルスクリーンにすると数字がガッツリ変わるんですけど、noxの座標をどうやって調べればいいか教えてくださいお願いします 話が見えないなあ 数字ってのは座標? 別窓ってのはまさかサブディスプレイ? adbというかAndroid内で座標なんかズレやしないんだから外側からの与え方、取得の仕方に問題があるだろう ウインドウ指定で取らずデスクトップ基準で取ってるのでは? 何言ってるのかわからんレベルならスクリプト貼ってくれた方が話しがはやい >>367 ありがとう、まさしくその通りでデスクトップ基準で取ってたからフルスクリーン後にタップが行ってなかったみたいです。 現在とりあえず動かすことが出来ました。ありがとうございました UWSC総合スレという名でディスコードのコミュニティを作ってみました。 これから仕事なのでまだ何も記載してませんが、よかったらどうぞ https://t.co/R0e07jjoOZ 👀 Rock54: Caution(BBR-MD5:b73a9cd27f0065c395082e3925dacf01) LDplayerでゲームを起動し、バックグラウンドで画像認識した場所をクリックという動作をしたいのですがうまくいきません。 ゲームが前面に来ている時は、画像認識して座標は取ってるがクリックせず ブラウザなどで隠れ裏面に来ている時は画像認識を失敗しています。 IDが取れてないか最初のMOUSEORG指定がおかしいのかとおもうのですが、見てもらえないでしょうか w_id = getid( GET_ACTIVE_WIN ) mouseorg( w_id ,2 ,MORG_BACK ) と w_id = getid( "ウィンドウ名" ) //w_id にアクティブウィンドウを格納 Hnd = GETCTLHND( w_id, "RenderWindow") MOUSEORG(Hnd, MORG_DIRECT, MORG_FORE) どちらを使っても上記と同じ症状です OSはWindows10 画像認識にはchkimgxを使っています。 似たような処理を作ったことある方、解決策ご教授頂けないでしょうか。 LDplayerは使ったことがないからわからないけど バックグラウンド操作が効かないソフトもある 似たような過去スレに似たような質問たくさんあるから一読してみて NOX用のマクロを作ろうと思ってるのですが、画像認識でつまづいています。 >>244 のサイトを参考にテスト用のuwsファイル https://dotup.org/uploda/dotup.org1911694.png を走らせた結果が https://dotup.org/uploda/dotup.org1911695.png です。 bmpファイルはsaveimgで取得したもので、PCの解像度は1920×1080、NOXの解像度は540×960、ウィンドウサイズの復元もしてあります。 この場合画像認識が上手くいかない原因としてどのような事が考えられますか? >>374 ちなみに IFB CHKIMG("テスト用.bmp") MSGBOX("画像認識に成功しました。<#CR>G_IMG_X = " + G_IMG_X + "<#CR>G_IMG_Y = " + G_IMG_Y) で画面全体を検索するとNOX上の画像がきちんと認識されます。 あのさあ コード画像で貼るとか、試すのに全部手打ちさせる気? 判定画像もどんなのか分からんし なので全く試してないが単に縦横間違ってるとかそんなレベルじゃなかろうね >>376 申し訳ないです。 長くなってしまうので画像でと思ったのですが、言われてみれば仰るとおりでした。 改行数の関係で少し変わりますが下のコードです。 winid = getid("NoxPlayer") //ゲームウィンドウを名前で検索して取得 winPosX = STATUS(winid,ST_X) winPosY = STATUS(winid,ST_Y) winsizeX = STATUS(winid,ST_WIDTH) winsizeY = STATUS(winid,ST_HEIGHT) print "位置X 位置Y 幅 高さ" print winPosX + " " + winPosY + " " + winsizeX + " " + winsizeY CALL ChkImgX.uws x1 = 0 y1 = 0 x2 = 540 y2 = 994 Detect_num = 1 Threshold_delta =20 Target_color = -1 startup_chkimgx() //CHKIMGX関数開始 While True //Wendまでの処理を繰り返す ifb CHKIMGX("テスト用.bmp", winid, x1, y1, x2, y2, Detect_num, Threshold_delta, Target_color) print "テスト用を発見しました。" //画像を発見したらログに表示 else //上記の条件全てに当てはまらなかった場合 print "画像が見つかりません" //メッセージを出す。 endif //ifbの処理の終了地点 sleep(3) //()内の秒数待機 Wend うーん? コードは違和感ないけど 試しにwinidじゃなくて0を与えるとどうなる? ※chkimgと同じく全画面という指定 後はsaveimgじゃなくてprintscreenで画像作ってみるとか >>379 winid = 0って書き方で大丈夫ですかね? プリントスクリーンで作ってwinid = 0で試してみると認識されたので画像位置をクリックするように書きえ変えてみたのですが実際にはクリックされませんでした。 >>379 winid = 0 CALL ChkImgX.uws x1 = 0 y1 = 0 x2 = 0 y2 = 0 Detect_num = 1 Threshold_delta =20 Target_color = -1 startup_chkimgx() //CHKIMGX関数開始 While True //Wendまでの処理を繰り返す ifb CHKIMGX("テスト用.bmp", winid, x1, y1, x2, y2, Detect_num, Threshold_delta, Target_color) print "テスト用を発見しました。" //画像を発見したらログに表示 deffence_x=g_imgx_x deffence_y=g_imgx_y //画像認識で取得した値を代入してDOSCMDで送る内容を作成 CMD = "cd C:\Program Files (x86)\Nox\bin & nox_adb shell input touchscreen tap " + (deffence_x) + " " + (deffence_y) print CMD //CMDの内容を確認 DOSCMD(CMD) //Noxに操作を送信 else //上記の条件全てに当てはまらなかった場合 print "画像が見つかりません" //メッセージを出す。 endif //ifbの処理の終了地点 sleep(3) //()内の秒数待機 Wend これを走らせると テスト用を発見しました。 cd C:\Program Files (x86)\Nox\bin & nox_adb shell input touchscreen tap 1358 556 と出るのですが実際にはクリックされてない状況です。 windid = 0 のときはデスクトップの座標 winid が getid()で得た値で それが1以上なら そのウィンドウの座標 この場合はwinidに0を渡して返ってきた座標からは ウィンドウのx,y位置とさらに実際の表示領域までの 枠幅を引いてやらないといけない getid()でとっていた値が対象ウィンドウの ものでなかった場合を除いてだが winidに0を指定しただけで認識できるというのは 不思議なので検索領域が広くなったことで単に 違った箇所が誤認識されているのかも 別にwinid=0じゃなくて直接0で良かったんだけど、まあいいや で0と画像の作り方両方同時にするんじゃなくて片方ずつではどう? 問題を切り分けたい ちなみに仮に今の方法でadbにしたいならその座標からウインドウの座標を引いて後タイトルバー分も引けば出来ることはできる >>383 winid=0の時はNoxを移動しても移動先にあるアイコンの座標を出してくれるので誤認識って事は無さそうです どうもgetid()で対象ウィンドウの値が取れていない気がするのですが >>378 の画像のようにNoxの左上にNoxPlayerとあればgetid("NoxPlayer")っていう認識で間違ってないですか? エミュレーターの追加をしていないのでこのNoxPlayerしかないのですが… >>382 が既に指摘してるけどgetidの戻り値はいくつなのよ >>386 >>374 ウインドウは取れてる chkimgx時に何か変なようだけど何かなあ ウインドウがアクティブじゃなくてもいいはずなんだけどね >>384 0にする前のコードでsaveimg、WinShot、プリントスクリーンで試しても変わらずでした 逆に0にした後はどの方法で作った画像でも認識はされます 皆さん色々とご意見ありがとうございます こういうプログラム的な事をするのが初めてなので煩わせてしまって申し訳ない >>385 >Noxの左上にNoxPlayerとあればgetid("NoxPlayer")っていう認識で間違ってないですか? たいていそうだが、必ずそうだとはいえない ヘルプのGETIDを見ると タイトル: 識別したいウィンドウのタイトル (タイトルの一部分だけでもOK) なので とれるIDは "NoxPlayer_1.txt"や"NoxPlayerについて"などのうち最初にみつけたもの また " "などが含まれているのに気づかない場合もある また >>378 の画像を見ると Windowsの標準的な形式のウィンドウスタイルではなく タイトルバー部分に関して独自の描画をしているようなので 内部的なウィンドウタイトルがNoxPlayerで始まっていない可能性もある GETID()でとった値の STATUS(id,ST_X),STATUS(id,ST_Y)などはすでに見ていて それらしい値になっているのだと思うが いちおう STATUS(id,ST_CLASS)がそれらしい名前になっているか 見たほうがいいかも さらに GETALLWIN( ) でとったリストの中に"NoxPlayer"で始まるウィンドウタイトルがほかにないことを 確かめれば完璧 >>389 fukidasi("ゲームウィンドウ上でSキー") //Sキー入力待ちの告知 While !(GETKEYSTATE(VK_S)) //Sキー入力まで無限ループ sleep(0.1) Wend fukidasi() //入力待ち告知の吹き出しを消す winid = getid(GET_ACTIVE_WIN) //Sを押したウィンドウでIDが取得されるので確実に取得できる cls = STATUS(winid, ST_class) title = STATUS(winid, ST_title) print "ウィンドウ名は" + title print "ウィンドウIDは" + winid print "ウィンドウクラス名は" + cls の結果が ウィンドウ名はNoxPlayer ウィンドウIDは1 ウィンドウクラス名はQt5QWindowIcon n = GETALLWIN() PRINT "ウィンドウの数:" + n IFB n > 0 FOR i = 0 TO (n - 1) PRINT ALL_WIN_ID[i] + ":" + STATUS(ALL_WIN_ID[i], ST_TITLE) NEXT ELSE PRINT "ウィンドウが見つかりませんでした" ENDIF で全ウィンドウを取得してみた所NoxPlayerは一つだけでした にもかかわらず0以外では認識されずどうしたものかと… さて仕方ないということで>>377 のままで実行してみると普通に成功するね (テスト用を発見しました。が3秒毎に出る) となると基本的なところを見直そう 環境としてはWindows10? 念のためUWSCのバージョンは5.3.0.2? あと念のためNoxの設定でレンダリングモードを変えたりしてみた? 自動化ツールUWSC使いよ集まれ21 756- によれば一部の環境でOpenGLではうまく動作しないなどあるらしいよ (Windowsなのかグラボ依存なのかはっきりとはしない) >>390 >ウィンドウクラス名はQt5QWindowIcon このクラス名を見る限り実態は別にあるんじゃなかろうか >>392 あ失礼 Qt5QWindowIconのクラス名はこのスレにも過去に出てきていた それであっているようですね >>391 すみません、理由は分からないのですが動くようになりました というのも訳あってWin7にダウングレードしていたのですが、Win10に戻した所画像が認識されるようになりました ご協力いただいた皆様本当にありがとうございました 画像認識のループマクロで画像が認識されず一定回数ループした場合に別の処理をさせたいのですがどのような手法をとればいいのでしょうか? 画像が認識できないのとループ回数で処理分けたいのは別の話だし手法というほどもない 自分がやるのならwhileによるループ内に画像認識とカウンタで分岐するifなりselectなりで作るが 後のことはそのうまくいかないスクリプト見ないと何が悪いのかは分からん >一定回数ループ 本当にやりたい処理はそうじゃないだろう noxにchkimgx走らせたらたまにx:-1332736054 y:399917186 とかとんでもない座標が帰ってくるのですが原因わかりません助けてください 分からないものは分からないで済ませる方法を考えよう たまに変になるだけならxyが指定範囲外ならもう一度走らせればいい 確かにそうですね・・・異常値の検知やってみますありがとうございました DOSCMDを管理者として実行する方法ありますか?Windows7です UWSC.exeの設定を変更したあとUWSCを再起動してなかったわ ありがとう とあるフリーゲームのセーブデータのバックアップを取りたいのですが、1時間毎にファイルサイズを比較して、変化があればバックアップを取るということをしたいです。 (現在はファイルサイズの変化に関わらずバックアップを取るようにしているため、容量がどんどん増えています) ですが、ファイルサイズの取得方法がググってもイマイチわかりませんでした。 何方か教えていただけませんか? BETWEENSTR(doscmd(“for %z in (ファイル名) do echo %~zz”), “<#CR>”, “<#CR>”, -1); 試してないので予めごめん。 >>405 親切にありがとうございます。ダブルクォーテーションを半角に直して、コマンドプロンプトを直接叩くと数字が出てくるのですが、UWSCで PRINT BETWEENSTR(doscmd("for %z in (ファイル名) do echo %~zz"), "<#CR>", "<#CR>", -1); とすると、『ECHO は <ON> です。』と出てきて、数字になりません。どうしたらいいでしょうか。 すみません、以前から同じ問題に悩まされていて、未だに原因が分かりません。 UWSCでandroidを自動化しており、scrcpyというソフトでPCから操作しています。 クリックがうまくされないことが多く、待機時間など入れても全く解決しないのですが、 クリックの前に 「print "クリックします"」という記述を入れると問題なくクリックされるようになります。 このような記述を無意味に入れたくはないのですが、原因は何なのでしょうか? 追加です。 全く同じスクリプトでその症状がWindows10のみに出ます。 Windows7ではprintの記述がなくても問題なくクリックされます。 何かPC側の設定でそのような問題が起きる項目があるのでしょうか? ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる