1 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/16(月) 07:57:49 ID:+HI9MOeK0] Windowsを自動化させるツールUWSC。 ttp://www.h7.dion.ne.jp/~umiumi/ uwsc使いのみなさま、マターリ己のスクリプトを晒しましょ。 前スレ 自動化ツールuwsc使いよ集まれ2 pc11.2ch.net/test/read.cgi/software/1156416884/
830 名前:名無しさん@お腹いっぱい。 [2009/02/02(月) 14:30:06 ID:yH09tKlS0] >>829 有り難う御座います。 ですが実行されませんでした フルパスで""も付けたんですが… OSはvistaなんですが関係無いですよね…
831 名前:名無しさん@お腹いっぱい。 [2009/02/02(月) 14:49:49 ID:cpjbDFRd0] >>830 ショートカットのプロパティにリンク先っていうのがあるでしょ。 それをコマンドラインに入力したらいいんだけど。 コマンドプロンプトを開いて実行するか、 ファイル名を指定して実行(Vistaにあるかは知らないが)で、実行できるか試してみて。
832 名前:名無しさん@お腹いっぱい。 [2009/02/02(月) 15:05:20 ID:yH09tKlS0] >>831 有り難う御座います。 先ほどuwscで動かなかったので、 コマンドプロントからも直接やってみましたが、 vbsは実行されてませんでした orz
833 名前:rpaawnaw mailto:sgixjd@qloaau.com [2009/02/02(月) 15:07:51 ID:2TLMPBOD0] qFqgve <a href="lycvakiqmpbn.com/ ">lycvakiqmpbn</a>, [url=gxsxjoosngmt.com/]gxsxjoosngmt[/url], [link=ifsiyjjscezd.com/]ifsiyjjscezd[/link], piuboesbpern.com/
834 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/02(月) 15:11:57 ID:pdMh/tE90] >>832 Vistaでも問題なくできるぞ どんなエラーメッセージが出る?
835 名前:名無しさん@お腹いっぱい。 [2009/02/02(月) 15:21:46 ID:yH09tKlS0] >>834 いえエラーは出ないんですが、 コマンドプロンプトに(フルパス).vbsをペーストしてEnterを押しても 動いた形跡が無いんですよね・・・ ただbatファイルをウインドウ非表示で実行させるだけの簡単な物なんですが それとも何か必要な物が欠けているんでしょうか 普通にクリックしたときは動くんですが・・・
836 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/02(月) 15:28:21 ID:PVHBkFFR0] >>835 vbsのほうにメッセージボックスを1行入れてみたら?
837 名前:名無しさん@お腹いっぱい。 [2009/02/02(月) 15:49:30 ID:yH09tKlS0] >>836 有り難う御座います。 色々調べてみて今、解決出来ました。 お騒がせしました。
838 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/02(月) 19:05:09 ID:Os9uDG+70] できれば、何が原因だったか教えてくれると有り難いとか思ってるのは俺だけかな? 初心者だからどういう時にそうなるのか気になる。
839 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/02(月) 20:36:43 ID:bbkYkSZI0] ブラウザを起動するときに最小化できませんか? 検索では、UWSC.exeのあるフォルダのUWSC.INIをメモ帳で開き、 StopForm=0 を StopForm=1 に変更して保存します。 とあったのですが、iniファイルがなく設定できませんでした。 キーボードからオルトとスペース、Nキーで最小化できるので キー操作のスクリプトからできることはできるみたいですが 一回、表示されてからの対応になるのでできれば起動時から できたらいいのですが。
840 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/02(月) 21:07:48 ID:yMTVVraI0] comでxmlhttpを使え。解決する。 他にも色々あるが、まぁ、とりあえず使ってみろ。
841 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/03(火) 03:38:57 ID:eeztqI130] >>839 UWSC.INI の StopForm キーの値は スクリプト再生中に現れるフォームウィンドウを 表示するかしないかってやつじゃなかった? 最小化でアプリ起動ってのは API 関数の ShellExecute() を使う HINSTANCE ShellExecute( HWND hwnd, // 親ウィンドウのハンドル LPCTSTR lpVerb, // 操作 LPCTSTR lpFile, // 操作対象のファイル LPCTSTR lpParameters, // 操作のパラメータ LPCTSTR lpDirectory, // 既定のディレクトリ INT nShowCmd // 表示状態 ); ブラウザのパスは適宜変更してください DEF_DLL ShellExecuteA(hwnd, string, string, string, string, int): dword: shell32.dll CONST SW_SHOWMINIMIZED = 2 IFB ShellExecuteA(NULL, "open", "C:\Program Files\Internet Explorer\iexplore.exe", NULL, NULL, SW_SHOWMINIMIZED) < 32 THEN MSGBOX("実行に失敗しました") ENDIF
842 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/03(火) 03:52:05 ID:eeztqI130] >>841 すみません、比較式を間違えました 失敗時は 32 以下の値を返すので、正しくは以下です IFB ShellExecuteA(NULL, "open", "C:\Program Files\Internet Explorer\iexplore.exe", NULL, NULL, SW_SHOWMINIMIZED) <= 32 THEN MSGBOX("実行に失敗しました") ENDIF
843 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/03(火) 09:29:53 ID:9ClBsfHO0] API 関数とかしりませんでした。 実際やってみたらブラウザは機動できました。 しかし、そこからの動作がされません。 指定のアドレスに移動するにはどうしたらいいのでしょうか? DEF_DLL ShellExecuteA(hwnd, string, string, string, string, int): dword: shell32.dll CONST SW_SHOWMINIMIZED = 2 IFB ShellExecuteA(NULL, "open", "C:\Program Files\Internet Explorer\iexplore.exe", NULL, NULL, SW_SHOWMINIMIZED) <= 32 THEN MSGBOX("実行に失敗しました") ENDIF IE = getactiveoleobj("internetexplorer.application") IE.Visible = True IE.Navigate("URL") 上記のような感じでやっています。アドバイスお願いします。
844 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/03(火) 21:49:12 ID:eeztqI130] >>843 起動と同時に URL に移動するには ShellExecute() の第 4 引数に URL を渡します なお、ProgID は大文字小文字を区別するので 正しくは『InternetExplorer.Application』です また、以下のコードでも同じことができます OPTION EXPLICIT DIM url = "www.2ch.net/ " DIM ie = CREATEOLEOBJ("InternetExplorer.Application") CTRLWIN(HNDTOID(ie.HWND), MIN) ie.Visible = True ie.Navigate(url)
845 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/04(水) 12:53:58 ID:m6en7Q5I0] uwscでIEを開いた後、そのIEで開いたHP内の文字データなどを EXCELのセルに代入することはできますでしょうか?
846 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/04(水) 13:05:01 ID:tXqKlnWn0] できます
847 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/04(水) 13:20:25 ID:m6en7Q5I0] ありがとうございます なんとかやってみます
848 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/04(水) 19:46:29 ID:MfK5WOxL0] >>844 勉強になります。ヘルプみたり過去の質問検索してみましたが、 あまり、APIとかのことが載ってないのね・・・
849 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/04(水) 23:12:09 ID:N1AZKeZ50] >>848 MSDN見たほうが手っ取り早い事が多いからなぁ?
850 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/06(金) 12:59:57 ID:hPEtxwon0] A = "●●"と言った感じのものを20ぐらいあるとしてそれを順に 送信しようと頑張っています。ちなみに一個だけならなんとかなる のですが、複数だとどうしてもコードがいっぱいになってしまします。 IESetData(IE,A,"kakikaki") id = getid("internet explorer") clkitem(id,"ボタン",CLK_ACC,CLK_BACK) sleep(15) これが、そのコードなのですが、Aのところに複数の文字を順に設定 できたらと思っています。よろしくおねがいします。
851 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/06(金) 15:36:29 ID:q6mgGLtH0] A[0] = "●●" A[1] = "○○" FOR i = 0 TO 20 - 1 IESetData(IE,A[i],"kakikaki") id = getid("internet explorer") clkitem(id,"ボタン",CLK_ACC,CLK_BACK) sleep(15) NEXT これでいいじゃん
852 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/06(金) 16:05:23 ID:BBz1+Wne0] レスどうも。m(_ _)m 実際に実行してみたら下記のようなエラーがでました。 Uスクリプト: 変数: A 配列をオーバーしてます 8行目:A[1] = "●●" こんなエラーがでます。A[0]は、大丈夫みたいです。 なんでだろう?なにかわかりましたら詳細お願いします。
853 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/06(金) 16:32:11 ID:1eXzPAIO0] dim a[19]= "●●","○○","△△","▲▲",・・・・・(20個記述) "とりあえず1から10まで聞いとけ"という性格が羨ましいと思うようになったこの頃。('A`)
854 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/06(金) 17:44:09 ID:BBz1+Wne0] うまくいきました。m(_ _)m なぜ、前にやつはエラーがでたのかしら? 原因が分からない。
855 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/06(金) 18:42:36 ID:q6mgGLtH0] 変数の定義、宣言と 変数への値の代入という 二つの違いを理解してないから
856 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/07(土) 03:18:07 ID:vXpPMDOu0] 前から疑問だったけど、聞けなかったこと。 >>841 のshellexecuteのnShowCmd。msdn等を見ると記述順番は SW_HIDE, SW_MAXIMIZE, SW_MINIMIZE, SW_SHOW ・・・ で順番違うじゃない? この定数はどこで判別するんでしょ? どなたか解説してくれないかな…
857 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/07(土) 09:37:19 ID:xlfhJ7RV0] >>856 Windows Platform SDK の WinUser.h で定義されてます ドキュメントの値は、記号定数名でソートされてるようです CONST SW_HIDE = 0 CONST SW_MAXIMIZE = 3 CONST SW_MINIMIZE = 6 CONST SW_RESTORE = 9 CONST SW_SHOW = 5 CONST SW_SHOWDEFAULT = 10 CONST SW_SHOWMAXIMIZED = 3 CONST SW_SHOWMINIMIZED = 2 CONST SW_SHOWMINNOACTIVE = 7 CONST SW_SHOWNA = 8 CONST SW_SHOWNOACTIVATE = 4 CONST SW_SHOWNORMAL = 1
858 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/07(土) 11:36:45 ID:l5adthQH0] >>857 回答ありがとう!見つけられました。 これ、目的の記述部分を捜すのは適当な属性値をGrepで捜すくらい しか思いつかなかったのですが、(ちゃんと順を追ってじゃなく、 あくまでdef_dllのためだけという意味)他に良い方法ありますでしょうか? 重ね重ねで恐縮ですが、もし知恵があれば教えてくださいませ。
859 名前:名無しさん@お腹いっぱい。 [2009/02/07(土) 20:34:24 ID:TsGY9ahZ0] BMP画像(100x100)からUWSCを使ってRGB値をテキスト出力するにはどうすればよろしいでしょうか?
860 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/08(日) 00:47:32 ID:fB3ojcA60] 色情報を取得してそれをファイルに書き出せばいいのではないでしょうか
861 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/08(日) 07:22:53 ID:QoTANPZk0] >>858 大抵の IDE はシンボルの定義部にジャンプする機能があるけど 確認のためだけに起動するのは避けたいので 俺は grep してます
862 名前:858 mailto:sage [2009/02/08(日) 18:05:42 ID:iaalqOSe0] >>861 ナルホド〜。 ひとつ賢くなりました。多謝。
863 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/08(日) 22:31:33 ID:dNKbKAR9O] いくつかの画像のサンプルがあって、指定したウィンドウ内からその画像を書いた順番で探す。 合ったら処理抜け、なかったら次の画像探し 最終的にどれもなかったらまた処理抜けってのをがんばってやろうとしてるんだけどどーすりゃいいのかな いちいちifbで探してなかったらbreakみたいにやらんとダメ? もーちょいスマートにやれないかな
864 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/08(日) 23:45:58 ID:vASK790PO] 日本語でおk
865 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/08(日) 23:51:13 ID:SXOT3GUb0] 例えば test test1 test2 って画像があって どれかがヒットしたらその画像をクリックってことやらせたい場合 ifb chkimg (test.bmp) = true then mmv(g_img_x, g_img_y) sleep(1) endif ifb chkimg (test1.bmp) = true then mmv(g_img_x, g_img_y) sleep(1) endif ifb chkimg (test2.bmp) = true then mmv(g_img_x, g_img_y) sleep(1) else break endif ↑よりもスマートってか効率的な書き方があるのかなってこと
866 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/08(日) 23:55:43 ID:3bfozRlh0] ifb chkimg (test.bmp) OR chkimg (test1.bmp) OR chkimg (test2.bmp) then mmv(g_img_x, g_img_y) sleep(1) endif
867 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/09(月) 00:20:04 ID:wdWGM0TOP] 日本語でおk こういう意味?私はスマートという日本語を知りません DIM bmp[]="test","test1","test2" for n=0 to length(bmp)-1 ifb chkimg(bmp[n]+".bmp") = true then mmv(g_img_x, g_img_y) sleep(1) break endif next
868 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/09(月) 00:34:17 ID:fwfzfodA0] 867のをかきかえてみると DIM bmp[5]="Garnet","Star sapphire","Topaz","Spinel","Emerald" for n=0 to length(bmp)-1 ifb chkimg(".\image\"bmp[n]+".bmp") = true then mmv(g_img_x, g_img_y) sleep(1) break endif next こうなったんだけど式違うって怒鳴られました・・・
869 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/09(月) 12:18:39 ID:wdWGM0TOP] パソコンに同情するわ
870 名前:名無しさん@お腹いっぱい。 [2009/02/09(月) 16:18:53 ID:5wLvS0Ft0] ".\image\"bmp[n]+".bmp" × ".\image\" + bmp[n] + ".bmp" ○ ちゃんとスペース入れないから間違うんだ
871 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/10(火) 14:57:33 ID:ldVPkdsr0] 特定の文字を含むアドレスを抽出しそれを順々に周っていくという のを作っています。 IE = CREATEOLEOBJ("InternetExplorer.Application") IE.visible = True IE.navigate("www.yahoo.co.jp ") REPEAT SLEEP(0.1) UNTIL !IE.BUSY AND IE.READYSTATE = 4 KAISU = IE.document.links.length FOR A = 0 TO (KAISU - 1) IFB POS("www. ●●[A]", IE.document.links[A].href) > 0 IE2 = GETACTIVEOLEOBJ("InternetExplorer.Application") IE2.visible = True IE2.navigate(IE.document.links[A].href) UNTIL !IE.BUSY AND IE.READYSTATE = 4 ENDIF NEXT IE.QUIT [A]のところは毎回違います。これでやると順々に周ってくれません。 フリーズさえしないもののページを読み込むのが終了せずそのままに なります。 実行したときには、"www. ●●[A]"←この部分はちゃんとしたアドレス になっています。
872 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/10(火) 16:02:10 ID:HCMc1CKn0] >>871 >IE2 = GETACTIVEOLEOBJ( これってIEを起動していないと、オブジェクトIEとオブジェクトIE2は同じものになるよね。 で、元のIEで他のページ開いちゃったら、IE.document.linksが無効になっちゃうんじゃないかな。 というか最初にとったIE.document.links.lengthとページが切り替わったあとのやつとでつじつまが合わなくなってちゃんと動かないはず。 特にUWSCのFOR分は、ループに入ったら回数固定だから、その辺が変動しないようにきっちりやらないと。
873 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/10(火) 16:11:49 ID:ldVPkdsr0] IE = CREATEOLEOBJ("InternetExplorer.Application") IE.visible = True IE.navigate("www.yahoo.co.jp ") REPEAT SLEEP(0.1) UNTIL !IE.BUSY AND IE.READYSTATE = 4 KAISU = IE.document.links.length FOR A = 0 TO (KAISU - 1) IFB POS("dailynews.yahoo.co.jp ", IE.document.links[A].href) > 0 IE2 = CREATEOLEOBJ("InternetExplorer.Application") IE2.visible = True IE2.navigate(IE.document.links[A].href) ENDIF NEXT IE.QUIT これが参考にしたソースなのですが、871は私が色々やってるやつです。 上記のソースだとそれぞれブラウザで開くということになってしまいます。 表示されたページで特定の語句が含まれるアドレスをゲットして それをもう一つ起動したブラウザで順に巡回するというのでもいいのですが。
874 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/10(火) 16:54:12 ID:HCMc1CKn0] >>873 2つ目をCreateしてれば問題ないけど、 1つ目に上書きするとだめなんですよ。 Getするということは、確率的に1つ目を取得することになります。 他の窓がない場合は100%1つ目の窓を取得します。 どうしても1つ目の窓でやりたければ、 Navigateする前にlinksを全部配列にコピーしておかないと駄目です。 ループすると次々に窓を起動するのでいやだということなら、 ループに入る前にあらかじめ2つ目をCreateしておけばいいんです。 そもそも参考にしたソースは実用的な動作じゃありません。 ただ、Navigateした後に待ちを入れていないので、スクリプトの動作は快適で安定するでしょう。
875 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/10(火) 17:15:37 ID:ldVPkdsr0] とりあえず >ループに入る前にあらかじめ2つ目をCreateしておけばいいんです。 この手法をお願いします。できれば配列にコピーというのもお願いします。
876 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/10(火) 17:54:36 ID:HCMc1CKn0] >>875 まずは2つ起動 IE = CREATEOLEOBJ("InternetExplorer.Application") IE.visible = True IE.navigate("www.yahoo.co.jp ") REPEAT SLEEP(0.1) UNTIL !IE.BUSY AND IE.READYSTATE = 4 IE2 = CREATEOLEOBJ("InternetExplorer.Application") IE2.visible = True KAISU = IE.document.links.length FOR A = 0 TO (KAISU - 1) IFB POS("www. ●●[A]", IE.document.links[A].href) > 0 Then IE2.navigate(IE.document.links[A].href) REPEAT SLEEP(0.1) UNTIL !IE2.BUSY AND IE2.READYSTATE = 4 ENDIF NEXT IE.QUIT IE2.QUIT if 〜 Then REPEAT 〜 UNTIL ThenとREPEATが抜けてました あと、IE2でNavigateしたのに待ちループではIEになってました。 インデント(頭の空白)入れないとそういうところのミスが発見できません。
877 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/10(火) 18:23:31 ID:ldVPkdsr0] 正直、わからないです。 質問が悪かったのかしら・・・ 1、指定ページに移動 2、特定の文字を含むアドレスをゲット 3、ゲットしたアドレスを順に表示(IE2でも可) この動作なんだけどなー。うーむ。
878 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/10(火) 18:43:10 ID:HCMc1CKn0] >>875 配列を使うやつ DIM リンク[]="ダミーデータ" IE = CREATEOLEOBJ("InternetExplorer.Application") IE.visible = True IE.navigate("www.yahoo.co.jp ") REPEAT SLEEP(0.1) UNTIL !IE.BUSY AND IE.READYSTATE = 4 KAISU = IE.document.links.length FOR A = 0 TO (KAISU - 1) IFB POS("www. ●●[A]", IE.document.links[A].href) > 0 Then リンク[length(リンク) - 1] = IE.document.links[A].href resize(リンク, length(リンク)) ENDIF NEXT KAISU = length(リンク) - 1 // 配列の最後尾は空欄 FOR A = 0 TO (KAISU - 1) IE.navigate(リンク[A]) REPEAT SLEEP(0.1) UNTIL !IE.BUSY AND IE.READYSTATE = 4 NEXT IE.QUIT
879 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/10(火) 18:51:38 ID:HCMc1CKn0] >>878 の補足 リンクの選別を最初のループでやってるので、2回目のループは無条件に処理できる。 ループ回数が違っているのも要チェック。 配列がちょっとややこしいやり方だけど、カウンタが2つ以上になってもややこしいのでこういうやり方してます。 リンク[length(リンク) - 1]は、リンクっていう配列の最後尾を意味します。 resize(リンク, length(リンク))は、配列を一つ増やします。 上記2行により、最後尾にデータを追加するたびに配列を増やし、常に最後尾をあけておきます。 ちなみに、最初に配列数を0にしておけばごみがでないように思われますが、 最小配列サイズが1なので、どうしてもごみが入ります。 また、最初の1回で隙間をなくそうとすると、ループの処理がおかしくなります。 >>877 おいおい 1、指定ページに移動 は、IE.Navigateだし 2、特定の文字を含むアドレスをゲット は、 POS("www. ●●", IE.document.links[A].href) > 0 の条件を満たすときの IE.document.links[A].href だし 3、ゲットしたアドレスを順に表示(IE2でも可) は、 ループの中でIE.Navigateですよ これ以上丁寧に教えるのは無理。 ヘルプとサンプルをじっくり見てください。 1行ずつ実行してみるのもいい手。 僕は実験のファイルが70くらいたまってる。
880 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/10(火) 20:47:55 ID:ldVPkdsr0] お手間をかけます。m(_ _)m 実際に実行してみたのですが、両方駄目でした。 エラーは出ませんが、最初のヤフーページが読み込み中になりそれ以後が進みません。 難しいわぁ〜('A`)
881 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/10(火) 21:20:46 ID:HCMc1CKn0] >>880 とりあえずそのままuwsファイルに書き込んで起動したら、IEは自動的に終了した。 読み込み中で止まるって? IEの設定の問題かな? >>876 のやつの POS("www. ●●", IE.document.links[A].href) を POS(".html", IE.document.links[A].href) に書き換えたらばんばん開くんですけど。 POS(”www”, IE.document.links[A].href) で試したらファイルのダウンロードが動いてCOMエラーになったけどさ。 IEのバージョンでも違うのかもしれないけど、IE6ではしっかり動きました。 ちなみに僕が使ってるのはちょっと古いバージョン。 4.4.2.4のやつ
882 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/10(火) 23:15:08 ID:d1Cz2CKr0] ちと教えてくれい。 JscriptのSort関数ってUWSCで扱えるかしら? 連想配列のソートを使って凌いでしまったんだけど、 もし使えるようなら、そのうち、ちゃんとw悩んでみようかと思って…。
883 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/11(水) 00:17:02 ID:HuYbgfa/0] >>882 無理じゃね? そういうCOMオブジェクトがあるとも思えない。 DLLの場合は配列を渡せればいけるかもしれない。 と思ったけど、データベース使えばSortできるっぽいね。 テーブル作るのめんどくさそうだけど。
884 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/11(水) 01:07:21 ID:kWARHqJn0] >>883 レスサンクス。 時間掛けずにヨカッタw
885 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/13(金) 14:30:03 ID:3ZWIkmUk0] com操作から指定の同じ画像が2枚以上あるかどうかのチェックを するスクリプトを作っています。 <img alt="画像" src="/img/member/status_01.gif?1234414294" /> これがそのソースなのですが、altの画像の個数でもおkです。とにかく2個以上 あったらメッセージボックスで知らせてくれるみたいなのができたらと思っています。
886 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/13(金) 15:36:56 ID:yfzZRrrS0] そうですか
887 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/13(金) 16:29:22 ID:mUOb2ZH60] >>885 一致するやつの個数を数えるだけですよね
888 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/13(金) 16:31:07 ID:3ZWIkmUk0] >>887 画像があるかどうかというのはできると思うのですが、同じ画像が2枚あるかどうか となるとちょっと私のスキルでは難しいので訊いて見ました。 数を数えなおかつメッセージボックスなどで同じ画像が2つ以上あると知らせてくれる というものです。
889 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/13(金) 16:39:01 ID:mUOb2ZH60] >>888 cnt = 0 while 全部処理 ifb 画像一致 then cnt = cnt + 1 eneif wend ifb 2 <= cnt then MsgBox() endif
890 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/13(金) 17:35:13 ID:3ZWIkmUk0] メモリが・・・というエラーがでる。 今、他の手法でやってますが、IE.document.body.innerHTMLで 画像で使われてる文字の数というので判断しようとしています。 一つだけの場合、ちゃんとうまくいきました。しかし上記のやつをすこし 変えてやってみましたが駄目でした。
891 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/13(金) 17:43:52 ID:Ro94SGUQ0] 情報を小出しにするのはやめてください。 チャットじゃないので整理してまとめてから書き込んでください
892 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/13(金) 18:00:45 ID:3ZWIkmUk0] str = "UWSC" ifb pos(str, IE.document.body.innerHTML) then MsgBox("あるよ") endif 画像でエラーが出るので上記のやつで挑戦してます。 HTMLにUWSCという語句が2つ以上あればメッセージ ボックスにあるよと表示されるというものです。 ひとつでは成功しています。
893 名前:名無しさん@お腹いっぱい。 [2009/02/13(金) 18:30:14 ID:mUOb2ZH60] >>892 だから>>889 のとおりにやれよと。 str = "UWSC" cnt = 0 while 全部処理 ifb pos(str, IE.document.body.innerHTML) then cnt = cnt + 1 eneif wend ifb 2 <= cnt then MsgBox("あるよ") else MsgBox("ないよ") endif
894 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/13(金) 18:34:04 ID:3ZWIkmUk0] 全部処理についてkwskm(_ _)m
895 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/13(金) 18:40:58 ID:mUOb2ZH60] >>893 はミス str = "UWSC" ifb pos(str, IE.document.body.innerHTML, 2) then MsgBox("あるよ") eneif posは個数指定があるからループしなくてよかった。 ループする必要があるのは、前から順に1こずつ検索する場合。 >>894 全部とは、IE.document.body.innerHTMLの1文字目から最後まで処理する条件ってこと。 つまり、ループに入る前に src = IE.document.body.innerHTML として文字列を取得し、見つかるたびに読み進めていく。 tokn() を使って1行ずつ処理する場合とか IEGetSrc( IE, タグ名, [番号] ) で、番号を順に指定して取得する場合とか。 BodyのHTML全部取得してPosで個数まで数えるならループはいらない。
896 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/13(金) 18:44:29 ID:mUOb2ZH60] 見落とすかもしれないからもう一度書くけど、 pos()の3番目に2って指定すれば、2個目の位置を調べてくれる。 つまり、2個目があるかないかはPos()一回でわかる。 だからこれだけで完成 str = "UWSC" ifb pos(str, IE.document.body.innerHTML, 2) then MsgBox("あるよ") eneif
897 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/13(金) 18:45:01 ID:3ZWIkmUk0] 詳しい説明どうも。 しかし、みんなどこで勉強してるんですか? とりあえず、UWSCの掲示板とマクロテクニックという本、 検索などでやってますが、なかなか目的の回答にたどり つけないことも多く、時間ばかりがかかってしまいます。 このスクリプトだってもう何時間も費やしていますからね・・・
898 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/13(金) 19:03:33 ID:mUOb2ZH60] 大事なのは情報の探し方。 探すためのキーワードはマニュアルを順番に読んで探し出す。 UWSCは覚えることは少ないほうだし、ヘルプにまとまっているからヘルプを見る。 基本の使い方はサンプルコードを探す。 で、一つ一つの細かい使い方は、それを確認するためのサンプルコードを自分で書く。 公開されたツールを使うのも手。 あとはテクニックを覚えて応用していく。 if Pos() then で、存在チェックするというのもテクニックのひとつ。 Pos() は文字列の位置を返すだけだけど、取りうる値が1以上になるのでそういう使い方ができる。 if 文が、0か0以外という判断基準だからできることだけど、 それを知ってればほかの関数でもそういう使い方ができるかどうか判断できるわけ。
899 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/13(金) 19:14:00 ID:6zXjaVj00] 俺個人の意見だと、そういう書き方は好きじゃないし人にも勧めないな…
900 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/14(土) 03:00:48 ID:lbAzgdO20] >>897 とりあえずnotepad以外のエディタを用意して文字列ハイライト&F1key(大体のエディタがそうだと思う) でHelpファイルの項目にジャンプできるようにする。 その後、Helpファイルのサンプル、ネットに挙がっている短目のサンプルをコピペ。 エディタのショートカットKeyからサンプルを実行して結果を見たうえで、関数等を理解。 自分はこんな感じかな?
901 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/14(土) 09:57:37 ID:l4ICTSX40] >>899 でも、 flag = true if flag = true then みたいに書くと期待通りの動作にならないですお。 いや、DLLとかの外部プログラムで言うtrueが、自分の処理系でのtrueと一致するとは限らないというべきか。
902 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/14(土) 14:13:39 ID:uUjk6ugC0] >>901 IF flag <> 0 THEN MSGBOX("真") ELSE MSGBOX("偽")
903 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/14(土) 15:31:54 ID:kc2bS8a/0] >>900 私もかれこれ1年ぐらいやってますが、実際に自分でサンプルとかを やってみるのがいいみたいですね。本の内容とかを理解するより 結果そっちのほうが早かった。 あと、情報量が格段に違うので本はお勧めできない。価格が高いというのもあるけど。 本の内容なんかヘルプの1/100も載ってないしw掲示板での回答のほうが例としても すぐれてるよね。本は失敗したわぁ〜w
904 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/14(土) 15:46:35 ID:w6PpT+IB0] >>901 俺はUWSCなんて一度もさわったことはないが if flag = trueだと代入してないか? 他の割とよくある言語だと、 flag == trueとか flag eq trueとか そもそも条件比較せずに if flag thenって書き方だと思うが =が比較にも使えるんだったらすまぬ
905 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/14(土) 20:38:54 ID:+5xZKKxJ0] 複数開いてるIEでウィンドウ情報に「ソフトウェア」とか特定の文字が含まれている ウインドウを閉じたいのですが、選択して閉じることはできますか?
906 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/14(土) 20:42:00 ID:mPJsDYRZ0] >>904 普通に使えるお。 条件式では代入は行われないっス。 唯一Evalの代入で ':=' があるくらいで '==' とかはないっス。 おばかには有難いすw
907 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/14(土) 21:00:49 ID:qfzVhbRR0] >>905 できます
908 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/14(土) 21:08:42 ID:6gNN+jj+0] trueが1、falseが0という前提で if XXX then YYY を日本語で説明するとXXXが真の場合YYYだけど 内部仕様で0 or not 0 falseじゃなければ真だからって if POS() thenって書くのはどうかなと言っただけよ ちゃんと?if POS() > 0 thenと書いた方が分かりやすいじゃんってこと if flag = trueとかはまた別な話、if POS() = true then と書けと言ってる訳じゃないし 2以上の値が返ってきたら、true(1)ではないんだから。
909 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/14(土) 22:24:08 ID:oEG6WUs+P] なるほど ヘルプを文字通りに解釈すればIF文は真偽をチェックするのであって それと0チェックは等価ではないという事か (実際は0と0以外のチェックだろうけど) C言語にどっぷり漬かった脳なので>>898 が言っているような 書き方のほうが理解しやすく感じてしまった
910 名前:905 mailto:sage [2009/02/14(土) 22:56:30 ID:+5xZKKxJ0] 事故解決しました。 しかし、次の問題が。ソースから <!-- △△△ --> 複数のアドレス <!-- ◇◇◇ --> このようなソースがあった場合、三角から四角までの間にある複数アドレスを ゲットして一個ずつ開いていくというのはできますか? ちなみに間になければ似たようなアドレスは開けています。上でも書きましたが 改めてソースを書いときます。 IE = CREATEOLEOBJ("InternetExplorer.Application") IE.visible = True IE.navigate("www.yahoo.co.jp ") REPEAT SLEEP(0.1) UNTIL !IE.BUSY AND IE.READYSTATE = 4 KAISU = IE.document.links.length FOR A = 0 TO (KAISU - 1) IFB POS("dailynews.yahoo.co.jp ", IE.document.links[A].href) > 0 IE2 = CREATEOLEOBJ("InternetExplorer.Application") IE2.visible = True IE2.navigate(IE.document.links[A].href) ENDIF NEXT IE.QUIT 上記のソースでページ内にあるアドレスを順に開いていくことはできます。 何かわかりましたらよろしくお願いします。m(_ _)m
911 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/15(日) 00:48:48 ID:48UC/FQI0] >>908 if flag = true とかいう書き方をしてると if POS() = true というバグを見落とすことになる。 flagにしたって、状態がOn/Offだけとは限らない。 ボタンは白黒が基本だけどグレーだってある。 拡張してグレーを入れるとき、 何も考えずに取得した状態を放り込んでるとバグが発生することになるが、 自分がいじってない場所に影響が出るとは考えにくいし。 なにより、取りうる値をいちいち調べないといけない if flag = true なんか使ってると手間が増えるだけ。
912 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/15(日) 01:18:42 ID:48UC/FQI0] >>910 <!-- △△△ -->と<!-- ◇◇◇ -->を除外ということならシンプルだけど <!-- △△△ -->と<!-- ◇◇◇ -->の間を処理するというのは、その処理基準が不適切と思われる。 ほかに手がなければしょうがないけど。 @ FOR A = 0 TO (KAISU - 1); start = A + 1; next // <!-- △△△ -->が出るまで空回り A FOR A = start TO (KAISU - 1); 処理; next // <!-- ◇◇◇ -->が出るまで処理 @で空回りした回数をstart にセットして、Aでstartから再開すればいい。 <!-- △△△ -->が一度も出てこなかった場合、startにKAISUが入るので、多分Aは素通りする。 IE = CREATEOLEOBJ("InternetExplorer.Application") IE.visible = True IE.navigate("www.yahoo.co.jp ") REPEAT SLEEP(0.1) UNTIL !IE.BUSY AND IE.READYSTATE = 4 KAISU = IE.document.links.length FOR A = 0 TO (KAISU - 1) start = A + 1 IF 0 < POS("<!-- △△△ -->", IE.document.links[A].href) then break NEXT FOR A = start TO (KAISU - 1) IF 0 < POS("<!-- ◇◇◇ -->", IE.document.links[A].href) then break IFB 0 < POS("dailynews.yahoo.co.jp ", IE.document.links[A].href) then // まだインデントつけてないしThen抜けてるよ。 IE2 = CREATEOLEOBJ("InternetExplorer.Application") IE2.visible = True IE2.navigate(IE.document.links[A].href) ENDIF NEXT IE.QUIT
913 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/15(日) 01:38:43 ID:h4gEwsYs0] ちなみにその考えじゃ永遠に無理。
914 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/15(日) 01:53:42 ID:MQRSTk0U0] こんなことができたらいけるかもと考えました。 1、三角から四角までの文字列をゲット。 2、1の中のアドレスだけゲット。 3、上記のやつでアドレスを一個ずつ巡回。 1は、HTMLで見ると表示されてるやつです。コメントというのかな?
915 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/15(日) 04:44:36 ID:ZJEnRiKf0] >>911 > if flag = true とかいう書き方をしてると > if POS() = true というバグを見落とすことになる。 バグとか言う以前に、そんな書き方はしない。 思いつく時点でおかしい なんで、IFの条件文でTrue/FalseのBoolean型をチェックするのに その条件文の中でわざわざTrue/FalseのBoolean型と比較する必要があるのか 無意味な重複になってる
916 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/15(日) 06:36:23 ID:LdrnYZV60] flag = trueって書き方自体はおかしな事じゃないでしょ ifの条件式の一部にあってもおかしくはない ただ、単体で「if flag = true then」と書くと蛇足ということになる UWSC的にあってるかどうかはわからないけど 「if (flagA = true) AND (flagB = true) then」なんて場合があるわけだし 「if POS() = true then」をPOS() > 0 のつもりで書いているなら 変数にどんな値が入っているか、型とかを考えてない。って話になるし POS() = 1 のつもりで書いているなら、同じ値だからといって 関係ない定数を使い回すな。という話になる 「if POS() then」がC畑の人の流儀というのは理解してるけど それを理解してない初心者が、何となく親切心かお節介で付け加えた結果が 「if POS() = true then」ということになってるじゃなかろうか
917 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/15(日) 11:31:41 ID:48UC/FQI0] >>916 >flag = trueって書き方自体はおかしな事じゃないでしょ 処理系にもよりますが、TRUEの値は保障されないので、比較で使うのはおかしい。 実際1という値を持っているしUWSCでは保障してるかもしれないけど、 一般的にそうなのでUWSCでもそういう癖はつけないほうがいいんじゃないかなと。 if (flagA = true) AND (flagB = true) then × // 成立するのはflagが1か0のときだけ if (flagA <> false) AND (flagB <> false) then ○ // 全ての値で成立
918 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/15(日) 20:05:10 ID:LdrnYZV60] だから、flag = trueに違和感を感じる人は boolean型がないC畑の人だけで boolean型がある言語系の人は何の違和感もないんだって flagって変数がboolean型なんだな。って思うだけだから
919 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/15(日) 20:30:21 ID:LdrnYZV60] > KAISU = IE.document.links.length > flag = false > FOR A = 0 TO (KAISU - 1) > IF POS("<!-- △△△ -->", IE.document.links[A].href) THEN flag = ture > IF POS("<!-- ◇◇◇ -->", IE.document.links[A].href) THEN flag = false > > IFB flag THEN > IFB POS("dailynews.yahoo.co.jp ", IE.document.links[A].href) > IE2 = CREATEOLEOBJ("InternetExplorer.Application") > IE2.visible = True > IE2.navigate(IE.document.links[A].href) > ENDIF > ENDIF > NEXT 例えば>>910 のサンプルで言ったらこういうことでしょ flagにはtrueかfalseしか代入してないんだから trueの値が保障されてないとか、trueかfalse、0か1以外が入ってることなんて考えなくていい この場合は「IFB flag THEN」を「IFB flag = true THEN」と書いたところで お節介と言うことにはならない それをPOS()という戻り値がINTのものに対してPOS() = trueとか書いてしまうと たまたま1の時だけtrueになってしまうということになる
920 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/15(日) 20:56:45 ID:48UC/FQI0] >>918-919 まあPos()のように0と0以外で判断するのはC言語系の考えとしても、 trueの定義がfalse以外のものとされてるのは、他の多くの言語で共通してるようだけど。 確かにtrueしか代入しないのなら確実に動作しそうだけど なんかの拍子にごみが入ったとき、trueで比較するとどんな動作をするか分からない。 まあごみが入った時点ではじかれるべきだからむしろtrueと比較すべきかもしれん。 つまりelseなんか使うなって事だ・・・
921 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/15(日) 21:21:15 ID:o+fSWy2v0] 型通りに書けばいいだけじゃ?、 flagはboolean型とみなしてコード書いてんだからtrueでいいし、 Pos()はint型だからtrueでの判定はナンセンスってだけ。
922 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/16(月) 06:46:17 ID:EmOr31T+0] For y = 0 to 250 〜 Call 〜 〜 Next POFF(P_SUSPEND2) と言う感じで外部スクリプトを呼び出して繰り返し作業をさせているのですが なぜか毎回209回で終わってスタンバイになってます なにか制限でもあるのでしょうか?
923 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/16(月) 09:09:28 ID:Y25mNBPu0] >>922 変数がかぶっているとか? callをコメントアウトしたらどう?
924 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/16(月) 23:09:04 ID:QUmq6Zuh0] >>922 //主 public i for i= 1 to 250 call call2.uws next //call2.uws print i でテストしてみたけど、制限などないようだよ…(アホだな自分もw)
925 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/16(月) 23:19:50 ID:+qFEC0Zh0] 自作関数で戻り値を配列で返すにはどうすればよいのでしょうか? 普通に配列を指定すると怒られます。
926 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/17(火) 01:13:40 ID:shI/FnE+0] >>925 イマイチ質問の意味がわからんけど関数内でResizeしてないんとちゃう? ttp://www.geocities.jp/stardust774/
927 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/17(火) 03:52:10 ID:X+NUGRkd0] >>925 関数の戻り値に配列って指定できたっけ? 俺は配列変数を参照渡しして、配列の長さを返却するようにしてる DIM ary[0] DIM i FOR i=0 TO hoge(ary, 3)-1 PRINT "ary["+i+"]: "+ary[i] NEXT FUNCTION hoge(VAR a[], n) DIM i FOR i=0 TO RESIZE(a, n-1) a[i] = i NEXT RESULT = LENGTH(a) FEND
928 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/17(火) 06:36:49 ID:hsq0Fe2s0] >>925 一言で言えば、無理
929 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/17(火) 12:52:47 ID:zwqJ4YAK0] >>925 俺もそれやろうとしたけどできなかったんで、配列のグローバル変数使ってやりとりしてるな かっこ悪いけど
930 名前:925 mailto:sage [2009/02/17(火) 15:04:26 ID:zlTNHss50] うーん、やっぱりできないっぽいですね 関数自体をループさせるか、グローバル変数使うしかないのかな… ありがとうございました