1 名前:名無しさん@お腹いっぱい。 [2009/12/09(水) 05:27:33 ID:J1DL1P1U0] Windowsを自動化させるツールUWSC。 www.uwsc.info/ uwsc使いのみなさま、マターリ己のスクリプトを晒しましょ。
97 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/30(水) 11:57:01 ID:3SgEgPry0] // サブメニューのIDを取得する。 // TLimit=-1 : 永久待ち // TLimit=0 : 1回のみ // 戻り値 0 : 該当なし -1:ダイアログ表示 その他:サブメニューのID Function WaitSubMenuPopup( ID, TLimit = -1 ) def_dll GetWindow(hWnd,long):long:user32.dll Public GW_ENABLEDPOPUP = 6 // ポップアップウィンドウ result = 0 H = IDToHnd(ID) Repeat sleep(0.01) if 0 < TLimit then TLimit = TLimit - 0.01 retH = GetWindow( H, GW_ENABLEDPOPUP ) if ! retH then continue retID = HndToID(retH) Select Status(retID, ST_CLASS) case "#32768" // メニュー result = retID exit case "#32770" // ダイアログが表示されたらエラー中断 result = -1 exit Selend Until ! TLimit Fend
98 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/31(木) 18:28:22 ID:Z8Iw0iCS0] FOR文の使い方について教えてください。 以下のように書くと10から20までの数字が画面に表示されます。 FOR i = 10 TO 20 STEP 1 FUKIDASI( i) SLEEP( 1) NEXT ところが各数字を10分の1にすると1から1.9までの数字しか表示されません。 FOR i = 1.0 TO 2.0 STEP 0.1 FUKIDASI( i) SLEEP( 1) NEXT これはどうしてなのでしょうか?
99 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/31(木) 19:15:53 ID:8NQ2XvCh0] STEP 0.2だと2が表示されるな。 挙動がようわからん… 何か0.124と0.125の間あたりで切り替わるようだが… とりあえず FOR i = 10 TO 20 // 多用するならj = i / 10とかして使う FUKIDASI( i/10) SLEEP( 1) NEXT とかするのが無難そうね。
100 名前:名無しさん@お腹いっぱい。 [2009/12/31(木) 22:41:43 ID:WvG0KKdQP] >>98 誤差の影響です。 コンピュータはすべて2進法で計算していますが、 この2進法では0.1という数字を「正確に」扱う事が出来ないのが原因です。 これは私たちの身の回りにもよくある話です。 私たちが普段使っている10進法では「1/9」を小数で表現すると 0.1111・・・ですよね。 1/9を9個足せばもちろん1です。 しかし 0.111111111111111111と途中で数字を切り捨てて計算を続けたらどうでしょうか? これを9個足しても 0.999999999999999999にしかならず、決して1にはなりませんね。 もちろん工夫をする事によってこの問題を回避する方法を持っている 計算プログラムも存在していますが、難しい処理が必要になるため プログラムの価格が高価であったり計算する時間が長くなったりします。 uwscのようなプログラムでは一般的に誤差を持っています。 誤差を極力減らすためには>>99 さんがおっしゃるように なるべく整数のまま計算をするのが最も効果的な方法といえます。
101 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/01(金) 00:05:54 ID:zRjPwPJp0] >>100 お前、頭いいな。 どこ大学出よ?
102 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/01(金) 01:08:17 ID:SeLmUNNh0] この場合は誤差はないと思いますけど。 原因は多分、0.0を0と計算できないこと・・・ いや、やっぱり誤差かな? 回数を計算するときにUWSC内部で (2.0-1.0)/0.1とかやってるんだろう。 10進数の0.1は、2進数で・・・ ttp://www.infonet.co.jp/ueyama/ip/semi_cnd/abacus.html > ところで、10進数の 0.1 は、2進数では正確に表すことができず、 その近似値は 0.00011001100110011001100 … になります。 てことは・・やべ>>97 は無限ループだ。 全て100倍して整数値で計算しないと。 んでもって確実に整数値にするためにINT()とか使わないと。
103 名前: 【末吉】 【1885円】 mailto:sage [2010/01/01(金) 01:51:39 ID:SeLmUNNh0] !omikuji !dama
104 名前: 【ぴょん吉】 【605円】 mailto:sage [2010/01/01(金) 01:56:44 ID:JMt2GOx60] てすと
105 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/01(金) 10:05:06 ID:SeLmUNNh0] > Until !CEIL(TLimit) >>97 は判定をこーするだけでいいな。 複数条件だと論理演算がふつーにはできんからややこしくなるし。 !!(条件1) and !!(条件2)でも通るかもしれんけど。
106 名前:98 mailto:sage [2010/01/01(金) 11:48:35 ID:pAk0r2E30] >>99-100 回答ありがとう。なるほど。 小数点以下を多めに表示させるとこうなりました。 FOR i = 1.0 TO 2.1 STEP 0.1 FUKIDASI( FORMAT( i, 19, 17)) SLEEP( 1) NEXT 1.00000000000000000 1.10000000000000009 1.19999999999999996 1.30000000000000004 1.39999999999999991 1.50000000000000000 1.60000000000000009 1.69999999999999996 1.80000000000000004 1.89999999999999991 2.00000000000000000 0.1を正確に表せないとはいえ、誤差が拡大しないように調整されてるのかな。 回数が狂うのは>>102 の言うように実行回数計算を別途やっていてその時点で誤差が出てるんですかね。
107 名前:98 mailto:sage [2010/01/01(金) 16:45:33 ID:wjuaj82V0] 小数の問題っていろんなところに出るんだなぁ。 ROUND関数って小数点以下を四捨五入する関数なんだと思うけど 入れる数字によってはおかしくなる。 FUKIDASI( ROUND( 12.5)) SLEEP( 1)
108 名前: 【大吉】 【313円】 mailto:sage [2010/01/01(金) 18:36:08 ID:h6GpVGPr0] FUKIDASI( hoge(12.5)) SLEEP(1) Function hoge(num) num = num + 0.5 num = int(num) Result = num Fend これだとまともに動くなw 中でどんなことやってるんだろうか…
109 名前:名無しさん@お腹いっぱい。 [2010/01/01(金) 21:30:04 ID:RTODHS/O0 BE:4155991698-2BP(0)] 恐らくヘルプにも四捨五入とは書かれておらず「丸める」とあるはずです。 >>107 の挙動を見る限り一般的に使用されている「偶数丸め」をそのまま採用しているかと。 偶数丸めというのは12.5のように12と13の中間の値を取る場合は 偶数側の値に切り捨てを行う処理方法です。13.5であれば切り上げて14とします。 round(14.5)も14になるはずですよ。
110 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/03(日) 10:53:27 ID:r0VUyURQ0] >>90 の修正 文字列をEVALに渡す場合、ダブルクォーテーションを付加しないと変数扱いになる。 数値を渡す場合は不要なので、SrchDomTreeを呼ぶときに付加しておいたほうがいいっぽい。 // SrchDomTree( "func", IE.document.getElementById("my_footer"), "<#DBL>文字列<#DBL>", "123" ) // Function SrchDomTree( func, elm, env1 = 0, env2 = 0, env3 = 0, env4 = 0 ) // result = empty // // 先に直接の子ノードを調べる // for i = 0 to elm.childNodes.length - 1 // ret = eval( func + "(" + "elm.childNodes[i]" + "," + env1 + "," + env2 + "," + env3 + "," + env4 +")" ) // ifb !IsEmpty(ret) then // result = ret // exit // endif // next // // 孫ノードに入っていく // for i = 0 to elm.childNodes.length - 1 // ret = SrchDomTree( func, elm.childNodes[i], env1, env2, env3, env4 ) // ifb !IsEmpty(ret) then // result = ret // exit // endif // next // Fend おまけ // ifb 3 = elm.childNodes[i].nodeType then // テキスト // elm.childNodes[i].nodeValue // テキストデータ
111 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/05(火) 14:59:27 ID:WsNY715b0] softalk使って日本語しゃべらせたいんだけど、素人過ぎてショートカット乱立させてクリックさせるのが限界です・・・。 上品な立ち振る舞いで話させるには、どうプログラムしたら良いですかね?
112 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/05(火) 16:22:04 ID:deSK2IBq0] >>111 doscmd or exec と softalk の引数指定
113 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/05(火) 20:02:55 ID:idKMoxPT0] ヘルプすべて印刷して一読すると良いよ それが面倒臭いならテンプレの本買え
114 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/05(火) 23:22:45 ID:WsNY715b0] >>112-113 ありがとよ。かなりスマートになった。 exe名入れるときにメモ帳は"notepad"でいいのに、 softalk指定するときはアドレス入れないといけないのは何でなんだ? プログラムの基礎の質問なんだと思うが...
115 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/06(水) 00:07:16 ID:12AIG4f80] そのディレクトリにパスが通っているかという話。 環境変数のPATHにそのディレクトリを登録すれば(=パスを通せば)行ける。 詳しくはググるよろし。
116 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/06(水) 03:48:14 ID:j0L+SVeO0] ECMAScript みたいに 関数自体を変数に代入する方法ないかな? 変数を () 付きで実行することで その変数に代入された関数を実行するようにしたい
117 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/06(水) 03:57:32 ID:j0L+SVeO0] あ、evalあるのね これでできそうです お騒がせしました
118 名前: ◆fdAnbU5Z6U mailto:sage [2010/01/06(水) 07:29:33 ID:EasGK5JXP] 少しだけ相手してやんよww 若いだろ?至りってやつだな
119 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/06(水) 10:00:09 ID:jv+N909k0] >>118 じゃあこれデバッグしてください。 ttp://karimofu.org/dlp/mofu1_7789.zip.php ダウンロードパス:saymove
120 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/06(水) 10:01:35 ID:jv+N909k0] ていうか1月6日に閉鎖ですか。 これから先自作スクリプトはどこにうpすればいいのか。
121 名前: ◆fdAnbU5Z6U mailto:sage [2010/01/06(水) 11:44:36 ID:EasGK5JXP] キモイホモだなぁ!おまえブサメンでキモブサだろ?少しだけ相手してやんよww 若いだろ?至りってやつだな
122 名前:98 mailto:sage [2010/01/08(金) 14:59:40 ID:VCRefa1D0] >>109 その通りですね・・・偶数丸めというのを知らなかったので。 お騒がせしてすみませんでした。
123 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/15(金) 20:16:22 ID:3e5Ape4g0] 長文で失礼します。 最近uwscを勉強しはじめました。 uwsc本を参考に連番のIDでサイトにログインするように作ってみました。 一応出来たのですが、ID001からID030までを連続で入れることが出来ないため() 1〜9用マクロと10〜30用マクロに分けて使っています。 もっとシンプルにしたり、1〜30までの連番を1つのマクロに統一する方法はありますでしょうか? おそらく初歩的なことなのでしょうが質問お願いします。 _________________________________________ 例)ログインIDは "id001"〜"id030" パスワードは ps >SUUJI = 1 >FOR A = 1 TO 30 >KBD(VK_i) >KBD(VK_d) >KBD(VK_0) >SENDSTR(,SUUJI) >SUUJI = SUUJI +1 >KBD(VK_TAB) >KBD(VK_p) >KBD(VK_s) >KBD(VK_TAB) >KBD(VK_ENTER) id入力の所を、 1〜9用マクロは、KBD(VK_i) KBD(VK_d) KBD(VK_0) KBD(VK_0) 10〜30用マクロはKBD(VK_i) KBD(VK_d) KBD(VK_0) にして使っています。 一本化するにはどのように直せば良いでしょうか?
124 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/15(金) 22:54:28 ID:zUTDSHGw0] >>123 IESetDataを使おう。 Formatで0埋めは出来ないようだから、 z = "0" zz = "00" とかして、 for i = 1 to 30 ifb i < 10 hoge = zz + i //数値と文字列足すと文字列として足してくれる else hoge = z + i endif IESetData(IEID,hoge,"ID") IESetData(IEID,"ps","PASS") 〜〜 next とか、そんな感じ。 RecIEで出力させて見れば解ると思うよ。
125 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/15(金) 22:55:55 ID:zUTDSHGw0] インデント入らなかった、スマソ for i = 1 to 30 ifb i < 10 hoge = zz + i //数値と文字列足すと文字列として足してくれる else hoge = z + i endif IESetData(IEID,hoge,"ID") IESetData(IEID,"ps","PASS") 〜〜 next
126 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/16(土) 13:15:51 ID:ZYqbg1Ld0] 自動ログインスクリプトを作成してみたのだが、サーバーエラーが出た場合の回避方がわかりません。 ifを使う事はわかったのだが、ピッタシに来る例文が探しても見つからないのです。 自力で色々試すもうまく行かず・・・どなたかご教授下さいませ。 以下スクリプト //IEを開いてページ表示 IE = CREATEOLEOBJ("InternetExplorer.Application") IE.visible = True IE.navigate("http://×××××") //5秒停止 sleep(5) //接続表示待ち while True if (! ie.busy) and (ie.readyState=4) then Break sleep(0.1) wend id = GETID("Internet Explorer") //ログインID入力 IESETDATA( IE, "●●●●", "id" ) IESETDATA( IE, "※※※※", "pass" ) CLKITEM(id,"ログイン", CLK_ACC or CLK_MUSMOVE) //5秒停止 sleep(5) //接続表示待ち while True if (! ie.busy) and (ie.readyState=4) then Break sleep(0.1) wend この下にもし「サーバーエラー」が出た場合は再度http://×××××に戻って 再度ログインID入力を再実行したいのだが・・・
127 名前:名無しさん@お腹いっぱい。 [2010/01/16(土) 16:16:24 ID:hORuBIiX0] >>126 ttp://www3.bigcosmic.com/board/s/board.cgi?id=umiumi&mode=all&no=2800 IE = CREATEOLEOBJ("InternetExplorer.Application") ←これはループの外 IE.visible = True > while true > 受信処理(>>126 のスクリプトのうち最初の2行を除く部分) > if 0 = Pos("サーバーが混み合っています", str) then break > // 受信エラー > sleep(60) > wend > // 正常に受信
128 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/16(土) 20:08:00 ID:L+sAYtsZQ] わたくし初心者でちょっと困っているのですが FAQにある 「負荷が高い時に ウィンドウのオープンをスクリプトが待ち切れず・・・」 の答えとしての↓ スクリプト内のGETID関数に第3引数(待ち時間指定)を付けて下さい。 GETID("xxxx", "xxxx", -1) // -1:画面が出るまで待つ 同様に括弧内に-1をつけても思うように実行されません(待ってくれないのですが) どなたかご教授お願いしますorz
129 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/16(土) 20:20:02 ID:hORuBIiX0] >>128 ウィンドウが出現しても、そのコントロールの配置に時間がかかる場合があります。 その場合、ウィンドウは存在しているからIDは取得できますが、コントロールがないので操作に失敗します。 コントロールを利用可能になっているか確かめる必要があります。 ウィンドウが出現していることを確認するには、Statusでタイトル名などを取得したらいいですよ。 本当にGetIDに失敗していたら取得したIDは-1になっているはずなので、その時点ではじくこともできるでしょう。
130 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/16(土) 20:21:01 ID:U6EzK14SP] 待ってくれないって事は戻り値は-1なの? 別ウィンドウのを取得してるんじゃね?
131 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/17(日) 01:11:03 ID:SVOvo/dN0] 数字を文字列として扱うにはどうすればいいでしょうか? intA = 10 intB = intA * 2 //20 Print intA + intB //"1020"と表示したい 文字列結合子と演算子が同じ"+"なので、不可能なのでしょうか?
132 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/17(日) 02:22:14 ID:2D/YPlQ90] >>131 // フォーマット 戻値 = FORMAT( 数値, 幅, [小数点桁 or 16進指定] ) 引数 数値: 数値 もしくは文字 幅: 出力される文字数 (数値より指定幅が大きい時は左側をスペースにて補完) 数値ではなく文字が指定された場合は その文字で幅分を埋める 小数点桁 or 16進指定: 表示する小数点桁数、 また -1が指定された場合は16進数表記にする 戻値 フォーマットされた文字列
133 名前:123 mailto:sage [2010/01/17(日) 06:07:26 ID:rLsFwGWi0] >>124 様 数字の所はIFで処理するといいのですね、なるほどです。 昨日から直す作業をしてるのですがまだ動いてないので(IESetData関数がない、と言われてしまう…)もう少し練習をしてみます^^ 試しに使っていたのでフリー版を利用していたのですが、RecIEの機能を調べていたらとても便利そうですね。 とても参考になりました。 ありがとうございました。
134 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/17(日) 10:06:50 ID:mb/jokyZ0] >>131 print "" + intA + intB もしくは print intA + "" + intB print intA + intB + "" はNG
135 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/17(日) 10:26:16 ID:gXklMUNy0] //スペースにて補完→0にて補完へ変更…それだけ(^^; for i = 1 to 30 hoge = ChgMoj( Format( i, 3 ), " ", 0 ) next
136 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/17(日) 13:01:39 ID:SVOvo/dN0] >>132 ,134,135 レスありです。 >>132 その関数は知っているのですが、実は16進数で合体させるため、Formatを多用する以外に方法があるかどうかの確認でした。 説明不足でわざわざコピペしていただいてありがとうございました。 >>134 この方法がスクリプトを後で見返したときに一番単純で理解しやすそうですね。 昔VBでVal関数を知らなかったときに文字列に+0して数列に変換していた方法を思い出しましたw
137 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/19(火) 20:29:01 ID:E18f84ud0] UWSCProを使用しています。 一度exe化したものを、再び.uwsに戻す事は可能でしょうか? 戻せないにしても、exeの物の中のスクリプトを表示する事は出来るのでしょうか?
138 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/19(火) 21:29:37 ID:dm9R5tz30] >>137 たぶんバイナリエディタで開くと最後にくっついてるんじゃね?
139 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/19(火) 21:37:14 ID:/h2JRfae0] >>137 Pro版のEXE化について質問です。 まだ購入していないのですが、EXE化時にスクリプトをコンパイルしていないとの書き込みがありました。 www3.bigcosmic.com/board/s/board.cgi?id=umiumi&mode=all&no=617 この時には、生のスクリプトがEXEに連結されるだけですか? そうである場合、暗号化後のスクリプトをEXE化の元に指定することもできますか? EXE化後に、EXEをエディタで見たらそのままスクリプトが見えてしまわないかと気になったもので。。。 宜しくお願いします。 DATE:2007/3/25(Sun) 15:04 No.628 RE:EXE化時のスクリプト内容 umiumi 暗号化して取り込んでいますので、自分で変換作業をしておく必要はありません。
140 名前:137 mailto:sage [2010/01/20(水) 01:35:54 ID:+aeXo+8F0] >>138139 バイナリエディタで見てみましたが私には分かりませんでした。 掲示板のQ&Aの回答を見る感じだと、一度exe化してしまったら戻すことは出来ないということで合ってますでしょうか? 暗号化を解く方法があるのであれば別でしょうが…
141 名前:名無しさん@お腹いっぱい。 [2010/01/20(水) 22:41:47 ID:ip1Zjd0h0] WINDOWS 7でIE8を使用しております。 とある図書館にログインして自分の借りている図書および予約の図書を確認するスクリプトを作っております。 しかし、IDとパスワードは入力さるのですが、「ログイン」のボタンがど〜〜〜しても押してくれません。 大変すみませんが、教えていただけないでしょうか? 次のように実装しております。 ie = CreateOLEObj("InternetExplorer.Application") ie.Visible = True id = GETID("Internet Explorer") ie.navigate("https://lib.city.shinagawa.tokyo.jp/cgi-bin/Sopcsryc.sh?p_mode=1&proc=kyj") while True // 接続表示待ち if (! ie.busy) and (ie.readyState=4) then Break sleep(0.1) wend id = GETID("Internet Explorer") //ログインID入力 IESETDATA( IE, "123456789", "ryno" ) IESETDATA( IE, "9876", "passwd" ) CLKITEM(id,"ログイン", CLK_ACC)
142 名前:名無しさん@お腹いっぱい。 [2010/01/20(水) 23:02:51 ID:8bN4FDNJ0] >>141 本家掲示板にIDとパスワードが書いてあるんでログインスクリプト動かしてみたけど 被害者が襲撃に来た(マジで) うちの地元の警察は個人情報をリークして権力者等に直接襲撃許可を出す悪い癖があるんだ。 親切に教えてやろうと思った奴を罠にかけるのが狙いかもしれないので触らずに削除依頼出すべし。
143 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/20(水) 23:13:48 ID:9xULNIKf0] >>141 ie.navigate("javascript:onClick(this.execCGI(1));")
144 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/20(水) 23:32:14 ID:8bN4FDNJ0] >>141 ソース見ると<input type="button" value="ログイン" onClick="execCGI(1)"> 名前もIDもないので"ログイン"の文字をクリックするか、itemsを順番に見ていくしかないな。 execCGI(1)って関数実行してるからこれを呼び出せればそれでもいいかも。 ClkItemを使う場合、IDのとり方が悪い。 × id = GETID("Internet Explorer") ○ ID = HNDToID(IE.HWND) そして、「ログイン」という文字はタイトルバーにもあるので、もしかするとこちらをクリックするかもしれない。 番号に2を入れてみるとうまくいくかも。 > CLKITEM(id,"ログイン", CLK_ACC, true, 2) >>143 おお。その手があったか。 しかしOnClickは余計じゃないか? > ie.navigate("javascript:this.execCGI(1);")
145 名前:141 [2010/01/21(木) 00:41:19 ID:BYisD/DI0] >>143 様、 >>144 様、 う、動いたぁ!ログインボタンが押せたよぉ! こんなに早いレスがもらえるなんて、感謝感激です。 >>142 何を言ってるんだかよくわからんかった。
146 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/21(木) 04:34:42 ID:el+zjomK0] IESetData(IE,True,"","ログイン") この場合↑を使うとすると引数入れる方法ある?
147 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/21(木) 09:17:09 ID:prTvVb6F0] >>141 いまさらだけど、 ie.document.forms(0).elements(6).value = "ryno" //利用ナンバー ie.document.forms(0).elements(7).value = "passwd" //パスワード ie.document.forms(0).elements(8).click //ログインボタンを押す こっちのほうが安定してるよ。たぶん。 こいつを使って調べた↓ nem.symphonic-net.com/uwsct/HTMLStarkNaked.uws.txt
148 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/21(木) 10:50:10 ID:qBCWT2U/0] >>147 141じゃないけど親切な人や
149 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/21(木) 12:50:21 ID:UbXqB2Oa0] >>147 おーすげー でもItemsはころころ変わる可能性があるからな。 やっぱり名前が使えるところは名前を使って ログインボタンだけループでまわすべきだろう。 まあログインページの変更はあまり頻繁には起きないけども。
150 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/21(木) 12:54:41 ID:UbXqB2Oa0] >>146 // Web上(IE)に値を設定 戻値 = IESETDATA( IE, 値, Name, [Value, 番号] ) IE, IE, 値, True, Name, "", [Value, "ログイン" 番号] ) ほらここ空いてる
151 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/22(金) 23:14:18 ID:5GAs0GCP0] >>149 名前を使いたいなら ie.document.all.tags("input").ryno.value = "なんたらかんたら" ie.document.all.tags("input").passwd.value = "うんたらかんがら" または ie.document.forms(0).elements("ryno").value = "なんたら" ie.document.forms(0).elements("passwd").value = "うんたら" でおk。
152 名前:141 [2010/01/23(土) 00:13:09 ID:ER0elP5I0] 再度質問に来たんですけど、さらなるレスが付いていてビックリでございます。 いただいたレスを再度学習してから、また質問に来ることにします。 本当に、ありがとうございます。
153 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/27(水) 09:06:38 ID:bTNIzlWA0] UWSCで、関数の中で他の関数を使用することって可能ですか?
154 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/27(水) 09:19:46 ID:bTNIzlWA0] すいません、ちょっと勘違いしてました ↑は忘れてください・・・
155 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/28(木) 01:46:50 ID:vVvESZ+G0] シェア版を試しにインスコしようとすると、トロイとしてはじかれる。なにこれ?
156 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/28(木) 01:53:42 ID:khCmP7150] >>155 なんだろうね。 OSとかウィルスソフトとか現象とかを本家掲示板に報告した方がいいんじゃね?
157 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/29(金) 11:44:21 ID:PN5QGmYZ0] IEのイベント使ってたらUWSCがメモリ不足やらランダムに型が違うとか DLLでアクセス違反とかでまくりで訳が分からんかったけど、 BeforeNavigate2をNavigateComplete2に変更したらぱったりエラーも出なくなったよ。 以前NewWindow2でキャンセルフラグ立ててなくて同様にエラーが出まくってたんだけど、 BeforeNavigate2も同様にキャンセルフラグを処理しなきゃいけなくて、 もしかしたらフラグを間違ってセットしてたのかもしれない。 NavigateComplete2ならフラグがないからどっちセットするかで悩まなくて言いし、 なによりBeforeNavigate2のイベント発生時点ではIEオブジェクトとかプロパティが無効になってて 待ちループですらエラーになる状態で、回避するのに苦労したんだけど、そういう処理も必要なくなった。 っていうか、イベントの使い方を間違っていたのかも。
158 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/31(日) 21:49:27 ID:QYiiO/FR0] んでスクリプトは一応完成したけどどーも無用の物を作っちゃったらしくて評判が悪かった。 だからこんなのつくりました的なものを紹介だけしときますね。 自動ダウンロードスクリプト公開中 ttp://www1.axfc.net/uploader/Sc/so/77860 7-zip32.dllで圧縮メソッドがBzip2で圧縮してたから Windows標準では解凍できないようです。 動画ページに直リンがあったりするけど、てきとーな日本語入れてあったりするので使える保証がなく、 直リンにnavigateするとなぜかバイナリファイルをブラウザで開いたりするサイトが多くてやっぱり使える保証がなく、 かといってftpでダウンロードするAPIではいつ終わるとも知れず、 結局自分でリンク貼って右クリでダウンロードするしかなくて、 だけど万が一もあるので入力禁止措置も取ってないのでちょっとマウス持ってるとすぐ止まる。 スレッドで5秒後に確実に解除すればよさそうなんだけど メインループが終了したときはスレッドも巻き添え食っちゃうから確実ではないし。 いや、スクリプトが終われば復帰できるのかな? んで、動画サイトが2次サイトだから画質が悪くなっちゃってるのが多くて ダウンロードしてももったいなかったりする。
159 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/31(日) 23:47:43 ID:Q/Gu8X0B0] >>158 っ国語力とプログラミング力の関係 解説編 ttp://jibun.atmarkit.co.jp/ljibun01/rensai/genius/04/01.html
160 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/01(月) 00:52:02 ID:2o/R36uY0] RecIEを起動させて 記録→アドレス入力→ok でサイトに飛ぼうとすると Racie L20が存在しません ってダイアログが出てきて先に進めないんだけど同じ症状出たことある人いる? 4.4cからだったと思うけどアップデートしたら途端に動かなくなった
161 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/01(月) 00:55:45 ID:Zow1+JjM0] >>159 ああ、日本語って難しいね。 短く区切って書くと、悪口で埋め尽くされてしまっていたから 無理やりでもつないでしまう癖がついちゃったんだ。 これでも学生時代は国語はほぼ満点でやってきたんだけどね。 敬語だけはいまいち理解できんかったけど。 敬語ってややこしいのに授業時間が少なすぎ。 正しい敬語を使う環境が身近にないから、練習すればするほどおかしくなっていく。(福岡県の筑豊出身) これでも親は地元企業の課長〜次長だったりする。 今度は短く区切りすぎ?
162 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/01(月) 01:03:42 ID:Zow1+JjM0] >>160 有料の機能だし本家で聞いたほうがいいと思うよ。 OSとIEと、UWSCの問題なかったバージョンとかも必要だと思う。 差し支えなければそのアドレスもね。 ところで、RacieじゃなくてRecieだよね?
163 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/01(月) 01:26:10 ID:Zow1+JjM0] >>159 そういえば俺の後輩のやる気のないプログラマは 「俺文系なのにプログラマやらされてるんです。 文系だからさっぱり分かりません。」ってゆってた。 「ああそう。」としか答えようがないっつーの。
164 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/01(月) 18:20:46 ID:WMRBoQc30] 頭悪そうだなお前
165 名前:名無しさん@お腹いっぱい。 [2010/02/05(金) 18:13:12 ID:hEkLWXs20] HTMLソースを取得して差異があればmsgboxが出る程度の 簡易webチェッカーのようなものを作ろうと思ってるのですが 窓を非アクティブのままwebを更新する(戻るとか進むとかも)方法を教えて下さい IE.Navigate(IE.LocationURL) や IE.Navigate(URL) も試したのですが ↓のようなサイトでは思うように更新後のソースが取得できませんでした ttp://www7.big.or.jp/~fujiko/php/time_get.php 仕方ないので今は窓を開いて CTRLWIN(id, ACTIVATE) KBD(VK_F5) とか CLKITEM(id, "更新", CLK_ACC) で更新してるのですが、非アクティブで実行する方法を教えて下さい
166 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/05(金) 20:04:44 ID:MmS/cyj/0] winhttpかmsxml2を使う
167 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/05(金) 20:09:56 ID:vxp7+xcP0] >>165 navigateしたあとちゃんと待ちループまわさないと駄目です。 また、nabigateが動き出す前に待ちループに入ってしまうと素通りしてしまうので、 それまでは待ちループに入らないようにする必要もあります。 例1) IE.Navigate(url) sleep(3) REPEAT; sleep(0.1); UNTIL !IE.busy AND IE.readystate = 4 例2) timeout = 3 IE.Navigate(url) while !IE.busy AND IE.readystate = 4 sleep(0.1); timeout = timeout - 0.1 if timeout < 0 then break wend REPEAT; sleep(0.1); UNTIL !IE.busy AND IE.readystate = 4 例2の場合はtimeoutがないと、一瞬で表示が完了した場合に永久ループになります。 navigateの他にRefreshがあり、こちらは引数がいらないので手軽です。 中止 Stop 更新 Refresh 前に進む GoForward 戻る GoBack Stopはページが不完全になるので、DOMアクセスでCOMエラーが発生します。 これはStop→Refreshとした場合でも起こるので注意が必要。 WebBrowserコントロールでタブブラウザを作る(.netですが一部ソースは参考になると思います。) ttp://codezine.jp/article/detail/659?p=3
168 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/05(金) 20:57:44 ID:hEkLWXs20] >>166 レスありがとうございます 一応 CreateOLEObj("MSXML2.XMLhttp") も試していたのですが 思うような結果が得られず四苦八苦していたのでした >>167 レス感謝です >nabigateが動き出す前に待ちループに入ってしまうと素通り になっていたようでした 結果的には IE.Refresh() で期待通りの結果が得られました 今から進む、戻るも試してきます ありがとうございました
169 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/06(土) 14:30:56 ID:bC6Cwg/o0] 文字列A xxxxx 文字列B ある文章の中で、特定の文字列AとBに挟まれた「xxxxx」という文字列を抜き出すにはどうするのが スマートですかね? アドバイスください。
170 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/06(土) 14:50:08 ID:IY8b0Hns0] >>169 文字列にもよるけど、 とりあえずBETWEENSTRていうのがある。 戻値 = BETWEENSTR( 文字列, 文字列A, 文字列B, [n個目, 数え方フラグ] ) ところで、 ;っていうのはどういう理由で入れてたんですか?
171 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/06(土) 14:52:23 ID:IY8b0Hns0] 訂正 ;の部分は & # 1 6 0 ;
172 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/06(土) 15:20:55 ID:MuLbdSUi0] >>168 追記 GoForward も GoBack も順調に動きました 改めまして感謝です >>171 自分(PC専ブラ)には見えませんが、&#160はhtmlの半角空白みたいです BetweenStrの話題があったので自分も更に質問です HTMLソースの 111~ 222~ 333yyy のような文字列から 333 を抜きたい場合 BetweenStr(略, "xxx", "yyy", n) //yyyの前の文字を抜きたい xxxとnの部分に何を入れれば良いのかが分かりません 宜しければ参考までに教えて下さい
173 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/06(土) 15:30:15 ID:MuLbdSUi0] 説明が不十分だと思ったので>>172 追記 正確には 111~~<br> 222~~<br> 333yyy という文字列で、"<br>", "yyy", 1 とか設定しても 222〜333まで抜き出してしまってうまくいかないのです 今は 変数1=(略, "<br>", "yy", 1) 変数2=(変数1, "<br>", "y", 1) と複数段階に分けて書いてるのですが、これが簡潔に書けるなら知りたいな、と 宜しくお願い致します
174 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/06(土) 15:47:36 ID:IY8b0Hns0] >>173 ( マイナス値で指定すると後ろからサーチ) BetweenStr(略, "<br>", "yy", -1) これは試してみました? > これが簡潔に書けるなら 手順が複雑にはなりますが、正規表現ライブラリを使えば 行頭(^)+不特定文字列(.*)+”yyy”で表現できる場合があります。 <br>のあとに改行コードが入っているならですが。 スクリプトをすっきりさせたいと言うことなら、自作関数に置き換えるとかでもいいと思います。
175 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/06(土) 17:07:22 ID:MuLbdSUi0] >>174 マイナス値を使っても一発で目的の文字列に到着しないんです 一行で簡単に書ければ....と思ったのですが、諦めます 正規表現は、自分にはまだ早すぎる(理解できてない)ので もう少し勉強してから挑戦してみようと思います ありがとうございました
176 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/06(土) 17:42:47 ID:bC6Cwg/o0] >>170 これは便利ですね。簡単にできました。どうも有り難うございました。
177 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/06(土) 20:30:18 ID:IY8b0Hns0] >>175 どうせならTOKEN使った関数を自作した方がスマートですよ。 こんな感じで。動かしてないので動作は保障できませんが。 function GetStrForward( kword ) result = "" while true str = token( "<#CR>", str, true ) if ! length( str ) then break // trueを外していると、途中で抜ける場合がある if ! pos( kword, str ) then continue // キーワードが見つかった場合、その前方の文字列を返す。 result = copy( str, 1, pos( kword, str ) - 1 ) exit wend fend BetweenStrを何度か実行するのって、長いソースだとそーとー実行時間の無駄だと思うんです。 だから、キーワードを含む行をまず見つけて、その1行から切り出す方法を考えた方がいいかなと。 tokenの区切りが文字列で指定可能ならもーちょっと使えるんですけど・・・ HTMLの場合はDOMを駆使するともっと効率的にアクセスできる場合もあるから、 先にDOMで絞り込めないかを考えた方がいいかもしれません。 確実に抽出できるならHTML全体からとった方が短くかけるかもしれませんけど。
178 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/06(土) 21:25:28 ID:MuLbdSUi0] >>177 あ、ありがとうございます 例まで書いていただいて非常に嬉しいのですがハードル高いっす 残念ながらtoken、function、DOMやらの文字が何一つ理解できません 精進して出直してきます、でも有り難う
179 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/11(木) 02:46:55 ID:yrYtb4hB0] 失礼します。 キー同時押しのスクプリトご存知の方おしえていただけませんか よろしくお願いします
180 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/11(木) 11:48:29 ID:KutBFNeQ0] kbd(vk_shift,down) kbd(vk_1,down,30) kbd(vk_1,up,30) kbd(vk_esc,up)
181 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/11(木) 11:52:43 ID:KutBFNeQ0] なんかちょっとしくってた
182 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/12(金) 04:04:08 ID:9YYIHyOz0] >>179 // ショートカットキーの実行 SCKEY( ID, キー, [キー, キー, キー, ...] )
183 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/13(土) 01:06:22 ID:gvQMSvHV0] >>180 >>182 お返事ありがとうございます。 参考にさせていただきます。
184 名前:名無しさん@お腹いっぱい。 [2010/02/13(土) 02:00:24 ID:qgx2boSW0] 失礼いたします。 uwscにて実行したいことがあります。 画面上に出ている英数字画像の入力をしたいのですが うまく入力してくれません。 12桁の英数字が表示され、左の英数字から順番に入力して欲しいのですが、 UWSファイルに書き込んだ通りの順番で入力してしまいます。 UWSファイルには1,2,・・・〜8,9,0,A,B,・・・〜Y,Zの順番で書き込んでおります。 「8 B A Z 9 0 Z Y A B C D」と入力したいのに、 「8 9 0 A A B B C D Y Z Z」と入力してしまいます。 助言だけでも聞けたらと思いレスいたしました。 宜しければお力添えをお願いいたします。
185 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/13(土) 02:02:19 ID:qgx2boSW0] sage忘れまして申し訳ないです。 久しぶりの2chでの書き込みですっかり忘れてました。 そして連レス申し訳ありません。
186 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/13(土) 04:38:30 ID:eUy/fvfx0] >>184 ループをこんな風にしてるんでしょ? 例1) DIM data="ABCDEFG" for i = 1 to length(data) copy(data, i , 1) ←この文字があるかどうか探している KBD() ←見つかったらすぐ入力 nest 文字の判定はやっぱり↑みたいにしないといけないけど 文字が見つかったらその座標を記録していくべきでしょ。 で、座標のX成分でソートして小さい方から入力する。 DIM KEYCAR[8] ←これに見つかった文字の文字コードをセット DIM KEYX[8] ←これに見つかった文字の座標をセット 文字が一通りスキャンできたらKEYXとKEYCARを並べ替え、 KEYXの小さいものからKEYCARを入力していく。 ソートは件数も少ないし、バブルソートがシンプルでいいと思いますよ。
187 名前:名無しさん@お腹いっぱい。 [2010/02/13(土) 07:59:27 ID:YuKBFn4V0] (´-`).。oO(nest・・・・・)
188 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/13(土) 13:12:06 ID:qgx2boSW0] >>186 さんありがとうございます。 >座標のX成分でソートして小さい方から入力する。 >DIM KEYCAR[8] ←これに見つかった文字の文字コードをセット >DIM KEYX[8] ←これに見つかった文字の座標をセット >文字が一通りスキャンできたらKEYXとKEYCARを並べ替え、 >KEYXの小さいものからKEYCARを入力していく。 座標のX成分でソートとはどういったことをすればX成分を検出できるのでしょうか? 無知過ぎる私にはやはり早いのでしょうか。。
189 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/13(土) 17:44:34 ID:hcaqZS6v0] uwscを使用してるんですが [K]キーを押すのではなく[K]キーを押し続けるにはいったいどうすればいいんでしょうか 情報くださいorz
190 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/13(土) 19:03:56 ID:eUy/fvfx0] >>188 もしかしてCHKIMG()を全体にかけてるんですか? だとしても >TRUE の場合は見つかった座標を特殊変数 G_IMG_X、 G_IMG_Y に格納 とあるので、G_IMG_XをKEYXの配列に格納していくだけですよ。 他の方法で画像を解析してる場合でも、座標くらい取れるでしょう。 たいていは文字は読みにくいように加工されているからCHKIMG()では対処できないんですけどね。 >>189 > [K]キーを押し続けるには KBD(VK_K, DOWN)
191 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/13(土) 23:46:03 ID:qgx2boSW0] >>190 さん CHKIMGの構文くらいしか理解出来ていないほどの初心者です、、涙 理解しきれていない部分が多々あるのでなんともいえないのですが、、 やはり>>186 の構文で行った方が確実なのでしょうか? もし宜しければ>>186 の内容を分かりやすく説明していただけたらと、涙 本当に初心者過ぎて申し訳ないです。 ここで詳しく説明できないような内容でございましたら、 捨てアド用意しておりますので、そちらでも構いません。 最初はggrksとか書かれるとは思いましたが、 ここまでご親切にお教えしてもらえると嬉しくて仕方ありません><
192 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/14(日) 00:12:51 ID:4sAlpgnt0] >>191 > やはり>>186 の構文で行った方が確実なのでしょうか? いや、chkimgでいいです。 copyで文字列から取り出したのはあんまりいい方法じゃなかったです。 ただ、chkimgしたら座標を取り出さないと並べ替えできませんよと。 本来手動で行うべきところを自動化するのはあんまりよろしくないので これ以上具体的な解説はやめときます。 ソートとかの部分的な話なら別にいいけど。 僕もユーザー登録とか半自動化したけど、画像読み取りは難しいから そこだけ入力待ちとかにしてますよ。
193 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/14(日) 00:22:56 ID:XhJVEd4Q0] >>192 さんありがとうございます。 ソートとはクリップボードの文字列のソートの事でしょうか? どういう効果で、どのように使用するのか教えていただいたら光栄です。
194 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/14(日) 00:49:51 ID:4sAlpgnt0] >>193 えーと、そこはぐぐって欲しかったですね。 ソートとは並べ替えのことです。 ttp://su10.sgu.ac.jp/~morita/Seminar/6thStudent/entani/sort/bubble/bubble.html 関数化してちゃんとできてるかテストしてから組み込んだ方がいいと思います。
195 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/14(日) 18:50:13 ID:7ySdGB3b0] Aの操作を○回実行した後にBの操作を実行し 最初に戻るという操作はどうしたら出来ますか?
196 名前:名無しさん@お腹いっぱい。 [2010/02/14(日) 19:20:34 ID:nB/iMQXP0] >>195 While(True) For i = 1 To ○ Aの操作 Next Bの操作 Wend
197 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/15(月) 01:51:46 ID:fbzctM220] UWSC Ver4.6 umiumi 64bit環境での高レベル記録、CPUUSERATE関数の対応 KINDOFOS関数にてOSが64bitかのチェックをできるようにした STATUS関数にてアプリが64bitかのチェックをできるようにした VARTYPE 関数にて型変更をできるようにした ROUND関数にて丸め位置を指定できるようにした GETSTR関数にてマウス移動オプションを付けた CHKIMG 関数のヒット数チェックにてヒットした位置情報を配列に格納するようにした 多重のCALL文にてファイルのカレントを識別してなかったのを修正 COM のBoolean型を数値型に変換していたのを修正 設定画面が出ている時にはスケジュールが走らないように修正 Pro版: CREATEFORM にてIFrameが使われた時にsubmitボタンの処理ができなかったのを修正 UDebug: 64bit環境にて Help->"Folder with .INI"で間違ったフォルダを開くのを修正 DATE:2010/2/14(Sun) 01:29 No.2862 Windows 7 64bit環境での動作について umiumi 32bitアプリに対しては問題ありませんが、64bitアプリに対しては以下の制限があります CLKITEM、GETITEM関数の種別にて ツリービュー, リストビュー, タブ指定は無効 (替わりに ACC指定を利用して下さい) GETSLCTLST関数にてツリービュー, リストビューは無効 POSACC関数にて ACC_API(APIトラップ) 指定は無効 STATUS関数にて ST_PATH(EXEパス取得) 指定は無効 64bitの DLLを呼び出す事はできません また、SOUND 関数にて"BEEP"指定時は PC内部スピーカではなく、通常のサウンド出力になる