1 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/07/12(土) 19:52:22.18 ID:syCLE48Q0] 前:名無しさん@お腹いっぱい。[] 投稿日:2014/01/09(木) 13:16:00.50 ID:hFz7Kd3R0 [1/3] Windowsの作業を自動化するツール フリーソフト版とシェアウェア版の2種類がある ttp://www.uwsc.info/download.html ●UWSC 掲示板(※作成依頼掲示版ではありません) 質問の際には自力で作ったスクリプトを晒すか、具体的な解らない場所を提示すること 上級者が常駐、たまに作者も現れるため過去ログには有益情報の宝庫 ttp://www3.bigcosmic.com/board/s/board.cgi?id=umiumi ttp://www3.bigcosmic.com/board/s/board.cgi?id=umiumi&mode=past ●UWSC - Wikipedia ttp://ja.wikipedia.org/wiki/UWSC ●使い方・基礎解説学習サイト ttp://uwsc.g.hatena.ne.jp/cx20/20100131/1264938584 ttp://www.confrage.com/uwsc/ ttp://necro.jp/dev/uwsc/ ttp://park14.wakwak.com/~simizu/uwsc/fruwsc.html ttp://canal22.org/ ttp://big.tm.land.to/handbook/uwsc.htm ttp://www.game-rev.com/review/gameut/uwsc.html ●スクリプトテンプレサイト ttp://izagne.com/uwsc/ ttp://scripts.web.fc2.com/ ttp://www.nagomi-jp.net/~liners/ ttp://nem.symphonic-net.com/uwsct/0610uwsct.html ttp://siromasa.digi2.jp/uwsc/ ttp://iriyak.adam.ne.jp/uwsc.html
66 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/02(土) 02:15:39.68 ID:J+3s+h/50] IE.Navigate で COM ERROR: Exception occurred が出る原因と対処法、アドバイス貰えないでしょうか? 下記のコードで、3つ目の IE.Navigate で毎回エラーが出てしまいます。 IE = CreateOLEObj("InternetExplorer.Application") IE.Visible = True IE.Navigate("shizu.0000.jp/rounge/index2.html" ) //1 Sleep(2) IE.Navigate("shizu.0000.jp/sakujyo/index2.html" ) //2 Sleep(2) IE.Navigate("shizu.0000.jp/pcqa/index2.html" ) //3 Sleep(2) IE.Navigate("shizu.0000.jp/ad/index2.html" ) //4 Sleep(2) IE.Navigate("shizu.0000.jp/flyer/index2.html" ) //5 Sleep(2) 表示するURLの順序を変えても、やはり3番目でエラーになります。 UWSC掲示板では情報が得られませんでした。 Win7 Home IE11 UWSC 4.8c
67 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/02(土) 02:29:42.47 ID:KglVg/uo0] うちではエラーは出ないなぁ uwscを最新版にしたらどう? COMエラーを無視して実行しても問題なさそうだからエラーは無視するとか
68 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/02(土) 08:02:51.18 ID:buVZD99L0] >>64 本気か レベルメーターなら分かるんだが・・・まあいっか
69 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/02(土) 08:21:08.45 ID:EMpklq/n0] >>65 現実的には、画像をOCRに通して文字列判定させたくても、都合のいいOCRが安価に入手できない。 また縮小拡大されたり3Dなどで類似画像判定させようとすると、OpenCV+一般言語のほうがいいということになる。 もしUWSCから極めて容易に、 プロセスメモリからユニコード文字列抜き出したり、パケットからスニッフできたりするライブラリがあれば、 人間以上のことが出来ちゃうんだけどなぁ
70 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/02(土) 13:35:13.96 ID:HI77Qwqc0] // できた!こんなところでOK? while 1 if peekcolor(レベルメーターででかい時のx,レベルメーターででかい時のy)=レベルメーターの色 then msgbox("でかい音") sleep(0.1) wend
71 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/02(土) 18:40:27.92 ID:l/ljZJuP0] >>67 最新版5.0.2.0にしてみたけど、結果は同じでした。 エラーを無視を試してみます。ありがとうございました。 COM_ERR_IGN // 何等かのCOM処理 COM_ERR_RET
72 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/02(土) 18:51:25.93 ID:5O9VcL/w0] >>71 なんでsleep使ってるのか知らないけど sleep30くらいにしてもおきるの?
73 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/02(土) 20:44:45.62 ID:WM1a4UDh0] >>72 別のスクリプトで IE.Navigate のエラーが発生したので、 これはあくまで原因を探るためのテストコードなのです。 Sleepはたとえば120秒にしてもダメでした。 あとエラー無視(COM_ERR_IGN と COM_ERR_RET)を使ってみましたが、 IE.Navigate が機能しないことには変わりないのでNGでした。 仕方ないので IE.Navigate を実行する部分ごとに別のスクリプトにして、タスクスケジューラでuwscを順次起動することにしました。 (uwscのスケジュール機能も動作がおかしいので) ありがとうございました。
74 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/03(日) 00:16:57.12 ID:Kb0PwfYK0] これが.NETの総合開発環境なら普通にエラーコード確認できるだろうしデバッグも様々なアプローチが出来るのにねー(棒)
75 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/03(日) 00:29:25.17 ID:df3QRqvg0] busywait入れてみたらどう?
76 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/03(日) 01:39:01.99 ID:BlUvp7BS0] IE11が原因だな 10以下なら動きそう
77 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/03(日) 02:21:05.46 ID:JxcSZXyH0] IE11でもエラーは起きない 本人以外で再現できる人いるの?
78 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/03(日) 07:59:52.72 ID:GZ+WuIZ70] エラーは起きないけれどWin7 IE11で3以後は表示されない IEの外部操作は.NETでしかやったこと無いけれど同じような経験あるよ その時はデバッグの結果 1回目は初期化されたIEだから問題ない 2回目は変数IEが表示中のIEなのでナビゲート後のページが表示される 但し内部的にはナビゲートすると変数IEと表示中のIEは同じオブジェクトじゃなくなるので 3回目以後は表示されない って解釈してナビゲート後のIEを SHDocVw.ShellWindows から探す関数を作って対応した
79 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/03(日) 08:11:42.83 ID:GZ+WuIZ70] 自分のケースの場合は 自動表示したページから次のURLを取得して順次ナビする必要があったけど >>66 の様なケースの場合は 固定URLの巡回なら毎回IEをCreateOLEObjして対応してもいい気がする
80 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/03(日) 08:46:05.25 ID:BlUvp7BS0] >>79 なるほどなぁ それなら毎回GetActiveOleObjするのでもいいのかな 表示中のページも利用できそうだけど
81 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/03(日) 17:53:01.87 ID:ygrmWk1e0] 下記のコードでポップアップのOKが押せない原因を調べているのですが、どうしても分かりません。 IE = CreateOLEObj("InternetExplorer.Application") IE.Visible = True IE.Navigate("https://ctu.fletsnet.com/") BusyWait(ie) IESetData(IE, True, "btnLogin", "ログイン") BusyWait(ie) IESetData(IE, True, "CONNECT_OFF_CLICKRUN_C1025", "切断") BusyWait(ie) IESetData(IE, True, "CONNECT_OFF_CLICKRUN_C1025", "接続", 1) BusyWait(ie) IELink(IE,"ログアウト") ID = getid("Message from webpage","#32770",-1) ClkItem(ID,"OK") // ←ポップアップのOKが押せない! BusyWait(ie) IE.Quit ExitExit ポップアップを手動で開いてから、下記コードだけを動かす時は正しくクリック出来ます。 ID = getid("Message from webpage","#32770",-1) ClkItem(ID,"OK") どうして連続処理の中では動作しないのでしょうか?
82 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/03(日) 18:09:32.78 ID:df3QRqvg0] ポップアップが出る前にID取得してんじゃねーの
83 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/03(日) 19:02:52.87 ID:mE9cDTXm0] 管理者権限のUWSCスクリプトで起動したソフトがすべて管理者権限で起動されてしまうのは防げないものでしょうか?
84 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/03(日) 19:03:26.55 ID:f5gfXNnl0] 自動操作では操作の成否を戻り値で受け取って一定回数再トライするのは定石よ
85 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/03(日) 19:05:07.65 ID:vQ3Noa3Z0] >>82 >>84 出来ました! ありがとうございます!! thread CtuPopUpClick() IELink(IE,"ログアウト") //////////// Procedure CtuPopUpClick() ID = getid("Message from webpage","#32770",-1) ClkItem(ID,"OK") Fend
86 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/03(日) 22:17:27.04 ID:f5gfXNnl0] >>85 邪魔なダイアログ消すだけならそれでOKなんだろうが sleep(1) flgOkWasClicked=false for loop=1 to 10 did=getid("Message from webpage","#32770",1) if did = -1 then continue flgOkWasClicked=clkitem(did, "OK") if !flgOkWasClicked then continue next ifb flgOkWasClicked then ... ということを言いたかったんだね〜 まぁ好きにやれや
87 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/04(月) 06:29:48.83 ID:+GhF8xfL0] >>86 修正 sleep(1) flgOkWasClicked=false for loop=1 to 10 did=getid("Message from webpage","#32770",1) if did = -1 then continue flgOkWasClicked=clkitem(did, "OK") if flgOkWasClicked then break next ifb flgOkWasClicked then ...
88 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/05(火) 16:38:42.74 ID:qR61SyTc0] ランチメニューのショートカットキーは無効化出来ないのでしょうか? キー割り当てに「なし」という選択肢がありません。 UWSC.INI を書き換えてもダメです。 LunchMenuHotKey= を削除すると デフォルトの Ctrl-W になってしまうし、 LunchMenuHotKey=999 とか存在しないキー番号を書くと起動時にいちいちエラーが出るし。 使わない機能のためにショートカットを割り当てなきゃならないのがツライ。
89 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/05(火) 16:48:10.96 ID:qR61SyTc0] 訂正: ショートカットキー → ホットキー
90 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/05(火) 16:54:29.69 ID:D5Dx1Flc0] デフォだとブラウザのタブとか閉じるコマンドなんだよねそれ、無効ないししょうがないから使わないコマンドに設定してるよ
91 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/05(火) 17:02:03.38 ID:M2OIrEtB0] 残念ながら有りません UWSC本体を常駐状態にせずにスクリプトを逐次起動すれば ショートカットを気にする必要はなくなりますよ
92 名前:名無しさん@お腹いっぱい。 [2014/08/05(火) 18:04:36.53 ID:0292bkw40] While true MSGBOX("testtest") IF CHKIMG("tes1.bmp",0,1,1,806,625) THEN BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y) sleep(3.0) endif IF CHKIMG("tes2.bmp",0,1,1,806,625) THEN BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y) sleep(3.0) endif IF CHKIMG("tes3.bmp",0,1,1,806,625) THEN BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y) sleep(3.0) endif IF CHKIMG("tes4.bmp",0,1,1,806,625) THEN BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y) sleep(3.0) endif IF CHKIMG("tes5.bmp",0,1,1,806,625) THEN BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y) sleep(3.0) endif sleep(0.5) Wend 5この画像クリックして戦闘ループさせるようにしたつもりなんだけど 画像が見つかんねー ペイントで切り取って保存してキャンバスのサイズ1×1に張り付けて この書き方がまずいの?ちゃんと画像の探索できてんのかわからん
93 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/05(火) 18:43:48.97 ID:6loQZGsf0] その程度自分でデバッグできないとか。
94 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/05(火) 18:47:39.23 ID:M2OIrEtB0] 適当にレスするとCHKIMGで得られる座標は左上なので 当然クリックする座標も其処になる 其処がクリック可能じゃなければBTN関数は当然失敗する それ以前に比較用の画像が駄目な可能性もある 個別に判断していけ
95 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/05(火) 19:00:12.01 ID:niZhumv+0] >>92 ・MOUSEORGを使う ・CHKIMGが失敗した場合にSLEEP挟まずに次のCHKIMGが実行されており CPU時間を独占し対象の描画を妨害する可能性がある ・CHKIMGは可能な限り IMG_MSK_BGR4 で判定すべし ・明らかにマッチする画像がマッチしないなら、そのときの画像を保存し、 比較元と比較先の画像を800%以上に拡大して肉眼比較すべし ・画像があればクリックしTRUE、無かったり座標異常等でクリックできなければFALSEを返す 例えばCLKIMG関数のようなものを定義すれば、コード量は半分に減りテストもしやすいだろう
96 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/05(火) 21:31:03.70 ID:oWkOQAEl0] IE操作について質問です CSSセレクタやXPathによるエレメント指定って UWSC標準関数では実現できないと思うのですが 何かいい方法ありませんか?
97 名前:名無しさん@お腹いっぱい。 [2014/08/05(火) 22:12:08.03 ID:0292bkw40] 解決しました! やっぱり画像が一致してなかったみたいです >>93 sleep関数とmsgboxで一応デバッグしとる
98 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/06(水) 12:29:26.17 ID:OYZwCMgl0] CHKIMGを利用して指定画像があった場合、続いてその画像から右側の指定範囲をサーチさせるにはどうすればよいのでしょうか? 例を挙げると 画像A(画像左上角の座標がX=100、Y=100)があったら、次にそこから右の範囲(X1=110、Y1=100、X2=150、Y2=120)から指定画像を検索 要は画像Aの左上角座標からX1はX+10、Y1はY、X2はX+50、Y2はY+20の範囲を続いてサーチさせたいのです こういったことが可能であればどのように書けば良いのでしょうか?
99 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/06(水) 12:51:52.41 ID:J8shURq/0] 変数使えば良いんじゃね X1 = G_IMG_X + 10 とかしても良いんだぜ
100 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/06(水) 12:53:23.23 ID:OYZwCMgl0] なるほど!ありがとうございます。
101 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/06(水) 16:49:49.42 ID:Kd4DWNAs0] PC用の無線リモコンにexe化したショートカット登録して押せるようにしたらすげー便利だった 1000円の品だったから4個しか設定出来ないがこれ捗りすぎてやばいw
102 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/06(水) 18:59:45.71 ID:hsLYtabQ0] PCに触っている状態であればランチャー動かしたほうが早いし 欲しいけど便利な用途が思いつかん
103 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/06(水) 19:15:26.39 ID:J8shURq/0] USBフットスイッチでもきっと便利に使えるだろうけれど それはUSBフットスイッチの便利な使い方の一つでしかなくて 別にUWSCじゃなくてもいいし EXE化しなくても引数付きでスクリプト起動してもいいよね まぁ、嬉しい気持ちは伝わってくるよ よかったな
104 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/06(水) 19:39:18.22 ID:Kd4DWNAs0] もともとfoobarに使えるリモコンって買ったんだけどuwscに利用したら思わず便利だったんで書いちゃったわ、確かに無理してそれ目当てに買う必要はないな
105 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/06(水) 23:55:48.76 ID:h3IAvmk30] IEで、あるページを表示させて、そこに入力フォームや登録ボタンがあるかどうかを判定するにはどうしたら良いでしょうか? mailフォームと登録ボタンがあれば入力して押す。 IESetData(IE, "テストデータ", "mail") IESetData(IE, True, "", "登録する") なければ別の処理、という形にしたいのです。 ググってみたけど、どういうメソッド(?)をどう組み合わせればよいか分かりません。 教えてもらえると助かります。
106 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/07(木) 00:14:05.20 ID:6xUT57kM0] POS関数
107 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/07(木) 00:23:53.64 ID:Ft6QcBe/0] IESetDataの戻り値はなんのためにあると思っているんだ?
108 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/07(木) 00:34:06.84 ID:xY78+5+d0] 複数のUWSファイルを各ループ終了後に順番に開くようにしたいのですがわかりません。 現在はmain.uwsに、 while true call A.uws call B.uws call C.uws wend と記述しており、A〜C全て画像認証で特定の画像が現れたらクリックをしてループを抜けるというものです。 Aが画像認証成功したらBへ、Bが画像認証成功したらCへ、Cが画像認証成功したらAへと行きたいのですが上手く行きません。 上記の記述だと、Aをクリアした後にBに行き、応答なしになります。
109 名前:名無しさん@お腹いっぱい。 [2014/08/07(木) 02:03:52.04 ID:fKkKz5EB0] 公式サイトの掲示板で質問すれば作者が回答してくれるのに、 何でこんな便所の落書きみたいな場所で質問するの?
110 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/07(木) 02:33:23.60 ID:xY78+5+d0] 書き込んだ時503で見れなかったんだ・・・ 公式掲示板で聞いてみる
111 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/07(木) 02:54:02.97 ID:S3EPzyir0] callなんてやめて関数で1ファイルにしちゃえよ
112 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/07(木) 06:10:19.12 ID:E6P035jA0] [MAIN.uws] CALL SUB1.uws CALL SUB2.uws while true A() if !B() then exit if !C() then exit wend -- [SUB1.uws] procedure A() … fend function B() … result=true fend -- [SUB2.uws] procedure C() … result=true fend
113 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/07(木) 09:04:03.29 ID:kQCQRYI80] IF CHKIMG("AA.bmp") or CHKIMG("BB.bmp") or CHKIMG("CC.bmp") BTN(LEFT,CLICK,G_IMG_X,G_IMG_Y) その他処理 endif いくつかの画像を検索して同じ処理をしたいんですけど、 上記のように書くと、AA.bmpを見つけても、CC.bmp検索までしてるようで、 AA.bmpのG_IMG_XとG_IMG_Yの値を保持してくれないみたいで上手くいきません。 IF文を分ける以外のテクニックがありましたら教えてください。
114 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/07(木) 09:56:39.26 ID:S3EPzyir0] >>113 先頭に OPTION SHORTCIRCUIT
115 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/07(木) 10:55:59.57 ID:xY78+5+d0] >>108 です 調べたところ、Bの画像認証が上手く行ってなかっただけでした。 お騒がせしました。