1 名前:名無しさん@お腹いっぱい。 [2016/07/30(土) 17:17:29.59 ID:EHKbGb0r0.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使いよ集まれ17 potato.2ch.net/test/read.cgi/software/1458731603/
143 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/23(火) 20:24:57.77 ID:rGE5OWl50.net] 文字列が数値であるか調べる関数なんだからtrueなのは当たり前だろ falseが返るなんてことになったら意味ないだろ
144 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/23(火) 20:26:34.04 ID:gNdXeSAJ0.net] >>132 自作関数で比較すればいいんじゃね
145 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/23(火) 20:28:22.17 ID:fJY3I3xI0.net] >>129 片方を正規表現で数値チェックしてヒットしたらエラーにする ヒントOLEオブジェクト
146 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/23(火) 20:31:55.93 ID:Lck6kF910.net] VARTYPEじゃいかんのか?
147 名前:133 mailto:sage [2016/08/23(火) 20:34:43.16 ID:/FK1B0e20.net] 型を調べる関数かと勘違いしてた。 vertype使えばいいのか。
148 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/23(火) 22:21:23.59 ID:s1TbUmXS0.net] >>135 基本的にこちらのコーディングミス発見用途ですね 正規表現やBETWEENSTRで切り出した文字列を使うことが多いんですけど 数値として扱うのにVALでの数値化をし忘れるってことがある。 なんかおかしな動作してるなと思ったら数値での比較が文字列比較になっていた…大体そんなところで。 こういう時は止まってくれた方がずっとありがたいと。
149 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/23(火) 22:30:18.43 ID:s1TbUmXS0.net] ミスってる時はこんな感じですよ。 ちゃんと書けばいい、で終了なんですけどね。 hoge = "abc123def" num = betweenstr(hoge, "abc", "def") if num > 20 then print "何かおかしいぞ" <
150 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/23(火) 22:31:07.26 ID:s1TbUmXS0.net] 不等号が逆だったorz
151 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/25(木) 03:51:48.53 ID:bxJiauzf0.net] HDMI切替器でPC1は画像検索マクロ走らせてPC2では悠々自適に動画でも見ようと思ったら PC2に切り替えたらPC1は描画停止するんか〜い てっきりリアルタイムでずっと描画してるんもんだと思ってたぜ
152 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/25(木) 06:21:55.61 ID:KcSlEXn00.net] 非アクティブの本体側にどういった信号を返すかは切替器の仕様の問題 少なくともUWSCは関係ない
153 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/25(木) 09:20:46.76 ID:+ttmDoX50.net] グラフィックカードの問題じゃね? ディスプレイが検出されない場合の出力仕様 PC1ディスプレイ引っこ抜いても動くか試してみればいいな
154 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/25(木) 12:49:25.88 ID:bxJiauzf0.net] >>147 ビンゴだった ディスプレイが検出されないと出力してないようだ さすがにこの仕様だと設定でどうにか出来るレベルじゃないか・・・
155 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/25(木) 13:24:05.82 ID:YFIyJ/gu0.net] 仮想化するとそんなことで思い悩むこと無くなるぞ
156 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/25(木) 21:09:50.92 ID:mReVXUws0.net] HyperVやらVirtualPCやらVMPlayerやら世の中には便利な仮想OSがあるのに なんでこの人たちはひたすらバックグラウンドでやりたがるんだろう
157 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/25(木) 21:12:26.93 ID:mXW+T4Cm0.net] >>150 それ言うならホストとかじゃないの? VM内のOSはゲストやし
158 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/25(木) 21:48:57.24 ID:YFIyJ/gu0.net] >>150 仮想マシンはOSじゃねえぞw
159 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/25(木) 22:24:59.74 ID:kswEog8j0.net] >>150
160 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/26(金) 14:23:00.83 ID:FngsseQ30.net] CreateOLEObj("Excel.Application")のExcel.Applicationの部分はどうやって調べるんですか? https://msdn.microsoft.com/ja-jp/library/7sw4ddf8(v=vs.94).aspx ここの解説を読んでレジストリを見たんですがわからなかったので教えて下さい JScriptをUWSCで実行したいです
161 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/26(金) 14:49:33.61 ID:X2z4cgkF0.net] >>154 JScriptはそれ単体では動かないから、IEなどのJScriptが動くアプリを起動させる
162 名前:名無しさん@お腹いっぱい。 [2016/08/26(金) 16:25:18.76 ID:3Fqd7PNH0.net] >>154-155 "CreateOLEObj ScriptControl" でググれ
163 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/26(金) 17:43:11.35 ID:FngsseQ30.net] >>156 ありがとうございます
164 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/27(土) 18:08:22.77 ID:5L77i6gH0.net] uwscってまだ開発継続してるの?
165 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/30(火) 17:01:40.43 ID:Rp6x+4kr0.net] 安全にサーバー建てられるほど知識がないから 自動化したアプリのテキストログをWindows版Googleドライブにアップ&同期して、スマホで外出先から確認できるようにしたけど、テキストログがAndroid版Googleドライブで確認したら文字化けしてた…… っと思ったら書き込み用のテキストのエンコーディング変えたら、変更したエンコードでFPUTするようになってた あんまりUWSCにエンコードを操作する関数が見当たらない… それと、スケジュール設定の「休止状態から起動」にチェック入れても、休止状態から音沙汰なし……(Windows10) 使ってるPCのタスクスケジューラが使い物にならない以上、ちょっと期待してたけど無理かー
166 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/30(火) 18:05:35.76 ID:zSNiRBx00.net] そうですか
167 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/30(火) 18:29:34.18 ID:pREKFHgQ0.net] 使い物にならんのは頭って感じだなぁ…
168 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/30(火) 19:22:19.70 ID:Rp6x+4kr0.net] スケジュール設定で「休止状態から起動」ができないのが自分の端末だけなのか、Windows10では機能しない項目なのか、あまりUWSCのWindows10における情報がないのでわかりません なので、このスレにいる方
169 名前:で、出来れWindows10で普通に休止状態(スリープ?)からスケジュール設定が起動できる人がいたら報告してもらえると嬉しいです [] [ここ壊れてます]
170 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/30(火) 19:30:25.58 ID:Rp6x+4kr0.net] ふつうにENCODE、DECODE関数はあった…失礼 >>159
171 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/30(火) 19:31:23.22 ID:ZJU8RiW90.net] >>162 できてるよ
172 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/01(木) 02:53:13.53 ID:YOt6rFOv0.net] スクリプトの先頭に0〜5回ランダムで実行する命令を入れたいのですが for I = 0 to random(5) next 等色々やってみましたがはうまくいきませんでした いい方法ありませんか?
173 名前:159 mailto:sage [2016/09/01(木) 02:56:38.06 ID:swp/Xyuf0.net] 情報ありがとうございます Windows10でUWSCから休止状態の復帰が可能だと確認がわかったので、もう少し頑張って原因を調べてみます ありがとうございました
174 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/01(木) 03:36:58.11 ID:BrZMfuzA0.net] >>165 for I = 0 to 0 を入れてみればわかると思うけど、for next は少なくとも1回は実行されるから0回というのはfor文のみでは無理 だからrandomが0の時for文に入らない、あるいはfor文内で実行部分を飛ばす、という風にすればいい
175 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/01(木) 03:40:17.21 ID:JsgI6Ah70.net] random(5) だと 0〜4 じゃなかった?
176 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/01(木) 03:45:21.36 ID:JsgI6Ah70.net] i = random(6) while i i = i -1 処理 wend こんなのでいいのでは
177 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/01(木) 09:38:59.98 ID:ijZ7NsTh0.net] for i = 0 to random(6) - 1 next -1で0回、4で5回
178 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/01(木) 09:45:38.13 ID:FDgUJ2RM0.net] >>165 UWSCだとrandom(5)が最初に評価されて戻り値が確定されるはずだけど、他の言語では どうなるか分からない。悪い癖つけないように、random(5)を変数に格納するべき。
179 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/01(木) 12:14:40.10 ID:nW/X3Ebs0.net] ロック解除時にタスクからuwsc実行させて すぐにlockhardさせようとしたらうまくいかなかった 2秒sleepしたらうまく行った ちょっと残念な挙動やなぁ
180 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/01(木) 17:55:55.65 ID:Fmsfvo9p0.net] >>165 何故これができないのか MaxLoop = Random(5) For i = 0 to 5 If i >= MaxLoop Then Break なんか処理 Next
181 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/01(木) 19:10:30.48 ID:YOt6rFOv0.net] みなさんありがとうございました
182 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/01(木) 21:29:44.17 ID:yGfskyfN0.net] CLASS-ENDCLASS内にHASHTBLを定義して 別ファイルからcallしてハッシュを使いたいのですが ハッシュキーの多重記述エラーになって使えません…。 (キーの多重記述をしていないのは確認済みです) CLASS-ENDCLASSしないでそのファイル単体でなら使用可能なのですが 原因にご存じないでしょうか?
183 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/01(木) 21:51:26.87 ID:2rm5H8qd0.net] UWSCのMODULE(CLASS)はインスタンスがないスタティックなイメージ でもってそのスコープ内では THIS. でアクセス可能 スコープ外からだと MODULE名. でアクセスする必要がある CALLとかはあまり関係ない話です
184 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/01(木) 22:18:19.14 ID:yGfskyfN0.net] >>176 呼び出し側でハッシュ定義しているファイルをcallしてから MODULE名. でアクセスかけていて 呼び出し側を実行するとSyntaxエラー(多重定義)という状況です。 下のようなコードを使用してます ・呼び出し側(test.uws) call conf.uws FOR key in CONF.A_LIST PRINT A_LIST[key] NEXT ・callするファイル(conf.uws) CLASS CONF PUBLIC HASHTBL A_LIST = HASH_CASECARE or HASH_SORT A_LIST["A"] = "Aです" A_LIST["B"] = "Bです" ENDCLASS
185 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/01(木) 22:41:22.52 ID:yGfskyfN0.net] 最終的にやりたいことはforでハッシュ回して IF A_LIST[key] = "Aです" のようなときにkey名を取得して 取得したkey名で別に定義したハッシュから
186 名前:中身をとってくるようにしたいのです。 これでできないようならiniファイルでも作って FOPEN()→キー名のとこだけ取得してからREADINI()みたいになりそうで…。 [] [ここ壊れてます]
187 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/02(金) 00:26:08.43 ID:OUI4CBa60.net] iniのセクション名に日本語が使用できたので、やりたいことは解決できました。 ありがとうございました。
188 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/02(金) 00:37:10.80 ID:XxLUfAfW0.net] >>177 PRINT A_LIST[key] ↓ PRINT CONF.A_LIST[key] PUBLIC HASHTBL A_LIST = HASH_CASECARE or HASH_SORT A_LIST["A"] = "Aです" A_LIST["B"] = "Bです" ↓ この部分は Procedure CONF Fend で囲む
189 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/03(土) 09:02:28.60 ID:61Mxpmlg0.net] >>167 PRINT "FOR loop=1 TO 0" FOR loop=1 TO 0; PRINT loop; NEXT // 実行されない PRINT "end of 'FOR loop=1 TO 0'" PRINT "now loop="+loop+", out of loop." // 1
190 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/03(土) 09:33:40.61 ID:61Mxpmlg0.net] 最近は公式の方も楽しいのな。 ★ 記録と再生について / 山びこ UWSCで、検索窓に「相対性理論」と入力したところを記録して再生すると、「soutaiseirironn」と入力します。 「相対性理論」で入力するように再生するには、どうしたら良いのでしょうか ? ☆ Re: 記録と再生について / 俄プログラマー どこの検索窓なのか書かないと以下のような事が起こります。 A「今の時期スイカを売っているお店を教えて下さい。」 B「スイカならスーパー〇〇に売ってますよ」 A「買いに行ったのですが赤いスイカでした。私は黄色いスイカが欲しいのです。」 B「だったらなぜ最初に黄色いスイカを売っているお店を教えてほしいと言わないのですか?」 ☆ Re: 記録と再生について / 山びこ 日本人のほとんどは、ヤフーかグーグルでキーワード検索をするので、検索窓はヤフーやグーグルであることは、頭の良い人なら気が付きます。 サンプルページは数が多いし、UWSC初心者の私には、調べ方が分かりません。 あなた自身、サンプルページに回答があるなら、他人に説教する前に、サンプルページから回答を示すべきです。 俄プログラマーさんは、二度と、私の質問に回答をしないでください。 ☆ Re: 記録と再生について / しろまさ az-store.nrym.org/archive/web/teach www.redout.net/data/osietekun.html 安心してください。私も二度と回答しません。
191 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/03(土) 13:37:30.64 ID:c5h4aJRL0.net] クソワロタ
192 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/03(土) 13:55:18.08 ID:1F6A1v5M0.net] 数少ない自分が教えられそうな低レベルな内容だと、こういう糞みたいな質問者相手でも喜んで教えたがる奴はいるからな
193 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/03(土) 14:53:38.88 ID:beC39GeC0.net] 俺なら 「相対性理論」で入力するように再生するように記録すればよい としか答えようがないなぁw
194 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/03(土) 19:01:34.11 ID:AChv3q8M0.net] UWSCはwindows10にもう対応した?
195 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/03(土) 19:17:58.30 ID:9x00pYp/0.net] 察するに全角キーの記録がなされてないだけなんだろうけどまったく誰も答える気になってなくて放置されててワロタ
196 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/03(土) 21:26:31.27 ID:gwcLY25g0.net] >>184 まさにそれ 俺のような奴が根絶されない限りソフトウェア板だろうとどこの掲示板だろうとそういうので溢れてる 自分ので再現できて対処はこれだ!ってくらいの解答力がないアホは黙っておけよな 後で検索して碌な解答がなくて困るのは自分だろうに
197 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/04(日) 05:24:39.01 ID:OH48HiEN0.net] プリインWindows7のPCに10をクリーンインストールして使ってます。普通に使う分(UWSC以外での使用)にはむしろ少し動作が軽快になった感じですが、UWSCで重い処理をすると逆に10
198 名前:フ方がいかにも重いという感じでエラーが出やすくなりました。 [] [ここ壊れてます]
199 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/04(日) 05:28:12.51 ID:OH48HiEN0.net] すいませんちょっと長く書くとエラーが出るので何回かに分けて書きます。 以下186の続き 具体的にはMetaTrader 4というソフトで画像に連番をつけて保存するという作業ですが、「busyの間待機を繰り返す」という関数で無限ループにはまったり、途中の処理を飛ばして進行してしまうという症状です。
200 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/04(日) 05:55:29.54 ID:OH48HiEN0.net] て
201 名前:186 mailto:sage [2016/09/04(日) 05:58:27.19 ID:OH48HiEN0.net] うーん、続きを書こうとして今度は完全にbanされてしまいました。 IPではなく書こうとしてる文章で弾かれてる感じですね。
202 名前:186 mailto:sage [2016/09/04(日) 06:01:43.57 ID:OH48HiEN0.net] 自分なりの解決策として7の時はスリープ(0.1)を繰り返したのですが、10では1秒間の待機にしてスリープ(1)の繰り返しにし、それでもダメなときは同じ待機のリピートを更に何回か繰り返すという風にしました。 結果としてはそこそこエラーの出ない処理ができるようになったのですが、それでもブラウザを立ち上げ中とかにやると重くてエラーがでやすくなります(これは7のときも同様)。 それは我慢するとして、リピート関数の多用でとても長ったらしいスクリプトになってしまったのでこれをどうにかできたらなということと、できれば更に処理の確度を高めたいです。 当方、プログラミングの知識など全くなくネットを見よう見まねで試行錯誤しながらやっています。長文すいません。どなたかアドバイスを頂けたら幸いです。
203 名前:186 mailto:sage [2016/09/04(日) 06:02:39.74 ID:OH48HiEN0.net] スリープをカタカナにしたら書けました。スレ汚しで本当にすみません。
204 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/04(日) 06:54:35.62 ID:9nXfkv660.net] そもそも、「busyの間」って何?
205 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/04(日) 07:53:26.21 ID:ix4FK1aB0.net] タクス周りの改善でアプリの応答待ち状態が頻繁に出されるようになったか、 現実に即した「処理中」を監視するようになったのか、 詳しい事は分からないけど以前よりBUZY状態になることが多くなってそれを監視するループが抜けにくくなったという事だね
206 名前:186 mailto:sage [2016/09/04(日) 08:01:34.75 ID:OH48HiEN0.net] >>195 このことです C_ID = GETID("ウィンドウの名前") B=STATUS(C_ID,ST_BUSY) repeat スリープ(1) until (B < 1)
207 名前:186 mailto:sage [2016/09/04(日) 08:20:45.58 ID:OH48HiEN0.net] >>196 なぜ「ビジー状態の間の待機」でエラーが出るのか素人なりに推測したんですが・・・ ・7の時から共通の現象で、ビジー状態の途中に「ビジー状態でない」と判定される瞬間が何回かくる。 → そのため「ビジー状態の間の待機」の繰り返しが有効。 ・10では使用感を軽くするため裏で処理の分散とか今までよりも複雑にやっている。 → そのためUWSCで重い処理をするとエラーが出やすい。 あくまでも自分なりの推測です。
208 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/04(日) 08:52:53.41 ID:j+4pbG5P0.net] つまり現時点ではwin10はまだ微妙ということっすかね?
209 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/04(日) 09:08:47.03 ID:GjLRZWLd0.net] ブラウザのbusy判定についてもう少し調べてから言えばいいのに いや、むしろbusy状態が何かをまず調べた方がいい 素人の推測が本当に素人考えで呆れる
210 名前:186 mailto:sage [2016/09/04(日) 09:23:24.41 ID:OH48HiEN0.net] >>200 まさにおっしゃるとおりの素人考えです。 自分がどのように考え違いをしているのかアドバイスをいただけたらと思って晒したまでです。 自分でもっと勉強するべきだというご指摘もそのとおりだと思ってます。
211 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/04(日) 09:27:00.05 ID:StefP7XA0.net] >>197 そのループ絶対抜けないように見えるけど… #UWSCってvolatileな変数ってあったっけ? こうすべきじゃないか C_ID
212 名前:=@GETID(”ウィンドウの名前”) repeat SLEEP(0.1) B=STATUS(C_ID,ST_BUSY) until B もっと簡潔にはこう while STATUS(GETID(”ウィンドウの名前”), ST_BUSY) sleep(0.1) wend ひっかかってめんどくさいんで全部全角にした [] [ここ壊れてます]
213 名前:186 mailto:sage [2016/09/04(日) 09:39:12.23 ID:OH48HiEN0.net] >>202 >>そのループ絶対抜けないように見えるけど… ですが、90%くらいはだいたいうまくいっていてたまに無限ループになるのです。 >>こうすべきじゃないか >>もっと簡潔にはこう ありがとうございます。試させていただきます。
214 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/04(日) 09:53:08.40 ID:9nXfkv660.net] >>203 あのさ、これじゃBの値は最初に代入されたまま一生変わらないよ? B=STATUS(C_ID,ST_BUSY) repeat スリープ(1) until (B < 1)
215 名前:186 mailto:sage [2016/09/04(日) 10:01:59.69 ID:OH48HiEN0.net] >>204 ありがとうございます。 いままで無限ループにならずにだいたいはうまくいっていたのは見せかけで、実は機能していなかったのでしょうかね・・・
216 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/04(日) 10:18:35.79 ID:ApRsdKxw0.net] ループの中で条件に使ってる変数の値を更新しないと意味ないな あとwhileやrepeatは極力使わず forで実現するといい 要はカウンタで最大ループ数を決めて 全てのループ処理にタイムアウトを付ける どんなに長く待っても10秒までとか ループ後に処理続行できない状態を確認して ダメならやり直し、リブートなどの処理を組むと動作が安定する
217 名前:186 mailto:sage [2016/09/04(日) 11:18:13.73 ID:OH48HiEN0.net] >>206 スクリプト全体でforを使って画像の名前に連番を付けていて、強引に入れ子状にその中にfor構文を持ってきたことがあったのですが、連番の方に影響が出てしまってダメでした。 ごく簡単に書くと、 FOR I = 1 TO 50 処理1(連番を付けて画像を保存) for I = 1 to 4 ビジー状態の間の待機 next 処理2 Next これだと画像の名前が1から4が保存されずに5が保存され次は5の繰り返し(上書き保存を聞かれて中断)でした。 うまいやり方はないかもっと研究してみます。
218 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/04(日) 11:37:06.05 ID:9nXfkv660.net] >>207 変数とは何か?ってのを根本的に理解してないんじゃね? FOR I = 1 TO 50 に for I = 1 to 4 を重ねてるじゃん。 適宜PRINT文突っ込んでIを表示させてみる、なんてこともしてないよね。 コード見て考えるだけじゃなく、自分の思ったように動いてるのかPRINT文で目視するのもデバッグだよ。 処理1・2の前後に画像ナンバーたるIを表示させれば処理2の前では必ず5になるのが分かる。 そこで、なんで5にしかならんの?ってのを頭で考える。
219 名前:186 mailto:sage [2016/09/04(日) 11:49:51.96 ID:OH48HiEN0.net] >>208 Iを違う文字に変えないとダメですね。指摘されて気づきました。 FOR I = というのを定型文のように使っていたので、Iが変数だということの意識がどうやら希薄でした。
220 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/04(日) 12:00:16.03 ID:fewUqw8g0.net] iはindexの略?としてよく使われるだけでaでもxでもhogeでもなんでもいい
221 名前:名無しさん@お腹いっぱい。 [2016/09/04(日) 12:59:32.75 ID:mzGRGMDO0.net] integer→int→i
222 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/04(日) 14:02:23.89 ID:3roQ8uHb0.net] どうでもいいけど FORTRANだと、I,J,Kあたりは宣言しなくてもintegerというローカルルールがあった
223 名前:186 mailto:sage [2016/09/04(日) 15:22:35.62 ID:OH48HiEN0.net] >>>>210 一文字でなくてもいいんですね。勉強になります。
224 名前:186 mailto:sage [2016/09/04(日) 16:08:58.35 ID:OH48HiEN0.net] 以下のスクリプトで解決しました。動きに無駄が全くなくキビキビとしてえらく速くて正確でいいものができたと感激しています。 みなさん、本当にありがとうございました! FOR I = 1 TO 50 処理1(連番を付けて画像を保存) For A
225 名前: = 1 To 100 C_ID = GETID("ウィンドウの名前") B=STATUS(C_ID,ST_BUSY) ifb B >0 then スリープ(0.1) endif Next 処理2 Next [] [ここ壊れてます]
226 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/04(日) 16:24:44.55 ID:StefP7XA0.net] >>206 が言ってた最後の部分が入ってないんじゃないかな 処理2に含まれてる? 「ループ後に処理続行できない状態を確認して ダメならやり直し、リブートなどの処理を組む」
227 名前:186 mailto:sage [2016/09/04(日) 16:35:31.36 ID:OH48HiEN0.net] >>215 処理2は画面範囲の移動であって含まれていません。 試しに動かしてみたらすごくよかったので、処理続行できない可能性への配慮が抜けていました。 >>「ループ後に処理続行できない状態を確認して ダメならやり直し、リブートなどの処理を組む」 このやり方が全く分からないので時間を見つけて勉強します。
228 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/04(日) 18:55:44.50 ID:9nXfkv660.net] >>214 そのfor文の中身、ロジックとして間違ってるよ。 何が間違ってるかは書かない。行右側に何をやっているのか逐次コメント書いて自分で整理してみよう。
229 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/04(日) 19:03:50.31 ID:fewUqw8g0.net] 変な事をしてるが、動くのは動くだろう
230 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/04(日) 19:08:52.87 ID:Ted+EPXc0.net] 同じ名前の別のウインドウが次々に、という可能性も
231 名前:186 mailto:sage [2016/09/04(日) 19:34:31.38 ID:OH48HiEN0.net] >>217-219 今のところ全く正常に動くので意外ですね。そう言えば、元々自分が書いた >>197 もだいたいは曲りなりに動いていたので、結果的に正しく動いているように見えてもロジックが正しいとは限らないのですね。
232 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/04(日) 19:35:54.52 ID:ix4FK1aB0.net] >>214 これに入れ替えろ 絶対こっちのほうが良い C_ID = GETID("ウィンドウの名前") Repeat For A = 1 To 100 If A = 100 Then Break2 S L E E P(0.1) Next Until STATUS(C_ID,ST_BUSY)
233 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/04(日) 19:48:00.60 ID:tDhfFiCO0.net] >>221 それはスリープ入り過ぎるんじゃないの
234 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/04(日) 20:01:47.14 ID:9nXfkv660.net] >>221 そのFOR文は、 SLEEP(10) BREAK と変わらんよw
235 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/04(日) 21:10:15.72 ID:fewUqw8g0.net] >>221 よくこんな糞スクリプト晒す気になるな
236 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/04(日) 22:09:50.51 ID:w21PKIKQ0.net] Webでも結構凄い酷いスクリプトを晒してる人がいるけど ここまで酷いのは早々ないなぁ
237 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/04(日) 22:25:56.08 ID:5yK+yEjn0.net] 懇親のギャグが全力否定されててワロタ
238 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/05(月) 08:39:45.04 ID:Jnhm+/T10.net] >>220 改善点は2つ getidの外出しと、sleepいらなくなった時点でbreak getidは重いけどsleepするような場所だから気にする必要ないし breakしてなくても差は1ミリ秒もないだろうけど
239 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/05(月) 08:48:15.28 ID:Jnhm+/T10.net] あ〜処理1の後、待ってる間にウインドウが立ち上がるなら getidを毎回する必要があるな…
240 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/05(月) 09:15:05.72 ID:qzsh+D0w0.net] その場合は、busy明け待ちループの前に ウィンドウ起動待ちループを入れるべきかな
241 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/05(月) 09:26:38.36 ID:Jnhm+/T10.net] そうか、ステータスbusyじゃないかも知れないか そもそもそれはなさそうだね
242 名前:186 mailto:sage [2016/09/05(月) 22:48:48.41 ID:JhvlyivF0.net] >>227 ありがとうございます。 余計なウィンドウは立ち上がりません。 2つの改善点を試させていただきます。
243 名前:186 mailto:sage [2016/09/05(月) 23:21:20.58 ID:JhvlyivF0.net] 以下のように改善しました。 これも問題なく動きます。 FOR I = 1 TO 50 処理1(連番を付けて画像を保存) C_ID = GETID("ウィンドウの名前") B=STATUS(C_ID,ST_BUSY) For A = 1 To 100 ifb B < 0 break スリープ(0.1) endif Next 処理2(画面範囲の移動) Next