UWSC初心者用スレ
■ このスレッドは過去ログ倉庫に格納されています
UWSC初心者用スレです わかってる人はこっち 自動化ツールUWSC使いよ集まれ21 http://egg.5ch.net/test/read.cgi/software/1533818531/ 降臨される神々においては相手を人と思わず猿と思し召されるよう 何卒お願い申し上げます >>265 noxのパスを確認 ドライブ跨ぐならそのコードでは通らない >>266 ドライブは跨いでいないと思います。デフォルトのCドライブにインストールしてあり、 パスも確認しました。 試しに、 DOSCMD("cd C:\Program Files (x86)\Nox\bin & nox_adb shell input touchscreen tap 718 183") コレだけUWSに書いて実行しましたが、やはりタップされません。 コマンドプロンプトからだとタップされます。何でだろう。 コマンドプロンプトで cd C:\Program Files (x86) はスペースが入っているからだめ cd "C:\Program Files (x86)" uwscでの"の書き方は<#DBL>なので注意 >>267 その結果(doscmdの返り値)のメッセージを確認しよう ちなみにドライブ跨ぎの指摘はnoxとuwscが同じドライブかという話し GETKEYSTATEの入力キャッチするタイミングがよく分からないです。 SLEEP(30) IFB GETKEYSTATE(VK_A) MSGBOX("Aが押されました") ENDIF て感じでSLEEP中にAキーを押下するとSLEEP後の判定でTRUEになる。 気持ち的にはIFBのタイミングで押下していないとFALSEになると思うんだけど。 そういう仕様なのか自分の環境によるのかどっちなんだろう。 >>269 PRINT DOSCMD(省略) の出力内容で良いでしょうか? 'nox_adb' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 で、uwsc自体はDドライブに置いてありまして、これをCドライブへ移したら正常に動作しました。 ドライブ跨ぎってこういう意味だったんですね。 コマンドプロンプトは元々Cドライブなので動作していたと。 >>268 今回はコピペでしたが、自分で書く時は気をつけます。 助言頂いた方ありがとうございました。 >>270 まあ仕様と言えば仕様 keystateという変数があり、キーボードを押下するとsetされるとイメージすればどうかな getされるまでは他のキーが押されると書き換わり getされるとクリアされる というかそうでないとまさにコード実行のミリ秒タイミングでキーボード押さないと反応出来なくなっちゃうわけで イベントハンドラーではないキー受け付けはこんな仕様になる chkimgについてですが検索画像は大きいより小さい方が処理速いんでしょうか? どういう検索方法なのかご存知の方居たらざっくりでいいので教えて貰えると嬉しいです >>272 なるほど、変数に格納するイメージなら分かりやすいです。 そういう仕様としてやってみます。 ありがとう! >>273 イメージとしては解像度分の1ピクセルずつズラしながら単にビットマップ変数同士を比較してるだけ なのでまず比較用の画像が小さくても大きくても最大試行回数は変わらない 例えば対象が解像度1920*1080のデスクトップ全体であればヒットしない場合の最大は約200万回ということ (はみ出るところを省略してるかは知らない) 比較処理そのものはサイズで大いに影響があると言える 例えば100*100ピクセルの24ビットカラーであれば、3万byte、約30kbが完全一致するか比較が行われる もちろん一回は1ミリ秒にすらならないがなんせ200万回もやれば馬鹿にならない 従って小さいほど速くなる 言うまでもなく検索画像より検索対象をデスクトップ全体ではなくウインドウ内に限定した方が遥かに速くなる (可能なら範囲指定した方がさらに速い) 必ず見つかる状態なら試行回数以下で終わるからいいけど、出現待ちする場合なんかは毎回最大回数空回りさせるので遅くなる >>275 理解出来ました ありがとうございました Chkimgにおいて24bmpで画像認識させたのですが認識してくれませんでした 4重の別々に撮ったクリックしたい箇所の画像認識、chkingx関数による曖昧認識、色幅を持たせるなどしても認識してくれません また、一回は認識したものの同じクエストに入ったのに2回目は認識しないということもあります これ以外の方法または自分の見落としなどはありますか? >>277 saveimgで保存して手を加えずchkimgしてもだめ? >>278 ある画像がランダム出現した時に画面全体から探して一致する、その画像をクリックしたいのでペイントに貼って >>278 ある画像がランダム出現した時に画面全体から探して一致する、その画像をクリックしたいのでペイントに貼ってトリミングしています Saveimgでもトリミング出来ますか? >>280 x,y,幅,高さを指定してsaveimgすればいい >>281 この方法でも2回目以降が出来ませんでした、chkimgxとの併用は指定範囲が有効ではありません、スタックトレースの取得に失敗って感じでエラー出ます…こちらも良ければ教えてください Chkimgxは色幅を持たせていたが故のエラーでした スクリプトが悪い可能性は一切ないの? そうでなければ画像の一部にエフェクトが掛っているか透過色があって完全一致しないとか しまった メイン側でプログラム作ってからVPCに持っていったら解像度違うせいか画像認識しないわ… vmwだとWQHD無いのねめんどーくさー ifb chkimg or chkimg or chkimg or のように横に長くor文を続けると見栄えが悪く、修正なども面倒なため、縦に綺麗に並べたいのですが改行するとエラー(or型があっていない)が出ます ifb (~ ~); のようにカッコで括っても無理でした 綺麗にする方法はありますか? >>289 SELECT - SELEND使えばどうだろう <行結合> _ (アンダーバー) // 行の最後に付ける事により次の行と結合させます >>290 ありがとうございます!今回は行結合を使うことにしました、しかしselect文も場合分けする時に使えそうですし、自分の知らない関数だったので視野が広がりました >>291 検索しても到底見つかることは無かったであろう答えをありがとうございます!おかげで綺麗なコードが書けます! >>289 一つのif/ifbに全部orで条件結合すると途中で見つかっても全部チェックするから条件増えるほどパフォーマンス悪くなるし あり得るか知らないけど複数見つかった場合に座標の変数が書き換えられてしまうのでバグの温床にもなるから止めた方がいい 共通した処理を関数化するなりして以下のようにすればさほど可読性は悪くないと思う ifb chkimg(A.bmp) 処理() elseif chkimg(B.bmp) 処理() elseif chkimg(C.bmp) 処理() endif あとSELECTはある特定の変数(関数の戻り値)の評価の列挙だから別の条件のchkimgには使えない >>294 option shortcircuit を使えばいいだけでは? >>295 短絡評価あるの知らんかった…ほんとよく出来てるなあ ならまあ、後は好みでいいかな 自分は別々の処理させたりフラグ建てたりする事が多いから>>294 みたいにしてるけど ifとifbって何が違うの? >>294 みたいにelseifと混ぜて大丈夫? HASHTBL型の変数を簡単にコピーする方法はありませんか? HASHTBL a = HASH_CASECARE a["asd"] = 100 HASHTBL b = HASH_CASECARE b = a とするとシンタックスエラーになってしまいます。 FOR文で回す方法しかありませんか? //------------------------------------------------------ // HASHTBL のコピー // dst: コピー先 // src: コピー元 // bCarryKey: 複製/変更 // CarryKey=FALSE(デフォルト)なら通常の複製となる // bCarryKey=TRUEのとき // dstにしか含まれていないキーとそれに関わる値を残す //------------------------------------------------------ FUNCTION HASHTBL_COPY(var dst[],src[],bCarryKey=FALSE) DIM size = LENGTH(src) IFB FALSE=bCarryKey THEN dst = HASH_REMOVEALL ENDIF DIM i FOR i=0 TO size-1 dst[src[i,HASH_KEY]]=src[i,HASH_VAL] NEXT RESULT = LENGTH(dst) FEND 👀 Rock54: Caution(BBR-MD5:1341adc37120578f18dba9451e6c8c3b) LOGPRINT( TRUE, 0, 0) HASHTBL hst_a HASHTBL hst_b hst_a["a"]=1 hst_a["c"]=3 hst_b["z"]=26 MSG("hst_aコピー前サイズ="+LENGTH(hst_a)) MSG("hst_bコピー前サイズ="+LENGTH(hst_b)) HASHTBL_COPY(hst_b,hst_a,TRUE) MSG("hst_bコピー(変更)後サイズ="+LENGTH(hst_b)) MSG("hst_b[<#DBL>a<#DBL>]="+hst_b["a"]) MSG("hst_b[<#DBL>c<#DBL>]="+hst_b["c"]) MSG("hst_b[<#DBL>z<#DBL>]="+hst_b["z"]) HASHTBL_COPY(hst_b,hst_a) MSG("hst_bコピー(複製)後サイズ="+LENGTH(hst_b)) MSG("hst_b[<#DBL>a<#DBL>]="+hst_b["a"]) MSG("hst_b[<#DBL>c<#DBL>]="+hst_b["c"]) MSG("hst_b[<#DBL>z<#DBL>]="+hst_b["z"]) MSG("30秒後に終了") SLEEP(30) FUNCTION MSG(str) RESULT=0 PRINT str // MSGBOX(str) FEND >>300 回答ありがとうございます! やはりFOR文で回す方法になるのですね。 HASHTBLを引数にする時は [] がいることを初めて知りました。 使用方法も合わせて分かりやすい回答ありがとうございました!! noxで画面をスクロールするマクロを作りたいと思い、スワイプで動かそうと思い作って見ましたがダメでした。 DOSCMD("cd C:\Nox\bin & nox_adb shell input touchscreen swipe"+353 + 1107 + 353 + 250 ) アドバイスください。 追加で質問なんですがスワイプとドラックの違いがよくわかりません スワイプは一回タッチして軽く放して動かす。ドラックはタッチしたまま動かす であっているのでしょうか? >>303 ダメと言うのはどうなる? …てかもしそのレスの通りのコマンドだとswipeの後にスペースないし、 その後の座標も全部スペースなしで連結されるからシンタックスエラーな気がするが >>303 スワイプとドラッグは大差ない 強いて言うならドラッグはタッチして対象を掴んでから自由に動かす スワイプは最初に貯めなく、一定方向に動かす androidをscrcpyというソフトを使ってでPCで自動化しています BTN(LEFT,CLICK,,,)でクリックがされないことが度々あるのですが、待機時間を入れたり BTN(LEFT,DOWN)BTN(LEFT,UP)のように記述したりしているのですが、失敗することがあります 操作の関係上、必要以上に待機時間を長くすることはできません。 失敗した時に画面を確認するとマウスカーソルはクリックする場所にキチンと移動しているようです 確実にクリックさせる方法はないでしょうか? >>304 実行するとエラーは出ないのですが、何も起きません。 どう書けば動くのかわからないので、アドバイスください。 >>307 エラーが出ないってのはエラー見てないだけでしょ doscmdはあくまでコマンドプロンプト叩くだけだからコマンド内容が成功しても失敗してもエラーにはならない その代わりコマンドプロンプトで叩いた時の出力が返り値になっているのでそれをprintなりすることで結果を確認できる print doscmd(~) しかしそんなことするまでもなく、まずdoscmdに突っ込もうとしてる文字列を見直しなって それこそprintしたらわかりやすい print (>>303 のdoscmdの()の中身) 後は>>304 に書いた通りなので以下略 >>308 Printで確認しながら書いたら動きました。 色々情報ありがとうございました DOSCMD("cd C:\Nox\bin & nox_adb shell input touchscreen swipe "+ 353 + " " + 1107 + " " + 353 + " " + 250 ) これで動きました。 HASHTBLの値に配列を設定する方法はありませんか? 以下のようにすると「式がおかしい or 型があっていない」とエラーになってしまいます。 HASHTBL aaaa = HASH_CASECARE aaaa["abs"] = 1,2,3 配列変数は DIM 宣言する必要があるみたいなので DIM a = 1,2,3 HASHTBL aaaa = HASH_CASECARE aaaa["abs"] = a と代入した所「1」しか値が代入されていません。 以下の様に値をとれると助かります。 FOR i = 0 TO (LENGTH(aaaa) - 1) key = aaaa[i, HASH_KEY] value = aaaa[i, HASH_VAL] FOR j = 0 TO (LENGTH(value) - j) PRINT key + ": " + value[j] NEXT NEXT >>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の座標をどうやって調べればいいか教えてくださいお願いします ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる