[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 10/18 14:24 / Filesize : 335 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

自動化ツールuwsc使いよ集まれ3



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/

809 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/01/28(水) 20:42:55 ID:aP03qKyG0]
普段のIEの操作では実行できないページってあり得ますか?
例えば、私が操作しようとしているページは、そこのURLを直接打ち込んでもまっすぐ行けず
必ずホームに戻って、ホームから行きたいページのリンクをクリックしなければならないんですよ

ホーム→ttp://www9.plala.or.jp/system19/
操作したいページ→www9.plala.or.jp/system19/games/koukai/

※Operaだと、直接飛ぶことが出来ました

810 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/01/28(水) 23:52:01 ID:NvkvtEFN0]
オンラインゲーム?
ならこのスレの上の方で散々書いてあると思うよ。
(それに当てはまるかどうかは知らない)

811 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/01/29(木) 21:45:54 ID:3VYUuVlD0]
私は、ゲームの操作を自動化したいなとは考えていますが、特別なページ
殊に、上記のように、なぜURL直接入力では希望のページに飛べないの
か疑問に思った
だけです。

812 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/01/29(木) 22:44:04 ID:7CcxhBvcP]
>>811
ソースを見ればすぐ分かると思うのですが・・・
Windows Script Encoderはもちろん知っていますよね?
IEでのみlocation.replaceがdecodeされるので別ページに遷移するのです。
これがuwscと一体どう関係あるのでしょうか?

813 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/01/30(金) 03:55:44 ID:OeBnpuaS0]
>>812
横レスだが
おまいは常に人を馬鹿にしてないと生きていけない奴だなw 哀れw

814 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/01/30(金) 04:18:35 ID:SPXRBmP00]
>>813
横レスとか言いつつ本人乙

815 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/01/30(金) 04:25:19 ID:OeBnpuaS0]
>>814
横レスだといったろ?w
恥ずかしい奴だな おまいはw

816 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/01/30(金) 05:00:06 ID:3mlQ1XKW0]
ここまで俺の自演

817 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/01/30(金) 05:17:44 ID:SPXRBmP00]
>>815
単芝厨きもいです



818 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/01/30(金) 21:23:01 ID:AuYpJb6K0]
と、ここまで俺の自演。

819 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/01/31(土) 00:13:38 ID:vsuJT7Qv0]
集まってるおまえらよ、そろそろ散れよ。

820 名前:811 mailto:sage [2009/02/01(日) 06:29:15 ID:KLbW2NFD0]
すいません><よく知りません

821 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/01(日) 12:52:27 ID:w5ujQ7MM0]
UWSCのスケジュールの設定で質問があります。

インターバルの設定が、1〜5分の設定と10分毎の設定などがあるのですが
7分や8分でのインターバルの設定は、どのようにしたら良いのでしょうか?

式による設定で式を入れれば良いのでしょうが
どんな式を入れればインターバルが7分や8分になるのか
わかりません。

ご教授頂ければと思います。

822 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/01(日) 13:07:22 ID:VbDhycHQ0]
>>821
インターバルだけでよかったら

Interval_7min.uws かなんか作ってそこに

Call Main.uws

while true
main()      //関数呼び出し
sleep(420)   //7分
wend

これでいいんじゃない?

823 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/01(日) 16:14:17 ID:ZukW/kKt0]
それだと、
7分 + main()処理
じゃん?
GETTIME使えばピッタシ!!

>   式による設定
>    自分で式を記述する事により細かな時間設定が決められます
>    使える変数
>     YY (年)、MM (月)、DD (日)、HH (時)、NN (分)、YMDNN (2000年からの経過分)、WW (曜日:日曜=0,.....土曜=6)
>    注意:チェックは分単位でされます、分単位の設定(NN, YMDNN)を忘れずに
>     例)
>       (WW=2) AND (HH=0 OR HH=12) AND (NN=0)   // 火曜日の0時と12時
>       (YMDNN mod 18)=0                  // 18分間隔
7分 : (YMDNN mod 7)=0
8分 : (YMDNN mod 8)=0

1、YMDNN (2000年からの経過分)
2、modは割り算した余り
3、割り算して余りがゼロ

じゃまいのか?

824 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/01(日) 16:17:37 ID:ZukW/kKt0]
4、式を希望する日時で”真”になるようにすればいい

たぶん・

825 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/01(日) 16:59:54 ID:v32FCtQy0]
>>823
Gettimeの戻り値が秒だからそれ使うだけでいいよ
分とか見たら割り切れないし。

ニュースの記憶見るかガンダム見るか悩むが
やっぱりガンダム見る

826 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/01(日) 19:06:26 ID:ZukW/kKt0]
???
SLEEPと、
Gettimeと、
スケジュール設定の式による設定
の3つのメリットデメリットを書いたんだけど。

>>分とか見たら割り切れないし。
って意味わかんないんだが、
何を意味した書き込みなんだ?


827 名前:名無しさん@お腹いっぱい。 [2009/02/02(月) 04:55:33 ID:cpjbDFRd0]
>>826
ああ、ごめん。
>YMDNN (2000年からの経過分)
これ知らんかった




828 名前:名無しさん@お腹いっぱい。 [2009/02/02(月) 13:10:24 ID:yH09tKlS0]
質問です
.vbsファイルをuwscで開くにはどのように記述すれば出来ますか?

exe以外のファイルの開き方が分からず、
今はクイック起動にショートカットを作成し、クリックして開くように記述しているので
直接開く方法があればご教授頂きたいです。

829 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/02(月) 14:08:30 ID:pdMh/tE90]
doscmd("???.vbs")

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が言っているような
書き方のほうが理解しやすく感じてしまった






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<335KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef