1 名前:名無しさん@お腹いっぱい。 [2015/11/11(水) 13:45:28.80 ID:+oPzgSay0.net] Windowsの作業を自動化するツール フリーソフト版とシェアウェア版の2種類がある ttp://www.uwsc.info/download.html ●UWSC 掲示板(※作成依頼掲示版ではありません) 質問の際には自力で作ったスクリプトを晒すか、具体的な解らない場所を提示すること 上級者が常駐、たまに作者も現れるため過去ログには有益情報の宝庫 www3.rocketbbs.com/13/bbs.cgi?id=umiumi www3.bigcosmic.com/board/s/board.cgi?id=umiumi&mode=past ●UWSC - Wikipedia ja.wikipedia.org/wiki/UWSC ●使い方・基礎解説学習サイト uwsc.g.hatena.ne.jp/cx20/20100131/1264938584 www.confrage.com/uwsc/ necro.jp/dev/uwsc/ park14.wakwak.com/~simizu/uwsc/fruwsc.html canal22.org/ big.tm.land.to/handbook/uwsc.htm www.game-rev.com/review/gameut/uwsc.html ●スクリプトテンプレサイト izagne.com/uwsc/ scripts.web.fc2.com/ www.nagomi-jp.net/~liners/ nem.symphonic-net.com/uwsct/0610uwsct.html siromasa.digi2.jp/uwsc/ iriyak.adam.ne.jp/uwsc.html 前スレ 自動化ツールUWSC使いよ集まれ15 anago.2ch.net/test/read.cgi/software/1436671958/
851 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/07(月) 20:20:19.36 ID:tjYcm4Q90.net] 参照引数ってのは値じゃなくてメモリの番地とかそういうものを入れてるんじゃなかったっけ? だから参照引数に値は代入できない
852 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/07(月) 21:49:34.48 ID:Yt8oL/UZ0.net] そもそも一度も代入も宣言もしていない変数は使えないよ dim hoge abc(hoge , 111) print hoge sleep(10) procedure abc(var hoge , hoge0 = hoge) hoge = hoge0 + 100 fend これなら動くけど最初のdim文外すと怒られるから意味が無い
853 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/07(月) 22:27:49.67 ID:9LHTjHFn0.net] 一つの関数で複数の変数を変更するのだけど、その関数より前には使わない 結果受け取り専用の引数で a=0;b=0;c=0;…10個くらい //まあこれが無意味な文に思えてならない abc(a,b,c,…) procedure abc(var a, var b, var c,…) … fend
854 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/07(月) 22:43:28.84 ID:YgJHqyxo0.net] >>797 を見ると受け取り専用とは見えなかったけど 単にその目的なんだったら>>805 の人が書いてるように Dim a,b,c... abc(a,b,c...) でいいんじゃないの?
855 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/08(火) 0
] [ここ壊れてます]
856 名前:9:25:26.60 ID:X39hgh8s0.net mailto: 1つの引数に参照渡しが多すぎるのは関数分割が出来てなくて 無駄に粒度が大きすぎる疑いがあるが、UWSCの言語仕様上仕方ない面もある。 それより使用する変数については、module変数とそのコンストラクタを利用して 初期化すれば何の問題もなくスマートに書けるはず。 ただし最初からそう書いていればスマートで苦労もないが、 後から直そうとすると抜本的な書き直しとなり苦労する俺。 [] [ここ壊れてます]
857 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/08(火) 11:36:49.32 ID:mdQ0PQ+40.net] >>808 正にそんな感じ… 参照引数が多いのは外部からのデータ取得を一気にやるせいで その関数の内部は整理されてるんだけど。 最初は小規模なスクリプトで変数の管理とか適当で、後から書き加えていったから 今はこんなはずじゃなかったorzって状態になってて後悔してる。
858 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/08(火) 14:04:27.07 ID:EYyC3Yny0.net] 質問です。 MOUSEORGを使用したバックグラウンド操作で、 マウスオーバーする方法ってありますかね? マウスオーバーして出てくる画像の認識をしたいんだけどできぬ
859 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/08(火) 15:29:09.82 ID:X39hgh8s0.net] それはバックグラウンドのウィンドウにマウスオーバーイベントを 発生させろと言っているに等しいんだが… これ自動化ツールよ? まずあなたが手動で隠れたウィンドウにマウスオーバーしてみなさいよ! とんちかな?
860 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/08(火) 15:47:28.50 ID:YrarT/t10.net] 一休さんのトラの屏風の事だな 次の方どうぞ
861 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/08(火) 15:52:30.08 ID:uEQeFD2u0.net] mmvのこといってるんじゃない?
862 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/08(火) 15:58:04.94 ID:/957NIFT0.net] 煽りたいだけで答えられないならちょっと黙ってろよ 俺は黙る
863 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/08(火) 16:05:17.57 ID:CELrwcnT0.net] >>811 どういう理屈だよ 元々UWSCで出来るバックグラウンド操作は手動で出来ないでしょ
864 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/08(火) 16:25:16.15 ID:XRfaJMaM0.net] バックグラウンド操作でもマウスオーバーイベントが発生するかどうかという その対象ソフト側の問題なんだから、UWSCの質問じゃないぞ。
865 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/08(火) 16:54:18.27 ID:oQSRIGCR0.net] なんかレベル下がったなここ
866 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/08(火) 17:08:25.81 ID:X39hgh8s0.net] >>815 バックグラウンド操作は元々のUWSCのコンセプトPC操作の自動化を あくまで拡張したものであって、 出来なくて当然のことが出来るようになった機能だよ。 それをあたかも出来て当然のように認識されても困るわな。 まぁこんなソフトが無料で使えるだけでも奇跡的なんだが。 マウスオーバーイベントをマウスオーバーせず強制的に 外から発生させることが可能なAPIが公開されてるならば、 もはやマウスオーバー画像を直接ぶっこ抜くことも出来るんじゃね? 自動操作というよりアプリハッキングだわな。 まぁこれであっさり出来ますよとかコードが出てきて 俺が逆立ちするハメになるかもしれんがw
867 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/08(火) 17:29:48.80 ID:d7jVEpko0.net] Win32ApiのSendMessage(PostMessage)等を使ってイベントを発生させる方法はあるにはあるよ それをアプリハックと呼ぶかは置いておいて 重要なのは作業中のマウスは普通に存在し続けているって事なので バックグラウンドだと資源衝突が発生するのでやっぱり安定しないのよ 平たく言うとスクリプトがここにマウスがあるよとした直後に 本当のマウス位置に更新されるのでここにはマウスは無いよとなる だからよく分からなければ別PC用意して最前面でやる 仮想環境が分かるならそっちの最前面でやれ(内部的なマウス位置が存在するので資源衝突しない)がFAQとな
868 名前:チてるのよ [] [ここ壊れてます]
869 名前:名無しさん@お腹いっぱい。 [2016/03/08(火) 17:39:00.04 ID:OiSIw5XY0.net] VBScript で一般的なキー入力のエミュのやり方 https://msdn.microsoft.com/ja-jp/library/cc364423.aspx "2"のキーをクリック > WshShell.SendKeys "2" ドライバ→Windows→アプリってのを 自動化ソフト→アプリって短縮しただけでしょ。 アプリに直接送る方が簡単だけど(それで動くとは言ってない) UWSCが選ばれる理由は画像認識と操作の記録再生が簡単ってところだよ。 別に自動操縦が特別ってことはない。(特許を取ってるところはある)
870 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/08(火) 17:41:37.94 ID:EYyC3Yny0.net] >>811-817 無知でごめんな >>818-819 詳しく教えてくれてありがとう やっぱり仮想環境構築か物理的にもう一台PC用意するのが手っ取り早いってことですね 仮想環境構築してやってみます
871 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/08(火) 17:43:25.86 ID:bSkm1Om50.net] 1日調べてわからなかったので質問させてください。 ----------------------------------------------------------------- THREAD スレッド(1) THREAD スレッド(2) sleep(200.0) PROCEDURE スレッド(i) ID[i] = GETID(GET_FROMPOINT_WIN) 中略 MOUSEORG (ID[i]) CALL 関数.uws REPEAT sleep(0.1) UNTIL CheckColorScope(124,374,
872 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/08(火) 17:44:19.61 ID:bSkm1Om50.net] UNTIL CheckColorScope(124,374,"R",35,10) BTN(LEFT,CLICK,80,108,100) FEND この状態でスレッド2側がスレッド2側の相対座標のCheckColorScopeを行ってくれず スレッド1側の相対座標をCheckColorScopeしてしまいます。 ボタンクリックやPeekColor単体、関数の中身をバラしてREPEAT〜UNTIL間に 組み込むとスレッド2側の相対座標のCheckColorScopeを行います。 関数を組み込んだ状態でスレッド2側の相対座標をCheckColorScopeさせるには どうしたらいいでしょうか。
873 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/08(火) 18:06:11.90 ID:mdQ0PQ+40.net] ユーザー作成関数を組み込み関数であるかのように書かれても…
874 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/08(火) 18:10:36.84 ID:mdQ0PQ+40.net] あとそれスレッド1とスレッド2とほぼ同時に走るから実質同じものかと
875 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/08(火) 18:16:33.76 ID:X39hgh8s0.net] たしかUWSCのスレッドは、スレッド無いから呼び出したユーザー定義関数を、 そのスレッド内で実行しなかったような気が? 引数だけで算数して結果を返すだけのようなリエントラントな関数ならいいけど、 Windows上のリソースにアクセスするようなのは期待した動きをしなかった気がする。 試しに、自作関数を一時的にスレッドで呼び出すプロシージャ内に展開してやってみて。
876 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/08(火) 18:32:29.53 ID:bSkm1Om50.net] >>824 申し訳ないです。自作関数の中身です。処理は一緒ですが、相対座標だけをずらして 並列で処理させてようとしてうまくいかず、、、 Function CheckColorScope(PosX, PosY, Element, BaseValue, Scope) Select Element Case "R" ElementValue = PeekColor(PosX, PosY,COL_R) Case "G" ElementValue = PeekColor(PosX, PosY,COL_G) Case "B" ElementValue = PeekColor(PosX, PosY,COL_B) Default Result = False; exit; SelEnd Ifb (ElementValue >= BaseValue - Scope) And (ElementValue <= BaseValue + Scope) Then Result = True; Else Result = False; EndIf Fend
877 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/08(火) 18:41:58.65 ID:bSkm1Om50.net] 連投ですいません。 >>826 Windows上のリソースにアクセスするようなものではないですね。 ブラウザを2個起動した状態で同じ動作を並列処理させようとしてるのですが >>827 の関数を使うと相対座標が片方に寄ってしまうんですよね。。。 展開すると関数が入れ子しているか、閉じていませんでエラーになります。。
878 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/08(火) 18:46:18.69 ID:4EtCLtde0.net] ID[i] = GETID(GET_FROMPOINT_WIN) これってカーソルの下のウィンドウよね? スレッドでほぼ同時に取得してるのにこれでIDきちんと2つ取れてるん?
879 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/08(火) 18:49:12.06 ID:4EtCLtde0.net] どっちか片方のIDしか取れてなくて2つのスレッドが同じウィンドウにMOUSEORGしているような気がする ID二つとも確認してみたら
880 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/08(火) 18:59:56.84 ID:bSkm1Om50.net] >>829 スレッド2側の処理ですが、以下のように処理されますので、 可能性としては低いと思われますが、念のため確認してきます。 UNTIL CheckColorScope(124,374,"R",35,10) ←×こっちがスレッド1側の相対座標に BTN(LEFT,CLICK,80,108,100) ←◯こっちはスレッド2側の相対座標
881 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/08(火) 19:03:16.67 ID:X39hgh8s0.net] 今テストプログラムで確認してみたら、 PCが高負荷でなければスレッドがリソース云々は無かった。 それよか、各スレッドのpeekcolorが対象にするウィンドウIDが mouseorgで指定されないから、 たまたまアクティブなウィンドウが対象になる。 ウィンドウID管理しなきゃ。
882 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/08(火) 19:05:47.87 ID:X39hgh8s0.net] 具体的には、スレッドにする関数の引数にウィンドウIDを追加して自作関数呼び出す直前にmouseorg または自作関数の引数にも追加してpeekcolorの直前にmouseorg
883 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/08(火) 19:22:19.67 ID:bSkm1Om50.net] >>830 PRINTにID表示させてみました。1と2でしっかり別れてました。 >>832 助言感謝です。さっそくやってみます。
884 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/08(火) 19:24:40.32 ID:X39hgh8s0.net] mouseorg使ってたねスマンね、きっと想定通りにウィンドウIDが取れてないんだろうね。 現在対象にしてるウィンドウIDをball0onで表示するようにしてみるといいよ (スレッドごとに表示されるのでID*100ぐらいの座標指定して重ならないよう別位置に表示)
885 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/08(火) 19:27:50.46 ID:X39hgh8s0.net] 被った、IDがいいなら後は判らんな 判定直前に対象ウィンドウをCTRLWIN(ID, ACTIVATE)してみるとか、 判定対象の位置付近にballoonを表示してみて見てるとこ合ってるかどうか確認 ぐらいかな
886 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/08(火) 19:32:50.77 ID:bSkm1Om50.net] >>836 了解です。バルーンで追うのはまだやってなかったので バルーンでしばらく追いつつ試してみます!
887 名前:名無しさん@お腹いっぱい。 [2016/03/08(火) 19:57:44.27 ID:OiSIw5XY0.net] >>822 CALL をスレッド関数内でやってんの? これはスレッドで動かないんじゃない? あと、スレッドを使うならグローバル変数使うんじゃなく データを渡してしまった方がいい。 なんで添え字を渡してグローバル変数の配列にアクセスさせるのかわからない。 そういうのはC言語でやってください。 C言語でも配列の添え字を渡してグローバル変数にアクセスとかしないと思うけど。 普通はアドレスを渡しますね。 別にグローバル変数にアクセスしてもいいんだけど それは変化するデータをリアルタイムにアクセスする必要があるときや スレッド関数から値を戻すときくらいですね。 一度取得したIDは変化しないからコピーを渡してしまって構わない。
888 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/08(火) 20:13:05.28 ID:X39hgh8s0.net] それは多分ね、UWSCのスレッドとして呼び出した関数は、 戻り値を得ることが出来ないから、スレッドで取得した値を メインから得る方法はグローバル変数しか無く、 スレッドがGETIDしたウィンドウIDをメインから見たいんじゃないかな。 CALLをスレッド内に入れるのはちょっと変態的なのは同意
889 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/08(火) 20:44:35.98 ID:bSkm1Om50.net] 返事遅れて申し訳ないです! 別の方法(スレッド化せず処理)でさっくり想定通りの結果が得られました! 無駄に難しい処理しようとしてたんだなと・・・ ハマって色々学べたのでよかったです。 >>838 今後のために参考にさせて頂きますOTZ >>839 他皆様、ご助言たくさんいただき有難う御座いました!
890 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/09(水) 17:41:50.93 ID:mQOmooo80.net] getidで2窓で開いているIE上の同じページを区別させたいんですが、 クラス名で区別させるんだと思いますがそのクラス名が分かりません 今現在は getid("ウインドウタイトル","IEFrame") でやっています どなたかお願いします
891 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/09(水) 18:17:29.81 ID:llmIWy
] [ここ壊れてます]
892 名前:Ss0.net mailto: やれているならそれで良いんじゃないの クラス名が知りたいなら 自分で調査スクリプトを描け(個人的には最初に造るもんだと思う) SPY++使えVisualStudioCommunityは無料でコレも付いてる 過去レスにSPY++互換ツールもあってそれを使っている人も居る でもURLとかでクラス名は変わったりしないから一緒だよ [] [ここ壊れてます]
893 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/09(水) 18:25:43.67 ID:sRxQkC9R0.net] >>841 教えてヤフーにあったよ オイラもそれでフラッシュゲームのバックグラウンド化に成功した (´・ω・`)
894 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/09(水) 18:47:20.16 ID:mQOmooo80.net] >>842 ごめんなさい 今現在↓こう書いてるのですが、このIEFrameというのがクラス名ですよね? getid("ウインドウタイトル","IEFrame") 二つ目のIEではこれはなんと書けばいいんでしょう? >>843 お手数ですが、そのURL教えてもらえませんか?
895 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/09(水) 19:04:38.44 ID:sRxQkC9R0.net] おいおい それぐらい自分で探しなよ オイラはそれを保存してるからもうそのページに用はないんだよね (´・ω・`) オイラもフラッシュゲームのバックグラウンド化について 検索しながら試行錯誤しながら廻りまわってたどり着いたんだよね オイラたちはヒントをだす あとは自分で調べる、試す これは基本だよ
896 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/09(水) 19:26:22.70 ID:llmIWySs0.net] 一般論として クラス名は単なるウインドウの種類の宣言でしかない 従ってほぼ全てのアプリで2つ目のウインドウだからといって違うクラス名になったりはしない それぞれのウインドウはIDで区別される UWSCの機能だけでやろうとしたらGETALLWINを使ったりする 個人的にはIEのタブを探して操作するなら SHDocVw.ShellWindows から目当ての SHDocVw.InternetExplorer を見つけてCOM操作するけれどね どっちにしてもいきなり二つ目のウインドウってアクセスは出来ない IEのウインドウをループで回して対象URLのウインドウをピックアップして集めてから その何個目ってしないと駄目
897 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/09(水) 19:28:29.35 ID:llmIWySs0.net] で、面倒臭いなと思ったら半自動スクリプトにしたら良いんだよ スクリプトの最初に操作対象をクリックして下さいとか表示するとかね 完全自動化はそのための知識が揃ってからチャンジしたら良い
898 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/09(水) 19:59:37.81 ID:ZH6SCA5x0.net] UWSC公式サイトのFAQに載ってる毎度の質問だな
899 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/10(木) 00:09:29.62 ID:kbf2APsQ0.net] canal22.org/kansu/getctlhnd/
900 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/11(金) 02:09:47.22 ID:vpN6R87y0.net] AutoHotKeyとの違いってなに? こっちに出来て向こうにできない、またはその逆とか
901 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/11(金) 02:24:04.07 ID:q9CfIyKs0.net] 日本語変数は無理なんじゃないかな
902 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/11(金) 02:34:58.77 ID:ZLCOlBAo0.net] 自作関数をEXITで抜けるみたいに、CALLで呼んだものを途中で抜けるってできるの?
903 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/11(金) 03:46:02.49 ID:fLUkQ1x50.net] EXITじゃないの?
904 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/11(金) 03:53:20.39 ID:8BXL68Gt0.net] CALLが何かを全く理解してない奴って多いよね
905 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/11(金) 13:22:41.14 ID:TzmisRaw0.net] 「呼んだもの」のなかで途中で抜けるように作れば抜けるし、最後までやるように作れば最後までやるだけだが。
906 名前:名無しさん@お腹いっぱい。 [2016/03/11(金) 15:51:14.74 ID:9MIhB+Zw0.net] Firefox系ブラウザ って FLASHブラウザゲームに MOUSEORGのMORG_DIRECTって使えないの? BTNが反応しませんでした Chromeは使えましたが、 Chromの方は、MORG_BACKがCHKIMGで認識しませんでした
907 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/11(金) 17:05:56.39 ID:xL247s8c0.net] 煽りじゃなくて頑張った結果が使えないのなら使えないのでしょう ブラウザはIE以外はマルチプラットフォームのため標準コントロールを使用していないし 裏になったら再描画しないパターンもあるしね 裏動作は出来る時もある位の気持ちで 仮想化環境を使って最前面か別PCが安定ってのがFAQだよ
908 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/11(金) 17:41:53.19 ID:uLXjBvrS0.net] hoge=
909 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/11(金) 17:52:21.69 ID:uLXjBvrS0.net] すいません、NGワードで弾かれたっぽいです hoge="あいうえおあいうえお" 上記変数の、左から5番目の「お」だけを 「ん」に変えたいんですけど、そんな命令ありますか? 置換命令のREPLACEだと、番号指定は無理ですよね? hoge=COPY(hoge,1,4)+"ん"+COPY(hoge,6) 遠回りな気がしますが、こんな感じにするしかないんでしょうか?
910 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/11(金) 17:57:29.45 ID:8eZkzZWt0.net] 仮想化はOS用意しないといけないからなあ linuxとか無料らしいからそれ使えればいいけどな
911 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/11(金) 18:21:03.26 ID:xL247s8c0.net] >>859 それしかないって事はないけれど特に近道も無いよってのが答えだと思う VBSの文字列操作用や正規表現用のオブジェクトを生成して処理したり出来るが 特に行数が減るわけではない(寧ろ増える) 昔と違ってメモリを節約する努力なんて不要なんだから 行数や命令を減らす努力はそれ程重要じゃない 最適化しすぎて同じ結果になるけれどやりたい事との文脈が違う場合とか 後から見ると混乱のもとになるからね メインの処理のやりたい事が「文字列のn文字を入れ替える」なら そういうユーザ関数を作成して抽象化したら良いのよ
912 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/11(金) 18:28:44.96 ID:HWMGVE3/0.net] 遠回りどころか、処理的には replace よりむしろ近道なのでは
913 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/11(金) 19:10:33.56 ID:9aIMxtHY0.net] >>856 ただのバックグラウンドならできる (画面が隠れてたり最小化だとできない) クラス名を取得してハンドルする 教えてヤフーにやり方のヒントがある (´・ω・`)
914 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/11(金) 19:19:08.73 ID:LoB9QIb70.net] バックグラウンドと画面が隠れていることの違いって何
915 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/11(金) 20:39:57.96 ID:9MIhB+Zw0.net] >>863 クラス名なら、Firefoxは、MizillaWindowsClass Chromeは、Chrome_RenderWidgetHostHWND これは取得できて、ハンドルも取得できていて それは、わかってるんです。 ただのバッググラウンド状態でももちろん試しました Yahoo知恵袋なども結構参照した方です ですが、IEとChromeは、MORG_DIRECTが使えて Firefoxだけは、MORG_DIRECTが使えませんでした。 BTNが反応してくれない。それってあり得るんですかね?
916 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/11(金) 23:22:31.33 ID:V+G/WUuc0.net] While True ifb CHKIMG("A.bmp") BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y) else ifb CHKIMG("B.bmp") BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y) else ifb CHKIMG("C.bmp") BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y) else sleep(0.3) BTN(LEFT,CLICK,1000,500) endif endif endif sleep(0.1) WEND こんな感じのマクロを組んだのですが最後の sleep(0.1) BTN(LEFT,CLICK,1000,500) が1秒くらい間隔開けて連打するので困っています 0.3秒くらいの間隔で連打させたいのですが何を弄ればいいのでしょうか?
917 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/11(金) 23:37:24.40 ID:q9CfIyKs0.net] 0.3秒+500ミリ秒+0.1秒=0.9秒 当たり前の話でんがな
918 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/11(金) 23:40:11.60 ID:q9CfIyKs0.net] 間違えたハズカシ つかchkimgは範囲が広いとそれだけ時間かかるからPCのスペック次第で時間が変わる
919 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/11(金) 23:55:24.06 ID:V+G/WUuc0.net] >>868 なるほど、処理が追いついていないと そこそこのスペック持たせてるはずなのに画像認識の処理ってけっこうパワーいるのに驚きです
920 名前:名無しさん@お腹いっぱい。 [2016/03/12(土) 00:22:19.71 ID:vIYJtZWi0.net] × BTN(LEFT,CLICK,1000,500) ○ BTN(LEFT,CLICK)
921 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/12(土) 00:58:30.41 ID:JA7kK
] [ここ壊れてます]
922 名前:oOW0.net mailto: >>870 その場合どうやって座標の指定をするので? [] [ここ壊れてます]
923 名前:名無しさん@お腹いっぱい。 [2016/03/12(土) 05:37:53.21 ID:vIYJtZWi0.net] あ、つい。数字をミリ秒と読んでしまって。 画像を小さくして範囲を絞れば速くなります。 範囲を絞るために GETID() で対象ウィンドウを特定して STATUS() で座標を取って CHKIMG() で範囲を指定します。 MOUSEORGで基準座標を対象ウィンドウにすれば 範囲は 0, 0 からサイズ x, y で指定できるので楽です。 他の方法としては 数ドットの色だけで判定できる場合は 検索範囲の画像を SAVEIMG() でクリップボードにコピーして クリップボードから PEEKCOLOR() で検索すると早いです。 でも、数ドットで済むようなら1秒もかかってませんね。
924 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/12(土) 08:55:36.12 ID:1ZX49PQ60.net] >>866 なんか凄い見にくいけどこういうことだよね? While True ifb CHKIMG("A.bmp") BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y) elseif CHKIMG("B.bmp") BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y) elseif CHKIMG("C.bmp") BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y) else sleep(0.3) BTN(LEFT,CLICK,1000,500) endif sleep(0.1) WEND sleep(0.3)の部分は3回試した後だし、sleep要らないのでは
925 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/12(土) 12:51:15.36 ID:ah+GWDsu0.net] ヒント@ ループ開始時に開始時間を記録 その他のボタンクリック前の時間と開始時間を引いて経過時間を記録 経過時間が300ミリ秒以内ならその時間だけスリープ ヒントA DEF_DLL timeGetTime(): LONG: winmm.dll //ミリ秒単位の時間を取得 (わざわざwin32api使うのはUWSCは経過時間の取得は小数点(割合)になるので直感的じゃないから)
926 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/12(土) 12:54:01.60 ID:fkR2rJoF0.net] まあ今回の場合、処理が0.6秒位かかっているようだから スリープ0にしたところでダメだし時間測るのは無意味と思うけどね。 どちらかというと範囲制限の方が有効だろう
927 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/12(土) 13:11:01.48 ID:ah+GWDsu0.net] それ前提のつもりでした言葉足らずだったね 0.3秒感覚でクリックしたいならそうなるようなロジックが必要ですよと
928 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/12(土) 20:47:24.15 ID:XzxPU9E/0.net] タイミングはシビアになるかもだけど、Thread()で0.3秒ごとにクリック メインではChkimg()してヒットしたらフラグを立てて Threadのほうのクリックを抑止してメイン側でクリック とか?
929 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/13(日) 01:10:40.53 ID:yStCxW+O0.net] まず最初にみんなありがとう せっかく教えてくれるのにごめん ミジンコにとっては半分近くが呪文だったのです >>872 もうちょい画像絞ってみます 知らない関数もあるのでそれも調べてみます >>873 sleepよりも何よりもelseifの存在を忘れてた自分が馬鹿でした 適当なサイトのコピーから改竄してたのですがこれでC+齧ってたのかと思うと恥ずかしいです >>874 誤差分だけスリープなんてできたんですね >>875 さんの件も含めて考えて、それで処理時間含めての最短を設定できるように調整してみます >>877 並列は考えたのですが他の作業中に「そこ」をクリックされると困るので破棄しました それを破棄した理由が連打させたい時に画面には決まった画像というのがないという事なのです 拾い物の改竄だけだと何も身につかないと再確認して自分を恥じます 勉強しなおして出直しますのでその時また困ったらお力をお貸しください
930 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/13(日) 05:59:29.63 ID:Oa7DQQ9u0.net] chkimg3つをそれぞれ別スレッドで動かして 発見フラグが一つもない時だけ1000,500をクリックでいいのでは これなら今どきのマルチコアCPUなら3倍速で動くはず?
931 名前:名無しさん@お腹いっぱい。 [2016/03/13(日) 10:3
] [ここ壊れてます]
932 名前:4:38.97 ID:5BxruRGM0.net mailto: いまどきの Core i5 でも安いのは物理2コアなので3倍速になんてなりません。 タスクマネージャで4コアに見えても、2つは論理CPUかもしれません。 仮に4コアあったとしても、3コアをUWSCが独占したら残り1コアでアプリが動くわけで ちょっと重すぎますね。 どうしてもクリック速度を上げないといけないなら 画像を工夫するか、ほかの画像処理ツールを使うべきでしょう。 UWSCだと3つの画像で3回キャプチャしますが、 キャプチャをして画像比較を別の画像処理ライブラリを使って比較すれば 1回のキャプチャで3回比較できます。 が、UWSCで比較しても遅いので高速な言語を使う必要が・・・ [] [ここ壊れてます]
933 名前:名無しさん@お腹いっぱい。 [2016/03/13(日) 10:38:41.65 ID:5BxruRGM0.net] ARToolKitで複数マーカーを使ってみた https://youtu.be/uoncHfnYWHM ARToolKitを使った 「拡張現実感」 kougaku-navi.net/ARToolKit/ これだけグリグリ動くんだから ビットマップの完全一致くらい一瞬じゃないとおかしいんだけどね。 おまけ astertune.com/?p=1374 > OpenGLより高速で、iOSに特化したMetalというAPIが昨年登場 (2015年8月30日の記事) codeit.blog.fc2.com/blog-entry-18.html > SSE を使用することにより約二倍の高速化が見込まれ tanakah.blogspot.jp/2011/02/gt5directx1.html > 車速とギアを認識するDirectXフィルター > やり方ですが、OpenCV1.0についてくるproxytransフィルターを改造してつくります。 > OpenCV cvMatchTemplate() OpenCvSharp 投稿日: 2014年2月6日 https://jpusergis.wordpress.com/2014/02/06/opencvsharp/ C#ならUWSCからPowerShell経由で呼び出せるけど 呼び出しに1秒くらいかかるんだよね。 > 315 名前:Nekorabbit ◆jpnWwiLScI [sage] 投稿日:2014/11/30(日) 07:16:25.97 ID:aCUfDH4j0.net > 画像認識関数 ChkImgX-ver1.2.0 > ttps://googledrive.com/host/0B83tioTzFacPRExEWlpEOXhWbDQ/ChkImgX-ver1.2.0.zip > > やっぱりOpenCVを使うようにした。それとソースコードを追加
934 名前:名無しさん@お腹いっぱい。 [2016/03/13(日) 10:40:01.87 ID:5BxruRGM0.net] やっぱりシンプルで高速なライブラリってのは他にないんだな。 シンプル過ぎてな。
935 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/13(日) 13:21:20.33 ID:DqbPwOfU0.net] >>866 OPTION SHORTCIRCUIT While True ifb CHKIMG("A.bmp") or CHKIMG("B.bmp") or CHKIMG("C.bmp") BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y) else BTN(LEFT,CLICK,1000,500) end WEND 試してないが、こうやったほうが早いかも OPTION SHORTCIRCUITは片方の条件を見つけた時点で以降の条件は探さないらしい これで動いてくれると思う
936 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/13(日) 13:44:27.34 ID:MyuwQ+3+0.net] >>883 それ一緒だから。 実質スリープ無くしただけ
937 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/13(日) 14:35:12.26 ID:0ijLe2jo0.net] UWSCのSHORTCIRCUITはオール・オア・ナッシングで 副作用への注意が必要だからあまり好きじゃない 短絡評価の条件式があれば良いんだけれどね
938 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/13(日) 16:32:38.86 ID:nEkRwzyP0.net] ただの秒数設定ミスのクソ質問かと思いきや微妙に建設的な質問になっててワロタ
939 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/13(日) 16:45:35.50 ID:E0WmGTEK0.net] >>878 いろいろな事を考えると
940 名前:elseifでは対応できない場合も想定されるから 総合的に考えると else if のままのほうがいいみたい? まぁその分endifが増えるんだけど [] [ここ壊れてます]
941 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/14(月) 19:14:44.98 ID:i2rVe3gR0.net] それは総合的に考えるモノじゃないだろう 必要に応じて使い分けるだけで
942 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/14(月) 22:57:21.23 ID:yWL5pN6J0.net] 保守のやりやすさまで考えるとelseif一択 else ifのほうが綺麗に書けるケースはちょっと思い浮かばない
943 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/15(火) 01:55:30.43 ID:47j5cpZS0.net] 個人的にifは二択のときだけ それ以外の選択肢が増えそうなときとかはcase文の方を使いたいとこだ…。
944 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/15(火) 03:45:02.21 ID:SCAnh7Td0.net] ifとcaseでは明確に用途が違うような。
945 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/15(火) 03:50:19.31 ID:dAPydsp10.net] 俺はcaseは限定的な時にしか使いたくないな 逆にそれ以外はif分岐させてる
946 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/15(火) 04:07:47.33 ID:SCAnh7Td0.net] いやいやいや caseはひとつの条件式の結果で分岐するもので elseifは複数の条件式を使うものでしょう? かぶる部分も無いではないけど、普通は用途で決まるような。
947 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/15(火) 05:28:13.13 ID:47j5cpZS0.net] 確かに用途でも決まるね。。 俺が想定してのが単純な一つの値の判定だったから混乱させて申し訳無い 複数の判定が一つの条件式にあると 後から読みにくかったり理解しにくくなったりしそうで ifの中には一つの判定だけをなるべく書く様にしてるからつい…。 中にどんどんif入れてくのも同様の状態になるから入れ子は少なくすることを検討した作りにしてる
948 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/15(火) 11:35:32.40 ID:Ye8AnKp+0.net] caseはbreakさせないって使い方もあるから、一概にどっちがいいとは言えないね
949 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/15(火) 11:57:04.20 ID:RI0XNTAs0.net] なるほど思い出した
950 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/15(火) 13:32:13.65 ID:H7Ch8AYF0.net] UWSCのSELECTはフォールスルー使えなくない? ELSEIF連鎖はメーラーの振り分けみたいな優先順位付き判定群だから使い道が違う。 SELECTは1つの判定で複数の分岐。 UWSCのSELECTは、SELECTに書く式を空にして、CASE側に判定式書いても使えるんで、 ELSEIFと同様のこともできるってだけ。
951 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/03/15(火) 14:33:20.13 ID:K82PCnuw0.net] >>897 > SELECTに書く式を空にして、CASE側に判定式書いても使える なにそれ。そんなこと出来る? 試した限りではselectに式書かなかったら case側に何を書いても最初のcaseが実行されるんだが。 select case 0=1; print "0=1" case 1=1; print "1=1" selend こんなのでも0=1って表示されちゃう。エラーも出ん。