自動化ツールuwsc使いよ集まれ3at SOFTWARE
自動化ツールuwsc使いよ集まれ3 - 暇つぶし2ch733:名無しさん@お腹いっぱい。
09/01/14 18:00:21 5VRwikzI0
ある株ソフトにアラーム機能がないので
UWSCで出来たらいいなと思いましたが
どうしたらいいのか分かりません。

そのソフトはシグナルが出たときに
一番上の行に時間やら銘柄やら株価などが更新されていきます。
上昇のシグナルは緑背景に白文字、
下降のシグナルは赤背景に白文字となっており
上昇の緑の時にだけアラームを鳴らしたくて

WHILE TRUE
IFB PEEKCOLOR(887 , 241) = $2F6B55 THEN
SOUND("C:\WINDOWS\Media\notify.wav")
sleep(2)
else
sleep(1)
ENDIF
WEND

分からないなりにやってみたけど
これじゃあ赤いシグナルから緑に変わったときにしか
役に立たない・・・
ボクにも書けそうな簡単なスクリプトあれば教えてください。

734:733
09/01/14 21:00:55 5VRwikzI0
追記

とにかくソフトになにか変化があったらアラームを
鳴らさせるように出来ないでしょうか?

735:名無しさん@お腹いっぱい。
09/01/14 22:46:19 INWUQKt00
そこまで聞くならソフト名ぐらい晒せ

736:733
09/01/14 22:51:25 5VRwikzI0
>>735

大人買検知機というソフトです。
URLリンク(www.vector.co.jp)

737:名無しさん@お腹いっぱい。
09/01/14 22:55:16 hOB1qOFr0
いっこのループと、いっこの条件分岐が出来てるから…
後は、ほしい数だけ条件分岐を作れば出来るよ。

738:名無しさん@お腹いっぱい。
09/01/14 22:59:56 rt4k6YB30
>>734
URLリンク(ochoja.web.fc2.com)
UWSCコードの断片生成器
を使わせて貰って一番都合のよいもの(status,str,etc)選んでスクリプト書けば良い。

739:733
09/01/14 23:34:18 5VRwikzI0
>>737
どういう条件分岐作ればいいのでしょう?
peekcolorだけでやるのは無理ですよねえ?

>>738

***** getstr() sendstr() ********************
getstr(id,0,STR_STATIC)="大人買検知機"
getstr(id,0,STR_ACC_STATIC)="時刻"
getstr(id,1,STR_ACC_STATIC)="時刻"
getstr(id,2,STR_ACC_STATIC)="銘柄"
getstr(id,3,STR_ACC_STATIC)="約定値"
getstr(id,4,STR_ACC_STATIC)="出来高"


ちょっとやってみましたが
getstrで更新される文字とれるのでしょうか?
むずかしい~

740:名無しさん@お腹いっぱい。
09/01/14 23:39:21 3rpO1RzOP
>>733

えーと監視する項目の色が緑に変わったときにアラームを鳴らしたいんだよね?
ということは、前回チェックした時の色と今回の色を比較しなければダメだよ。
色は何種類あるの? 赤と緑以外に通常の表示色はある?

それと気になった点を言うと、何秒おきに監視するの? 1、2秒単位で監視する
アルゴリズムになっているようだけど無駄にマシンパワーを食うんじゃない?
30秒おきとか1分おきとか5分おきとかだよね?


アルゴリズムを書くけど スクリプトにする時は文法と変数規約に則して変えてね。
※←は代入の意味ね。

前回の色 ← 通常色
今回の色 ← 通常色

WHILE TRUE
 今回の色 ← 今回の色を取得して変数に代入
 IFB 前回の色と今回の色が違う AND 今回の色は緑
  アラームを鳴らす
 ENDIF
 前回の色 ← 今回の色

 次回チェックまでXX秒スリープ
WEND



741:733
09/01/15 00:55:00 tW7kX9XU0
>>740
緑背景から緑背景の場合もあるから
文字の入る場所も含めて取得する地点を複数にして
判断すればいいのかな

比較ののところがどう記述すればいいのかまったく分かりません。

今のところ1秒でやっても負荷たいしてかからないけど
複数地点にして比較すると相当負荷かかってくるカモですね。
その場合はもうちょっと間隔あけるようにします。

742:名無しさん@お腹いっぱい。
09/01/17 11:18:45 iMN83Hym0
// ===
前回の色 = ""

WHILE TRUE
  WHILE TRUE
    今回の色 = (PEEKCOLOR(887 , 241)
     IF !(今回の色 = $白ーい色) THEN BREAK // 白以外ならループ抜ける // !で真偽反転だっけかな;
    今回の色 = (PEEKCOLOR(111 , 222)
     IF !(今回の色 = $白ーい色) THEN BREAK // 白以外・・
    今回の色 = (PEEKCOLOR(333 , 444)
     IF !(今回の色 = $白ーい色) THEN BREAK // 白以外・・
  WEND

  IFB !(今回の色 = 前回の色) THEN
    // 同じ色ではない場合の処理
    IF 今回の色 = $2F6B55 THEN SOUND("C:\WINDOWS\Media\notify.wav") // グリーンなら
    IF 今回の色 = $レッドオ THEN SOUND("C:\WINDOWS\Media\レッドオ.wav") // レッドなら
  ENDIF

前回の色 = 今回の色
sleep(1)
WEND
// ===
泥くせ;;;


743:733
09/01/17 20:56:43 3elNHqC+0
分からないなりに理解しようとしましたが
色を取得するってところが全然分からない。

今回の色とか前回の色oldcolor newcolor?

744:名無しさん@お腹いっぱい。
09/01/17 23:58:47 70fVoJI80
>>743
ひょっとして変数が判ってない?
いずれにしろ、UBTrek使ってpeekcolorを検索すれば沢山ヒットすると思う。

745:733
09/01/18 00:49:03 V1b5lGQF0
>>744
単純なpeekcolorの記述は何個か出てきましたが
前回の色と今回の色を比較するような例が見つかりませんでした。

746:名無しさん@お腹いっぱい。
09/01/18 01:13:45 WQ5z9x9T0
>>745
dim color=peekcolor(100,200)

while true
newcolor=peekcolor(100,200)
ifb !color=newcolor
 msgbox("変わった")
 color=newcolor
endif
sleep(0.5)
wend

無限ループなので適当にBreak。
Mouseorg(id,2)使ってwindow指定した方がよいかも。
RGBが少しでも変化すれば反応してしまうので、RGBに分解した方がよいかも。

747:733
09/01/18 01:13:47 V1b5lGQF0
緑、赤とか関係なく
ある一点の色変化があったときに
アラームを鳴らす具体的なスクリプト教えていただけませんか
なんとかそこから発展させてやっていきたいと思いますので。

748:733
09/01/18 01:18:03 V1b5lGQF0
>>746
ありがとうございます
でもまったく反応しないですね。
このままじゃダメなんでしょうか?

749:名無しさん@お腹いっぱい。
09/01/18 01:21:04 aouJYoBm0
>>748
プログラムの基礎から学び直したほうがいいよ
君にはまだ早い

750:733
09/01/18 01:29:38 V1b5lGQF0
あ、反応しましたが
なかなか反応しない感じです。

751:名無しさん@お腹いっぱい。
09/01/18 03:18:31 lcf3XQYB0
皆さんのUWSCを使用する用途は大体何ですか?

自分のPC環境の最適化以外にUWSCというのは
マスターしたとしても他に例えば何に役立つのでしょうか?
例:仕事面 WEB製作面 etc

マジ質問です

752:WTTEkBtZS
09/01/18 03:22:58 24LUwixi0
URLリンク(rybeiddery.awardspace.com) dominos sub
URLリンク(maridoctoge.awardspace.com) ruff ryders columbus
URLリンク(caross.awardspace.com) darren nadel
URLリンク(maridoctoge.awardspace.com) ruff ryders soccer
URLリンク(rybeiddery.awardspace.com) dominos pizza nutrition
URLリンク(therybaive.awardspace.com) lenora jubilee
URLリンク(caross.awardspace.com) nadel jewish
URLリンク(maridoctoge.awardspace.com) ruff ryders layout
URLリンク(therybaive.awardspace.com) jubilee history
URLリンク(deadingrain.awardspace.com) facbook
URLリンク(therybaive.awardspace.com) red cedar jubilee
URLリンク(caross.awardspace.com) natasha nadel
URLリンク(rybeiddery.awardspace.com) pizza hut ottawa
URLリンク(caross.awardspace.com) nadel sarasota
URLリンク(maridoctoge.awardspace.com) bay ruff ryders
URLリンク(maridoctoge.awardspace.com) left ruff ryders
URLリンク(caross.awardspace.com) nadel artist
URLリンク(maridoctoge.awardspace.com) ruff ryders do
URLリンク(caross.awardspace.com) bernard nadel
URLリンク(caross.awardspace.com) fred nadel


753:名無しさん@お腹いっぱい。
09/01/18 05:43:43 85r780v+0
プログラムの何の知識も無いものがuwsc用のスクリプトを
作れるぐらいにったと仮定した場合に、既存のプログラミング言語では何が一番
とっつき易いでしょうか?

754:名無しさん@お腹いっぱい。
09/01/18 06:09:29 7B/GQZFQ0
>>751
仕事面:決まりきった作業、繰り返し作業の効率化
Web製作面:ランダムな操作で想定外行動のチェック漏れ発見(意味あるかは知らない
セキュリティ面:泥棒が侵入してきたとき、クイックメニューから一発でメールで連絡できる。
        ある程度相手が分かってる時便利。
        DOSコマンドでメール送信するのを使ってたけど、コマンドラインにパスワード入れなきゃいけなかったので削除されてしまった。

うpろだのJpeg画像とか、一回ペイントで開いて上書き保存すると、サイズが半分近くになる場合が多い。
だからダウンロードした画像のリストをエクスプローラーで出して、ドラッグとCtrl+Sで更新を繰り返すのとか作った。

あとは、性能は低いけどパスワードクラックとか2Getスクリプトとか
たくさんのID作りたいときに自動登録マクロとか。


755:名無しさん@お腹いっぱい。
09/01/18 06:10:50 7B/GQZFQ0
STOPFORM(true)
ID = Exec("C:\WINDOWS\system32\mspaint.exe")
while ID = (-1) // 負荷が高いとID拾えないので
sleep(0.1)
ID = GetID("無題 - ペイント")
wend
Repeat; sleep(0.1); Until GetKeyState(VK_CONTROL)
StartX = G_MOUSE_X
StartY = G_MOUSE_Y
sleep(1)
While !GetKeyState(VK_CONTROL)
CLKITEM( ID, "ファイル\新規", CLK_MENU )
sleep( 0.1 )
// Ctrlキーで中断・再開
ifb GetKeyState(VK_CONTROL) then
sleep(5)
Repeat; sleep(0.2); Until GetKeyState(VK_CONTROL)
sleep(1)
endif
MMV( StartX, StartY )
BTN( LEFT, DOWN, StartX, StartY )
EndX = Status(ID, ST_X) + 30
EndY = Status(ID, ST_Y) + 10
MMV( EndX, EndY )
BTN( LEFT, UP, EndX, EndY )
If DlgWait(ID, EndX , EndY) Then Continue
If Status(ID, ST_TITLE) = "無題 - ペイント" Then break
CLKITEM( ID, "ファイル\上書き保存", CLK_MENU )
DlgWait(ID, EndX , EndY)
wend
CtrlWin(ID, Close)
MsgBox("処理が終了しました。")

756:名無しさん@お腹いっぱい。
09/01/18 06:12:23 7B/GQZFQ0
// マウス形状が通常の状態が1秒ほどあればタイムアウト。
// その間にダイアログが表示されるかどうかで戻り値が変わる。
// ダイアログが出た場合、OKをクリックする。
// True: 窓出現  False: 窓出ず
Function DlgWait(ID, EndX , EndY)
Result = False
cnt = 0
while cnt < 6
sleep(0.1)
MMV( EndX , EndY )
if MUSCUR() = CUR_ARROW Then cnt = cnt + 1
CID = GetChldID(ID)
Ifb CID Then
sleep(1)
ClkItem(CID, "OK")
Result = True
break
endif
wend
Fend

// 子ウィンドウを探す
// 戻り値:子ウィンドウのID。見つからなければ0。
// PID:親ウィンドウID
// CID:子ウィンドウIDの候補
// GW_ENABLEDPOPUPはWindows2000以降のみでサポート
//
// GetWindowによる子ウィンドウ取得を、GetChldIDに使ってみたが、
// Zオーダーで手前のウィンドウを全て取得するので選別する必要がある。
// メニュー Class:"#32768"
// ダイアログ Class:"#32770"
// ツールチップ Class:"tooltips_class32"

757:名無しさん@お腹いっぱい。
09/01/18 06:17:23 7B/GQZFQ0
Function GetChldID( PID, CID = 0 )
 Ifb CID Then
  Ifb PID = STATUS( CID, ST_PARENT ) Then
   result = CID
   exit
  endif
 endif

 h = GetWindow( IDToHnd(PID), GW_ENABLEDPOPUP )
 Ifb h Then
  S = Status(HndToID(h), ST_CLASS)
  Select S
   case "#32768"
    Result = 0
   case "tooltips_class32"
    Result = 0
   default
    Result = HndToID(h)
  Selend
 Else
  Result = 0
 Endif
Fend


// エクスプローラーとペイントを使った、Jpeg画像ファイルダイエットスクリプト 2008/10/21
// 使用方法:対象ファイルをエクスプローラーで表示し、ペイントが起動したら、エクスプローラーの
//        ファイル一覧画面の一番下のファイルにマウスカーソルを合わせ、Ctrlキーをクリックする。
// Ctrlキーで中断。
ソースは >>755-757
※エクスプローラーで、ファイルを詳細表示し、表示中ファイルの一番下のやつをクリックすると勝手に一つスクロールする。
 これを使うと簡単に順番に処理することができる。スクロールしない場合は窓の高さを変更する。

758:名無しさん@お腹いっぱい。
09/01/18 06:25:01 7B/GQZFQ0
>>753
VBSかな。これもスクリプト言語だけど・・・
次はVB.netかな。

>>750
sleepが0.5秒だから反応は遅いね。


759:名無しさん@お腹いっぱい。
09/01/18 09:12:15 BRvZ2wPi0
>>733
とりあえず、最低限
URLリンク(big.tm.land.to)
の内容くらいは自分で理解してから質問してくれぃ。

760:733
09/01/18 11:55:00 V1b5lGQF0
>>759
一応読んでみたのですが

取得した値と新しく取った値を比較
さらに新しく取った値と比較みたいなことは

どこにも書いてないのではないでしょうか?

>>758
これって最初に取得した色と比較してMSGBOXが出るようになってますよね?

ある地点の色を取得して現在の色と比較
さらに取得して新しく取得した色と比較と
これを繰り返していきたいんです。

761:名無しさん@お腹いっぱい。
09/01/18 12:41:56 O40sJXqz0
>>760
あなたは日本語言語でちゃんと処理を記述してるじゃないか。
あなたがセンテンスを分割して2行で書いたとおり
uwscで2回比較処理をすればいいじゃないか。

これ以上はちょっと俺は関与することに面白みを見出せないわ
別にアルゴリズム的に難題というワケでもなし。
単なる知識不足のサポートは自助努力で補うといいよ。
…書いたものに駄目だしをされるだけなのは疲れるからね。
 自分で書きなさい。想定がつけば駄目だしをしてあげるから。

762:名無しさん@お腹いっぱい。
09/01/18 12:45:57 Xm1Xcjw/0
自分でやろうって気が少しも感じられないもんな

763:名無しさん@お腹いっぱい。
09/01/18 13:15:24 I+l/Qm3w0
>>760
自分のやりたいことがそっくりそのまま1から10まで書いてあるわけ無いだろ。
基本的なことは書いてあるんだからそれを理解したなら自分で作れ

764:名無しさん@お腹いっぱい。
09/01/18 15:31:11 xwkw1ib70
>>754
真面目にレスありがとうございます

UWSCで画像を対象にした条件分岐や色々作成した事はあるのですが
(今ではすっかり文法忘れてます)

ルーターにアクセスしてある設定を切り替える、等も
UWSCで可能でしょうか?
PHP等のスクリプトですると難しそうなので・・・

765:名無しさん@お腹いっぱい。
09/01/18 18:34:11 o9RUmICX0
可能です

766:733
09/01/19 15:25:59 V9clvX4k0
みなさんのヒントを元になんとか完成しました。
またつまづいたらよろしくお願いします。

767:名無しさん@お腹いっぱい。
09/01/19 20:54:27 qcrdC3FS0
  ハハ お断りします
 (゚ω゚)
_(_つ/ ̄ ̄ ̄/_
  \/___/

768:名無しさん@お腹いっぱい。
09/01/20 00:58:10 CMylmmuM0
[Ver4.5]

769:名無しさん@お腹いっぱい。
09/01/20 01:37:12 0N/gC0gi0
高レベル記録…
なんというお手軽システム。

770:名無しさん@お腹いっぱい。
09/01/20 10:17:34 Rt1OsezX0
うう、まだcall文で変数が使えんのか・・・

771:名無しさん@お腹いっぱい。
09/01/20 11:22:31 mivuHGw40
IE_Subってもう入手できないの?


772:名無しさん@お腹いっぱい。
09/01/20 16:02:13 6xnO4udb0
一昨日からスクリプト組始めたんですが、どうにも配列変数の使い方(定義を含めて)がわからないので
詳しい方ご教示願います。

例えば変数ABC(x、y)に10*10=100個の変数にX軸Y軸共に1を格納していく場合、
BASICで書くと(うろ覚えですけど。)

FOR Y=0 to 9
FOR X=0 to 9
ABC(X,Y)=1
X=X+1
NEXT X
Y=Y+1
NEXT Y

と、したい所をuwscでは最初にどう定義して配列変数を使っていけばいいですか?
ヘルプ見たんですけど、イマイチイメージがつかめません
お願いします。

773:名無しさん@お腹いっぱい。
09/01/20 16:09:22 6xnO4udb0
あ、FOR~NEXTってX=X+1とかいらないんだっけ?・・・orz

774:名無しさん@お腹いっぱい。
09/01/20 17:49:05 LpFWL/UM0
どうって、
DIM ABC[10][10]って定義して
> ABC(X,Y)=1
ABC[X][Y]=1
っていれてくだけでしょ…

775:名無しさん@お腹いっぱい。
09/01/20 18:03:13 6xnO4udb0
ああ、(x,y)じゃなくて[x,y]じゃないといけないのね・・・helpそういう意味かorz
とんだ勘違いしてました。どうもです

776:名無しさん@お腹いっぱい。
09/01/23 08:39:26 n0Gk8YsY0
複数のスクリプトを連続で起動させるにはどうすればよいですか?
1のスクリプトがおわったら自動的に2をのスクリプト起動、2→3、3→4...という感じです。

777:名無しさん@お腹いっぱい。
09/01/23 10:36:35 E4bxtYk+0
>>776
各スクリプトの最後でcall。

もしくは
exec("フルパス\uwsc.exe フルパス\hoge.uws") 
こちらは多重起動禁止だとダメかもしれん。

778:名無しさん@お腹いっぱい。
09/01/23 12:19:14 v1eHViqS0
>>776
1の頭で2,3,4をcallして
1でprocedureやFunctionを順に呼び出してもいいよ

779:名無しさん@お腹いっぱい。
09/01/23 12:30:51 n0Gk8YsY0
>>777
>>778
ありがとうございました。とても参考になりました。

780:名無しさん@お腹いっぱい。
09/01/23 14:55:53 uyPNdhnC0
>>705さんの
>IEを操作するのならCOM使うとフォーカス奪われないよ
これについて理解を深めたいのですがどのあたりを具具れ場良いのでしょうか?


781:705
09/01/23 20:41:40 CkpYM4hA0
>>780
これに関してはググってないからわかんない
ヘルプのじゃ難しい?
スクリプト > スクリプト関数 > COMオブジェクト, IE操作関連

あとはページソースと睨めっこ

782:780
09/01/23 22:39:18 aJMC8HA30
>>781 ありがとうございます。よく読んでみます。


783:名無しさん@お腹いっぱい。
09/01/24 16:24:29 T53k2DPg0
かなり、基本的なことで恥ずかしいことなのですがどうしても解決できず…

HAZU = GETID("URLリンク(www.***)")
ClkItem(HAZU, "事件", CLK_BTN)

上記では、webウィンドウ上のアイテムをくりっくすることができません。
エラーは起きないのですが。。
原因としてはなにが考えられるでしょうか?

784:名無しさん@お腹いっぱい。
09/01/24 16:35:10 jFu+yqaK0
left clickではないだろうか。

785:名無しさん@お腹いっぱい。
09/01/24 17:06:55 JOvNHrQj0
>>781=>>783

786:名無しさん@お腹いっぱい。
09/01/24 19:22:15 nTyZ62iO0
早速のへんしんあり

Left Clickということは、そのあとに座標指定ですよね?
web上だとずれてしまいませんか??

>>785
違いますよ~

787:名無しさん@お腹いっぱい。
09/01/25 02:35:43 XdmZStkM0
>>782
わからなかったからここできくといいよ
その時はURL晒すように!

↓のようなレベルの質問しなければだけどw
ID:5VRwikzI0
ID:V1b5lGQF0

>>783
IE上のはCOMで書かないとだめ
ウィンドウ関連はWindowsフォームを扱うもの

788:名無しさん@お腹いっぱい。
09/01/25 12:17:04 mUdf+86S0
COMで書くと言うことは、C++や、java言語で組め
ということですか?

789:名無しさん@お腹いっぱい。
09/01/25 12:29:17 KXHTzu1o0
座標(720,100)の赤要素が200~255の時はAキーを押し、
赤要素が199以下の時はBキーを押す。

というように動かすにはどう記述すればいいですか?

----------------------------------------------
IFB (PEEKCOLOR(720,100) and $0000FF) 55 then
KBD(VK_A,CLICK,40)
ELSE
KBD(VK_B,CLICK,40)
ENDIF
----------------------------------------------

上記のように書きましたがうまくいきません。
ご教授お願いします。

790:名無しさん@お腹いっぱい。
09/01/25 13:03:24 mUdf+86S0
IE上の、どのラジオボタンをクリックするのかを指定するにはどのようにすればよいのでしょうか?

IESetData(IE,True,"lr","lang_ja")      // ラジオボタン選択:日本語のページを検索
IESetData(IE,"UWSC","q")         // 文字設定:検索単語
IESetData(IE,True,"btnG","Google 検索") // SUBMIT

ヘルプではこのように載っていますが1行目のlrというのは、ラジオボタンということを示しているのでしょうか?
よくわかりません><


791:名無しさん@お腹いっぱい。
09/01/25 13:17:12 yFPEYg0l0
教授じゃなく教示だと何度言ったら

792:名無しさん@お腹いっぱい。
09/01/25 14:10:16 XdmZStkM0
>>790
IESETDATA( IE, 値, Name, [Value, 番号] )

google.co.jpのソースを見ると

<input id=all type=radio name=lr value="" checked><label for=all> ウェブ全体から検索 </label>
つまり Name=lr, value= ""

<input id=il type=radio name=lr value="lang_ja"><label for=il> 日本語のページを検索 </label>
同様に Name=lr, value= "lang_ja"

値がtrueということは,選択もしくはクリックするということ

793:名無しさん@お腹いっぱい。
09/01/25 14:11:57 XdmZStkM0
>>790
//以下コード

IE = CreateOLEObj("InternetExplorer.Application")
IE.Visible = True
IE.Navigate("URLリンク(www.google.co.jp)")
BusyWait(IE)

IESetData(IE,True,"lr","lang_ja") // RADIO: 日本語のページを検索
MSGBOX( "日本語のページを検索 のラジオボタンをオンにしました." )

IESetData(IE,True,"lr") // RADIO:ウェブ全体から検索
MSGBOX( "ウェブ全体から検索 のラジオボタンをオンにしました." )

Procedure BusyWait(ie)
Sleep(0.5) // Wait
Const TIME_OUT = 90
tm = Gettime()
repeat
Sleep(0.2)
ifb Gettime() - tm > TIME_OUT
MsgBox("Time Out:BusyWait")
ExitExit
endif
until (! ie.busy) and (ie.readyState=4)
Sleep(0.5)
Fend

794:名無しさん@お腹いっぱい。
09/01/25 14:34:02 XdmZStkM0
>>789
IFB ( PEEKCOLOR( 720, 100 ) and $FF ) >= 200 then

andってどういうこと?教えて!

795:名無しさん@お腹いっぱい。
09/01/25 14:44:55 od339K0v0
>>794
ビット積
URLリンク(www3.bigcosmic.com)
オイラも前に同じこと聞いたw

796:名無しさん@お腹いっぱい。
09/01/25 14:48:20 XdmZStkM0
>>795
ありw

797:789
09/01/25 18:08:13 KXHTzu1o0
>>794
ありがとうございます。うまく動きました。

798:名無しさん@お腹いっぱい。
09/01/25 23:25:00 mUdf+86S0
>>792
なるほど。ソースを調べるわけですね
骨が折れますね
大事なことを教えて頂き、ありがとうございます^^
しかし、右クリックでソースを調べることが出来ない場合はどうすればよいでしょうか?

799:名無しさん@お腹いっぱい。
09/01/26 00:00:03 o/KQMVrn0
>>798
opera使うといいよ
右クリック禁止抑制とかフレームのソースも簡単に拾える

俺も解析用に使った
今ではメイン

800:名無しさん@お腹いっぱい。
09/01/26 19:12:01 +wQJsntF0
なにからなにまでありがとうございます
試してみます

801:名無しさん@お腹いっぱい。
09/01/26 21:28:55 +wQJsntF0
InternetExplorer上で、操作したいページを表示した状態で、

IE = GETACTIVEOLEOBJ("InternetExplorer.Application", "Web航海時代" )
IESetData(IE,True,"point","3") 

↑のようなコードを実行しても、なにも起きません
エラーは起きていないし、nameやvalueも間違っていないと思うのですが…

802:名無しさん@お腹いっぱい。
09/01/26 21:58:38 lqCZORip0
nameかvalueが間違ってるんだと思う
IESetDataの戻値を見て正常かエラーか見てみればいかが?

803:名無しさん@お腹いっぱい。
09/01/26 22:40:25 +wQJsntF0
<input type=radio name=point value="3">

↑ソースコードですが、name,value共にあっているかと…

804:名無しさん@お腹いっぱい。
09/01/27 03:31:42 i4vBvxWB0
志村ー!、ダブルクォーテーション!ダブルクォーテーション!

805:名無しさん@お腹いっぱい。
09/01/27 21:41:22 ko0WGgzz0
うぅ、、、ダブルクォーテーションまーくをつけたりとったりしてみましたが、エラーになりました><


806:名無しさん@お腹いっぱい。
09/01/27 21:51:17 i4vBvxWB0
<input type="radio" name="point" value="3">

これで行けるはずだけど、行けなかったらごめん、その時は他が間違ってると思う。

807:名無しさん@お腹いっぱい。
09/01/28 14:39:28 Di5rN0Wd0
色の判定をしてるのですが全然認識をしてくれません・・・
自分の環境に合わせてるつもりなのですが、どうすればBRG値をうまく範囲化できるのでしょうか><?

808:名無しさん@お腹いっぱい。
09/01/28 20:10:56 aP03qKyG0
>>806
わざわざありがとうございました^^
しかし、なにもかわらず…
色々やってみます。

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

ホーム→URLリンク(www9.plala.or.jp)
操作したいページ→URLリンク(www9.plala.or.jp)

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

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

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

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

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

814:名無しさん@お腹いっぱい。
09/01/30 04:18:35 SPXRBmP00
>>813
横レスとか言いつつ本人乙

815:名無しさん@お腹いっぱい。
09/01/30 04:25:19 OeBnpuaS0
>>814
横レスだといったろ?w
恥ずかしい奴だな おまいはw

816:名無しさん@お腹いっぱい。
09/01/30 05:00:06 3mlQ1XKW0
ここまで俺の自演

817:名無しさん@お腹いっぱい。
09/01/30 05:17:44 SPXRBmP00
>>815
単芝厨きもいです

818:名無しさん@お腹いっぱい。
09/01/30 21:23:01 AuYpJb6K0
と、ここまで俺の自演。

819:名無しさん@お腹いっぱい。
09/01/31 00:13:38 vsuJT7Qv0
集まってるおまえらよ、そろそろ散れよ。

820:811
09/02/01 06:29:15 KLbW2NFD0
すいません><よく知りません

821:名無しさん@お腹いっぱい。
09/02/01 12:52:27 w5ujQ7MM0
UWSCのスケジュールの設定で質問があります。

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

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

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

822:名無しさん@お腹いっぱい。
09/02/01 13:07:22 VbDhycHQ0
>>821
インターバルだけでよかったら

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

Call Main.uws

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

これでいいんじゃない?

823:名無しさん@お腹いっぱい。
09/02/01 16:14:17 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:名無しさん@お腹いっぱい。
09/02/01 16:17:37 ZukW/kKt0
4、式を希望する日時で”真”になるようにすればいい

たぶん・

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

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

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

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


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


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

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

829:名無しさん@お腹いっぱい。
09/02/02 14:08:30 pdMh/tE90
doscmd("???.vbs")

830:名無しさん@お腹いっぱい。
09/02/02 14:30:06 yH09tKlS0
>>829
有り難う御座います。
ですが実行されませんでした
フルパスで""も付けたんですが…
OSはvistaなんですが関係無いですよね…

831:名無しさん@お腹いっぱい。
09/02/02 14:49:49 cpjbDFRd0
>>830
ショートカットのプロパティにリンク先っていうのがあるでしょ。
それをコマンドラインに入力したらいいんだけど。

コマンドプロンプトを開いて実行するか、
ファイル名を指定して実行(Vistaにあるかは知らないが)で、実行できるか試してみて。

832:名無しさん@お腹いっぱい。
09/02/02 15:05:20 yH09tKlS0
>>831
有り難う御座います。
先ほどuwscで動かなかったので、
コマンドプロントからも直接やってみましたが、
vbsは実行されてませんでした orz

833:rpaawnaw
09/02/02 15:07:51 2TLMPBOD0
qFqgve <a href="URLリンク(lycvakiqmpbn.com)">lycvakiqmpbn</a>, [url=URLリンク(gxsxjoosngmt.com) [link=URLリンク(ifsiyjjscezd.com) URLリンク(piuboesbpern.com)

834:名無しさん@お腹いっぱい。
09/02/02 15:11:57 pdMh/tE90
>>832
Vistaでも問題なくできるぞ
どんなエラーメッセージが出る?

835:名無しさん@お腹いっぱい。
09/02/02 15:21:46 yH09tKlS0
>>834
いえエラーは出ないんですが、
コマンドプロンプトに(フルパス).vbsをペーストしてEnterを押しても
動いた形跡が無いんですよね・・・
ただbatファイルをウインドウ非表示で実行させるだけの簡単な物なんですが
それとも何か必要な物が欠けているんでしょうか
普通にクリックしたときは動くんですが・・・

836:名無しさん@お腹いっぱい。
09/02/02 15:28:21 PVHBkFFR0
>>835
vbsのほうにメッセージボックスを1行入れてみたら?

837:名無しさん@お腹いっぱい。
09/02/02 15:49:30 yH09tKlS0
>>836
有り難う御座います。
色々調べてみて今、解決出来ました。
お騒がせしました。

838:名無しさん@お腹いっぱい。
09/02/02 19:05:09 Os9uDG+70
できれば、何が原因だったか教えてくれると有り難いとか思ってるのは俺だけかな?
初心者だからどういう時にそうなるのか気になる。

839:名無しさん@お腹いっぱい。
09/02/02 20:36:43 bbkYkSZI0
ブラウザを起動するときに最小化できませんか?
検索では、UWSC.exeのあるフォルダのUWSC.INIをメモ帳で開き、
StopForm=0 を StopForm=1 に変更して保存します。

とあったのですが、iniファイルがなく設定できませんでした。
キーボードからオルトとスペース、Nキーで最小化できるので
キー操作のスクリプトからできることはできるみたいですが
一回、表示されてからの対応になるのでできれば起動時から
できたらいいのですが。

840:名無しさん@お腹いっぱい。
09/02/02 21:07:48 yMTVVraI0
comでxmlhttpを使え。解決する。
他にも色々あるが、まぁ、とりあえず使ってみろ。

841:名無しさん@お腹いっぱい。
09/02/03 03:38:57 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:名無しさん@お腹いっぱい。
09/02/03 03:52:05 eeztqI130
>>841
すみません、比較式を間違えました
失敗時は 32 以下の値を返すので、正しくは以下です

IFB ShellExecuteA(NULL, "open", "C:\Program Files\Internet Explorer\iexplore.exe", NULL, NULL, SW_SHOWMINIMIZED) <= 32 THEN
  MSGBOX("実行に失敗しました")
ENDIF

843:名無しさん@お腹いっぱい。
09/02/03 09:29:53 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:名無しさん@お腹いっぱい。
09/02/03 21:49:12 eeztqI130
>>843
起動と同時に URL に移動するには
ShellExecute() の第 4 引数に URL を渡します
なお、ProgID は大文字小文字を区別するので
正しくは『InternetExplorer.Application』です
また、以下のコードでも同じことができます

OPTION EXPLICIT

DIM url = "URLリンク(www.2ch.net)"
DIM ie = CREATEOLEOBJ("InternetExplorer.Application")

CTRLWIN(HNDTOID(ie.HWND), MIN)
ie.Visible = True
ie.Navigate(url)

845:名無しさん@お腹いっぱい。
09/02/04 12:53:58 m6en7Q5I0
uwscでIEを開いた後、そのIEで開いたHP内の文字データなどを
EXCELのセルに代入することはできますでしょうか?


846:名無しさん@お腹いっぱい。
09/02/04 13:05:01 tXqKlnWn0
できます

847:名無しさん@お腹いっぱい。
09/02/04 13:20:25 m6en7Q5I0
ありがとうございます
なんとかやってみます

848:名無しさん@お腹いっぱい。
09/02/04 19:46:29 MfK5WOxL0
>>844
勉強になります。ヘルプみたり過去の質問検索してみましたが、
あまり、APIとかのことが載ってないのね・・・

849:名無しさん@お腹いっぱい。
09/02/04 23:12:09 N1AZKeZ50
>>848
MSDN見たほうが手っ取り早い事が多いからなぁ?

850:名無しさん@お腹いっぱい。
09/02/06 12:59:57 hPEtxwon0
A = "●●"と言った感じのものを20ぐらいあるとしてそれを順に
送信しようと頑張っています。ちなみに一個だけならなんとかなる
のですが、複数だとどうしてもコードがいっぱいになってしまします。


IESetData(IE,A,"kakikaki")
id = getid("internet explorer")
clkitem(id,"ボタン",CLK_ACC,CLK_BACK)
sleep(15)

これが、そのコードなのですが、Aのところに複数の文字を順に設定
できたらと思っています。よろしくおねがいします。

851:名無しさん@お腹いっぱい。
09/02/06 15:36:29 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:名無しさん@お腹いっぱい。
09/02/06 16:05:23 BBz1+Wne0
レスどうも。m(_ _)m
実際に実行してみたら下記のようなエラーがでました。

Uスクリプト: 変数: A 配列をオーバーしてます
8行目:A[1] = "●●"

こんなエラーがでます。A[0]は、大丈夫みたいです。
なんでだろう?なにかわかりましたら詳細お願いします。

853:名無しさん@お腹いっぱい。
09/02/06 16:32:11 1eXzPAIO0
dim a[19]= "●●","○○","△△","▲▲",・・・・・(20個記述)

"とりあえず1から10まで聞いとけ"という性格が羨ましいと思うようになったこの頃。('A`)

854:名無しさん@お腹いっぱい。
09/02/06 17:44:09 BBz1+Wne0
うまくいきました。m(_ _)m
なぜ、前にやつはエラーがでたのかしら?
原因が分からない。

855:名無しさん@お腹いっぱい。
09/02/06 18:42:36 q6mgGLtH0
変数の定義、宣言と
変数への値の代入という
二つの違いを理解してないから

856:名無しさん@お腹いっぱい。
09/02/07 03:18:07 vXpPMDOu0
前から疑問だったけど、聞けなかったこと。
>>841のshellexecuteのnShowCmd。msdn等を見ると記述順番は
SW_HIDE, SW_MAXIMIZE, SW_MINIMIZE, SW_SHOW ・・・
で順番違うじゃない? この定数はどこで判別するんでしょ?
どなたか解説してくれないかな…

857:名無しさん@お腹いっぱい。
09/02/07 09:37:19 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:名無しさん@お腹いっぱい。
09/02/07 11:36:45 l5adthQH0
>>857
回答ありがとう!見つけられました。
これ、目的の記述部分を捜すのは適当な属性値をGrepで捜すくらい
しか思いつかなかったのですが、(ちゃんと順を追ってじゃなく、
あくまでdef_dllのためだけという意味)他に良い方法ありますでしょうか?
重ね重ねで恐縮ですが、もし知恵があれば教えてくださいませ。

859:名無しさん@お腹いっぱい。
09/02/07 20:34:24 TsGY9ahZ0
BMP画像(100x100)からUWSCを使ってRGB値をテキスト出力するにはどうすればよろしいでしょうか?

860:名無しさん@お腹いっぱい。
09/02/08 00:47:32 fB3ojcA60
色情報を取得してそれをファイルに書き出せばいいのではないでしょうか

861:名無しさん@お腹いっぱい。
09/02/08 07:22:53 QoTANPZk0
>>858
大抵の IDE はシンボルの定義部にジャンプする機能があるけど
確認のためだけに起動するのは避けたいので
俺は grep してます

862:858
09/02/08 18:05:42 iaalqOSe0
>>861
ナルホド~。
ひとつ賢くなりました。多謝。

863:名無しさん@お腹いっぱい。
09/02/08 22:31:33 dNKbKAR9O
いくつかの画像のサンプルがあって、指定したウィンドウ内からその画像を書いた順番で探す。
合ったら処理抜け、なかったら次の画像探し
最終的にどれもなかったらまた処理抜けってのをがんばってやろうとしてるんだけどどーすりゃいいのかな
いちいちifbで探してなかったらbreakみたいにやらんとダメ?
もーちょいスマートにやれないかな

864:名無しさん@お腹いっぱい。
09/02/08 23:45:58 vASK790PO
日本語でおk

865:名無しさん@お腹いっぱい。
09/02/08 23:51:13 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:名無しさん@お腹いっぱい。
09/02/08 23:55:43 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:名無しさん@お腹いっぱい。
09/02/09 00:20:04 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:名無しさん@お腹いっぱい。
09/02/09 00:34:17 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:名無しさん@お腹いっぱい。
09/02/09 12:18:39 wdWGM0TOP
パソコンに同情するわ

870:名無しさん@お腹いっぱい。
09/02/09 16:18:53 5wLvS0Ft0
".\image\"bmp[n]+".bmp" ×
".\image\" + bmp[n] + ".bmp" ○

ちゃんとスペース入れないから間違うんだ

871:名無しさん@お腹いっぱい。
09/02/10 14:57:33 ldVPkdsr0
特定の文字を含むアドレスを抽出しそれを順々に周っていくという
のを作っています。

IE = CREATEOLEOBJ("InternetExplorer.Application")
IE.visible = True
IE.navigate("URLリンク(www.yahoo.co.jp)<)●●[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]のところは毎回違います。これでやると順々に周ってくれません。
フリーズさえしないもののページを読み込むのが終了せずそのままに
なります。

実行したときには、"URLリンク(www.)●●[A]"←この部分はちゃんとしたアドレス
になっています。


872:名無しさん@お腹いっぱい。
09/02/10 16:02:10 HCMc1CKn0
>>871
>IE2 = GETACTIVEOLEOBJ(

これってIEを起動していないと、オブジェクトIEとオブジェクトIE2は同じものになるよね。
で、元のIEで他のページ開いちゃったら、IE.document.linksが無効になっちゃうんじゃないかな。
というか最初にとったIE.document.links.lengthとページが切り替わったあとのやつとでつじつまが合わなくなってちゃんと動かないはず。
特にUWSCのFOR分は、ループに入ったら回数固定だから、その辺が変動しないようにきっちりやらないと。

873:名無しさん@お腹いっぱい。
09/02/10 16:11:49 ldVPkdsr0
IE = CREATEOLEOBJ("InternetExplorer.Application")
IE.visible = True
IE.navigate("URLリンク(www.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:名無しさん@お腹いっぱい。
09/02/10 16:54:12 HCMc1CKn0
>>873
2つ目をCreateしてれば問題ないけど、
1つ目に上書きするとだめなんですよ。
Getするということは、確率的に1つ目を取得することになります。
他の窓がない場合は100%1つ目の窓を取得します。

どうしても1つ目の窓でやりたければ、
Navigateする前にlinksを全部配列にコピーしておかないと駄目です。

ループすると次々に窓を起動するのでいやだということなら、
ループに入る前にあらかじめ2つ目をCreateしておけばいいんです。

そもそも参考にしたソースは実用的な動作じゃありません。
ただ、Navigateした後に待ちを入れていないので、スクリプトの動作は快適で安定するでしょう。


875:名無しさん@お腹いっぱい。
09/02/10 17:15:37 ldVPkdsr0
とりあえず

>ループに入る前にあらかじめ2つ目をCreateしておけばいいんです。

この手法をお願いします。できれば配列にコピーというのもお願いします。


876:名無しさん@お腹いっぱい。
09/02/10 17:54:36 HCMc1CKn0
>>875
まずは2つ起動

IE = CREATEOLEOBJ("InternetExplorer.Application")
IE.visible = True
IE.navigate("URLリンク(www.yahoo.co.jp)<)●●[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:名無しさん@お腹いっぱい。
09/02/10 18:23:31 ldVPkdsr0
正直、わからないです。
質問が悪かったのかしら・・・

1、指定ページに移動
2、特定の文字を含むアドレスをゲット
3、ゲットしたアドレスを順に表示(IE2でも可)

この動作なんだけどなー。うーむ。

878:名無しさん@お腹いっぱい。
09/02/10 18:43:10 HCMc1CKn0
>>875
配列を使うやつ


DIM リンク[]="ダミーデータ"

IE = CREATEOLEOBJ("InternetExplorer.Application")
IE.visible = True
IE.navigate("URLリンク(www.yahoo.co.jp)<)●●[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:名無しさん@お腹いっぱい。
09/02/10 18:51:38 HCMc1CKn0
>>878の補足
リンクの選別を最初のループでやってるので、2回目のループは無条件に処理できる。
ループ回数が違っているのも要チェック。
配列がちょっとややこしいやり方だけど、カウンタが2つ以上になってもややこしいのでこういうやり方してます。
リンク[length(リンク) - 1]は、リンクっていう配列の最後尾を意味します。
resize(リンク, length(リンク))は、配列を一つ増やします。
上記2行により、最後尾にデータを追加するたびに配列を増やし、常に最後尾をあけておきます。

ちなみに、最初に配列数を0にしておけばごみがでないように思われますが、
最小配列サイズが1なので、どうしてもごみが入ります。
また、最初の1回で隙間をなくそうとすると、ループの処理がおかしくなります。

>>877
おいおい
1、指定ページに移動  は、IE.Navigateだし
2、特定の文字を含むアドレスをゲット は、
 POS("URLリンク(www.)●●", IE.document.links[A].href) > 0
 の条件を満たすときの IE.document.links[A].href だし
3、ゲットしたアドレスを順に表示(IE2でも可) は、
 ループの中でIE.Navigateですよ

これ以上丁寧に教えるのは無理。
ヘルプとサンプルをじっくり見てください。

1行ずつ実行してみるのもいい手。
僕は実験のファイルが70くらいたまってる。


880:名無しさん@お腹いっぱい。
09/02/10 20:47:55 ldVPkdsr0
お手間をかけます。m(_ _)m
実際に実行してみたのですが、両方駄目でした。

エラーは出ませんが、最初のヤフーページが読み込み中になりそれ以後が進みません。
難しいわぁ~('A`)

881:名無しさん@お腹いっぱい。
09/02/10 21:20:46 HCMc1CKn0
>>880
とりあえずそのままuwsファイルに書き込んで起動したら、IEは自動的に終了した。
読み込み中で止まるって?
IEの設定の問題かな?

>>876のやつの POS("URLリンク(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:名無しさん@お腹いっぱい。
09/02/10 23:15:08 d1Cz2CKr0
ちと教えてくれい。
JscriptのSort関数ってUWSCで扱えるかしら?
連想配列のソートを使って凌いでしまったんだけど、
もし使えるようなら、そのうち、ちゃんとw悩んでみようかと思って…。

883:名無しさん@お腹いっぱい。
09/02/11 00:17:02 HuYbgfa/0
>>882
無理じゃね?
そういうCOMオブジェクトがあるとも思えない。
DLLの場合は配列を渡せればいけるかもしれない。

と思ったけど、データベース使えばSortできるっぽいね。
テーブル作るのめんどくさそうだけど。

884:名無しさん@お腹いっぱい。
09/02/11 01:07:21 kWARHqJn0
>>883
レスサンクス。
時間掛けずにヨカッタw

885:名無しさん@お腹いっぱい。
09/02/13 14:30:03 3ZWIkmUk0
com操作から指定の同じ画像が2枚以上あるかどうかのチェックを
するスクリプトを作っています。

<img alt="画像" src="/img/member/status_01.gif?1234414294" />

これがそのソースなのですが、altの画像の個数でもおkです。とにかく2個以上
あったらメッセージボックスで知らせてくれるみたいなのができたらと思っています。

886:名無しさん@お腹いっぱい。
09/02/13 15:36:56 yfzZRrrS0
そうですか

887:名無しさん@お腹いっぱい。
09/02/13 16:29:22 mUOb2ZH60
>>885
一致するやつの個数を数えるだけですよね

888:名無しさん@お腹いっぱい。
09/02/13 16:31:07 3ZWIkmUk0
>>887
画像があるかどうかというのはできると思うのですが、同じ画像が2枚あるかどうか
となるとちょっと私のスキルでは難しいので訊いて見ました。

数を数えなおかつメッセージボックスなどで同じ画像が2つ以上あると知らせてくれる
というものです。

889:名無しさん@お腹いっぱい。
09/02/13 16:39:01 mUOb2ZH60
>>888
cnt = 0
while 全部処理
 ifb 画像一致 then
  cnt = cnt + 1
 eneif
wend
ifb 2 <= cnt then
 MsgBox()
endif


890:名無しさん@お腹いっぱい。
09/02/13 17:35:13 3ZWIkmUk0
メモリが・・・というエラーがでる。
今、他の手法でやってますが、IE.document.body.innerHTMLで
画像で使われてる文字の数というので判断しようとしています。

一つだけの場合、ちゃんとうまくいきました。しかし上記のやつをすこし
変えてやってみましたが駄目でした。

891:名無しさん@お腹いっぱい。
09/02/13 17:43:52 Ro94SGUQ0
情報を小出しにするのはやめてください。
チャットじゃないので整理してまとめてから書き込んでください

892:名無しさん@お腹いっぱい。
09/02/13 18:00:45 3ZWIkmUk0
 str = "UWSC"

 ifb pos(str, IE.document.body.innerHTML) then
 MsgBox("あるよ")
endif

画像でエラーが出るので上記のやつで挑戦してます。
HTMLにUWSCという語句が2つ以上あればメッセージ
ボックスにあるよと表示されるというものです。

ひとつでは成功しています。

893:名無しさん@お腹いっぱい。
09/02/13 18:30:14 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:名無しさん@お腹いっぱい。
09/02/13 18:34:04 3ZWIkmUk0
全部処理についてkwskm(_ _)m

895:名無しさん@お腹いっぱい。
09/02/13 18:40:58 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:名無しさん@お腹いっぱい。
09/02/13 18:44:29 mUOb2ZH60
見落とすかもしれないからもう一度書くけど、
pos()の3番目に2って指定すれば、2個目の位置を調べてくれる。
つまり、2個目があるかないかはPos()一回でわかる。

だからこれだけで完成
str = "UWSC"
ifb pos(str, IE.document.body.innerHTML, 2) then
 MsgBox("あるよ")
eneif


897:名無しさん@お腹いっぱい。
09/02/13 18:45:01 3ZWIkmUk0
詳しい説明どうも。
しかし、みんなどこで勉強してるんですか?
とりあえず、UWSCの掲示板とマクロテクニックという本、
検索などでやってますが、なかなか目的の回答にたどり
つけないことも多く、時間ばかりがかかってしまいます。

このスクリプトだってもう何時間も費やしていますからね・・・

898:名無しさん@お腹いっぱい。
09/02/13 19:03:33 mUOb2ZH60
大事なのは情報の探し方。
探すためのキーワードはマニュアルを順番に読んで探し出す。

UWSCは覚えることは少ないほうだし、ヘルプにまとまっているからヘルプを見る。
基本の使い方はサンプルコードを探す。
で、一つ一つの細かい使い方は、それを確認するためのサンプルコードを自分で書く。
公開されたツールを使うのも手。

あとはテクニックを覚えて応用していく。

if Pos() then  で、存在チェックするというのもテクニックのひとつ。
Pos() は文字列の位置を返すだけだけど、取りうる値が1以上になるのでそういう使い方ができる。
if 文が、0か0以外という判断基準だからできることだけど、
それを知ってればほかの関数でもそういう使い方ができるかどうか判断できるわけ。


899:名無しさん@お腹いっぱい。
09/02/13 19:14:00 6zXjaVj00
俺個人の意見だと、そういう書き方は好きじゃないし人にも勧めないな…



900:名無しさん@お腹いっぱい。
09/02/14 03:00:48 lbAzgdO20
>>897
とりあえずnotepad以外のエディタを用意して文字列ハイライト&F1key(大体のエディタがそうだと思う)
でHelpファイルの項目にジャンプできるようにする。
その後、Helpファイルのサンプル、ネットに挙がっている短目のサンプルをコピペ。
エディタのショートカットKeyからサンプルを実行して結果を見たうえで、関数等を理解。
自分はこんな感じかな?

901:名無しさん@お腹いっぱい。
09/02/14 09:57:37 l4ICTSX40
>>899
でも、
flag = true
if flag = true then
みたいに書くと期待通りの動作にならないですお。

いや、DLLとかの外部プログラムで言うtrueが、自分の処理系でのtrueと一致するとは限らないというべきか。


902:名無しさん@お腹いっぱい。
09/02/14 14:13:39 uUjk6ugC0
>>901
IF flag <> 0 THEN MSGBOX("真") ELSE MSGBOX("偽")

903:名無しさん@お腹いっぱい。
09/02/14 15:31:54 kc2bS8a/0
>>900
私もかれこれ1年ぐらいやってますが、実際に自分でサンプルとかを
やってみるのがいいみたいですね。本の内容とかを理解するより
結果そっちのほうが早かった。

あと、情報量が格段に違うので本はお勧めできない。価格が高いというのもあるけど。
本の内容なんかヘルプの1/100も載ってないしw掲示板での回答のほうが例としても
すぐれてるよね。本は失敗したわぁ~w

904:名無しさん@お腹いっぱい。
09/02/14 15:46:35 w6PpT+IB0
>>901
俺はUWSCなんて一度もさわったことはないが
if flag = trueだと代入してないか?
他の割とよくある言語だと、
flag == trueとか
flag eq trueとか
そもそも条件比較せずに
if flag thenって書き方だと思うが
=が比較にも使えるんだったらすまぬ

905:名無しさん@お腹いっぱい。
09/02/14 20:38:54 +5xZKKxJ0
複数開いてるIEでウィンドウ情報に「ソフトウェア」とか特定の文字が含まれている
ウインドウを閉じたいのですが、選択して閉じることはできますか?

906:名無しさん@お腹いっぱい。
09/02/14 20:42:00 mPJsDYRZ0
>>904
普通に使えるお。
条件式では代入は行われないっス。
唯一Evalの代入で ':=' があるくらいで '==' とかはないっス。
おばかには有難いすw

907:名無しさん@お腹いっぱい。
09/02/14 21:00:49 qfzVhbRR0
>>905
できます

908:名無しさん@お腹いっぱい。
09/02/14 21:08:42 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:名無しさん@お腹いっぱい。
09/02/14 22:24:08 oEG6WUs+P
なるほど
ヘルプを文字通りに解釈すればIF文は真偽をチェックするのであって
それと0チェックは等価ではないという事か
(実際は0と0以外のチェックだろうけど)

C言語にどっぷり漬かった脳なので>>898が言っているような
書き方のほうが理解しやすく感じてしまった

910:905
09/02/14 22:56:30 +5xZKKxJ0
事故解決しました。

しかし、次の問題が。ソースから
<!-- △△△ -->
複数のアドレス
<!-- ◇◇◇ -->

このようなソースがあった場合、三角から四角までの間にある複数アドレスを
ゲットして一個ずつ開いていくというのはできますか?

ちなみに間になければ似たようなアドレスは開けています。上でも書きましたが
改めてソースを書いときます。
IE = CREATEOLEOBJ("InternetExplorer.Application")
IE.visible = True
IE.navigate("URLリンク(www.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:名無しさん@お腹いっぱい。
09/02/15 00:48:48 48UC/FQI0
>>908
if flag = true とかいう書き方をしてると
if POS() = true というバグを見落とすことになる。
flagにしたって、状態がOn/Offだけとは限らない。
ボタンは白黒が基本だけどグレーだってある。
拡張してグレーを入れるとき、
何も考えずに取得した状態を放り込んでるとバグが発生することになるが、
自分がいじってない場所に影響が出るとは考えにくいし。

なにより、取りうる値をいちいち調べないといけない if flag = true なんか使ってると手間が増えるだけ。

912:名無しさん@お腹いっぱい。
09/02/15 01:18:42 48UC/FQI0
>>910
<!-- △△△ -->と<!-- ◇◇◇ -->を除外ということならシンプルだけど
<!-- △△△ -->と<!-- ◇◇◇ -->の間を処理するというのは、その処理基準が不適切と思われる。
ほかに手がなければしょうがないけど。
① FOR A = 0 TO (KAISU - 1); start = A + 1; next   // <!-- △△△ -->が出るまで空回り
② FOR A = start TO (KAISU - 1); 処理; next   // <!-- ◇◇◇ -->が出るまで処理
①で空回りした回数をstart にセットして、②でstartから再開すればいい。
<!-- △△△ -->が一度も出てこなかった場合、startにKAISUが入るので、多分②は素通りする。

IE = CREATEOLEOBJ("InternetExplorer.Application")
IE.visible = True
IE.navigate("URLリンク(www.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:名無しさん@お腹いっぱい。
09/02/15 01:38:43 h4gEwsYs0
ちなみにその考えじゃ永遠に無理。

914:名無しさん@お腹いっぱい。
09/02/15 01:53:42 MQRSTk0U0
こんなことができたらいけるかもと考えました。

1、三角から四角までの文字列をゲット。
2、1の中のアドレスだけゲット。
3、上記のやつでアドレスを一個ずつ巡回。

1は、HTMLで見ると表示されてるやつです。コメントというのかな?


915:名無しさん@お腹いっぱい。
09/02/15 04:44:36 ZJEnRiKf0
>>911
> if flag = true とかいう書き方をしてると
> if POS() = true というバグを見落とすことになる。

バグとか言う以前に、そんな書き方はしない。
思いつく時点でおかしい

なんで、IFの条件文でTrue/FalseのBoolean型をチェックするのに
その条件文の中でわざわざTrue/FalseのBoolean型と比較する必要があるのか
無意味な重複になってる

916:名無しさん@お腹いっぱい。
09/02/15 06:36:23 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:名無しさん@お腹いっぱい。
09/02/15 11:31:41 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:名無しさん@お腹いっぱい。
09/02/15 20:05:10 LdrnYZV60
だから、flag = trueに違和感を感じる人は
boolean型がないC畑の人だけで
boolean型がある言語系の人は何の違和感もないんだって
flagって変数がboolean型なんだな。って思うだけだから

919:名無しさん@お腹いっぱい。
09/02/15 20:30:21 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("URLリンク(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:名無しさん@お腹いっぱい。
09/02/15 20:56:45 48UC/FQI0
>>918-919
まあPos()のように0と0以外で判断するのはC言語系の考えとしても、
trueの定義がfalse以外のものとされてるのは、他の多くの言語で共通してるようだけど。

確かにtrueしか代入しないのなら確実に動作しそうだけど
なんかの拍子にごみが入ったとき、trueで比較するとどんな動作をするか分からない。
まあごみが入った時点ではじかれるべきだからむしろtrueと比較すべきかもしれん。
つまりelseなんか使うなって事だ・・・

921:名無しさん@お腹いっぱい。
09/02/15 21:21:15 o+fSWy2v0
型通りに書けばいいだけじゃ?、
flagはboolean型とみなしてコード書いてんだからtrueでいいし、
Pos()はint型だからtrueでの判定はナンセンスってだけ。

922:名無しさん@お腹いっぱい。
09/02/16 06:46:17 EmOr31T+0
For y = 0 to 250

Call ~

Next
POFF(P_SUSPEND2)

と言う感じで外部スクリプトを呼び出して繰り返し作業をさせているのですが
なぜか毎回209回で終わってスタンバイになってます
なにか制限でもあるのでしょうか?

923:名無しさん@お腹いっぱい。
09/02/16 09:09:28 Y25mNBPu0
>>922
変数がかぶっているとか? callをコメントアウトしたらどう?

924:名無しさん@お腹いっぱい。
09/02/16 23:09:04 QUmq6Zuh0
>>922
//主
public i
for i= 1 to 250
  call call2.uws
next

//call2.uws
print i
でテストしてみたけど、制限などないようだよ…(アホだな自分もw)

925:名無しさん@お腹いっぱい。
09/02/16 23:19:50 +qFEC0Zh0
自作関数で戻り値を配列で返すにはどうすればよいのでしょうか?
普通に配列を指定すると怒られます。

926:名無しさん@お腹いっぱい。
09/02/17 01:13:40 shI/FnE+0
>>925
イマイチ質問の意味がわからんけど関数内でResizeしてないんとちゃう?
URLリンク(www.geocities.jp)

927:名無しさん@お腹いっぱい。
09/02/17 03:52:10 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:名無しさん@お腹いっぱい。
09/02/17 06:36:49 hsq0Fe2s0
>>925
一言で言えば、無理

929:名無しさん@お腹いっぱい。
09/02/17 12:52:47 zwqJ4YAK0
>>925
俺もそれやろうとしたけどできなかったんで、配列のグローバル変数使ってやりとりしてるな
かっこ悪いけど


930:925
09/02/17 15:04:26 zlTNHss50
うーん、やっぱりできないっぽいですね
関数自体をループさせるか、グローバル変数使うしかないのかな…
ありがとうございました

931:名無しさん@お腹いっぱい。
09/02/17 15:42:00 gznT5Jkz0
>>930
いや、>>927は無視ですか。

関数の引数を定義するときに、var 変数名 と定義してやれば、値の受け渡しができます
同じ変数名ならグローバル変数みたいに使える。
2次元配列とかもできる。
ちょっと配列数と添え字がややこしいけど。

dim a[0]
hoge( a )

FUNCTION hoge( var a[] )
 dim i
 resize(a,10)
 for i = 0 to 9
  a[i] = "x"
 next
FEND

>>927はfor文 でResizeしてるっぽいけどありなのか。


932:名無しさん@お腹いっぱい。
09/02/17 16:19:37 gQhLPPZu0
FOR文自体は、中がループしてるだけで
ループ毎にFOR文の行を処理してる訳じゃないからね。
2行に分けて書くか、1行にまとめて書くかだけの違いで。


933:名無しさん@お腹いっぱい。
09/02/17 16:52:39 gznT5Jkz0
いや、
for i=0 to Max
っていうのは、i とMaxを比較するんじゃないかなと。
そしたらMaxは毎回処理されるんじゃないかなと思ったんだけど
UWSCの場合はForが回数固定でカウンタとか保護されてるから大丈夫なんだろう。
いや、サイズが一緒だから変化がないだけかも。

C言語でいうと
for( i=0; i<Max; i++ )
iやMaxはループ中で変更できちゃうんだよね。
そんで初期化以外は毎回評価、実行されるんだよね。

初期化が入ったとき1回だけなのは当然だけど、終了条件の実行回数は分からない。
だからC言語でループ回数に関数を使うときは
for( i=sizeof(array); i>=0; i-- )
て言う風に初期化子として使う。
いや、そんなことしてなかったな。俺は。
どうせ最適化してくれるだろうと思って。


934:名無しさん@お腹いっぱい。
09/02/17 17:00:23 gznT5Jkz0
// forのテスト。終了条件を関数で指定するとどうなるか。

for i = 0 to test(i)
print "roop" + i
sleep(1)
next

Function test(i)
print "Func" + i
result = 2
FEND

実行結果。終了条件の関数は、カウンタの初期化の後1回だけ呼ばれる。
Func0
roop0
roop1
roop2


935:925
09/02/18 13:34:14 YzuvFpA90
恥ずかしながら>>927の意味がよくわかってませんでした(;´Д`)

>>931
わかりやすい説明ありがとうございます
これは便利ですね!

936:922
09/02/19 18:03:25 LQepcHmb0
ログが最大209行で終わっていたというあほな理由でした
吊ってきます

937:名無しさん@お腹いっぱい。
09/02/19 18:22:19 ac9y3F6q0
(´・ω・`)

938:名無しさん@お腹いっぱい。
09/02/19 20:54:42 UxnJe9qS0
複数行のテキストを入力できるようなインターフェースって作れる?
INPUTだと1行だけだよね

939:名無しさん@お腹いっぱい。
09/02/19 21:04:22 vC1/avge0
フォームでできるよ

940:名無しさん@お腹いっぱい。
09/02/19 21:19:52 UxnJe9qS0
>>939ありがとう

941:名無しさん@お腹いっぱい。
09/02/20 02:33:51 Zfo0EG+70
IEでの動作の途中に、別ウインドウのコマンドプロンプトに文字列を記入するマクロをつくっているのですが、
SENDSTR関数か、SCKEY関数か、どちらの方が安定するものでしょうか?
SENDSTR関数の方がいいような気もするし、
SCKEY関数の方が
コマンドプロンプトのウインドウをアクティブにしなくていい分、
有利な気もするし、、、
ちなみに、CPU負荷が高い状態での動作になります。
どちらがいいでしょうか?

942:名無しさん@お腹いっぱい。
09/02/20 06:24:43 cWHe1c0/0
IEの特定のアドレスが含まれている画像のクリックするスクリプトを組んでいます。
前に、指定の範囲のアドレスを・・・と書いたものです。

他に方法はないかとソースなどをみてみたのですが、画像のアドレスなら前回の
場合と違い数が少なくできそうだなと思いました。

<a href="○○" target="_blank" onClick="return top_ekiden_click_chance('top4', '○○')"><img src="●●"></a></p>

上のソースの●●の部分は、複数あるのですが、POSでゲットして巡回できたらと思っています。
ちなみにリンクの場合上記にも書きましたが下のようになります。

IE = CREATEOLEOBJ("InternetExplorer.Application")
IE.visible = True
IE.navigate("URLリンク(www.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


943:名無しさん@お腹いっぱい。
09/02/20 11:35:06 mn16sQrP0
>>941
SendSTR()は使えないよ。
ショートカットでのコピペもできない。
右クリックメニューを出して貼り付けは可能。


944:名無しさん@お腹いっぱい。
09/02/21 19:32:30 P+noKJtd0
uwscのエラーウィンドウを消すマクロってありませんか

945:名無しさん@お腹いっぱい。
09/02/21 19:49:38 OlRYAKfW0
>>944
まずはエラーメッセージを抑制するようにしたらいいよ。
OLEなら関連関数の例に書いてあるし、それ以外はUWSC本体の設定にあるか、INIファイル編集するとか。

946:名無しさん@お腹いっぱい。
09/02/21 20:01:51 P+noKJtd0
>>945
具体的にどうすればいいか教えていただけますか


947:名無しさん@お腹いっぱい。
09/02/21 20:10:20 P+noKJtd0
例外エラー対策ならマクロの
最初に
TRY
を入れて

マクロの末尾に
EXCEPT
endtry
あたりいれるのがもっとも簡単なんでしょうか

948:名無しさん@お腹いっぱい。
09/02/22 10:05:02 Rpahjq6x0
>>947
まぁ、UWSCで用意されてるものだしなぁ
例外処理でこれ以上簡単なのはないと思うよ。
…エラーを起こさせないという前提で作ればもっと簡単になるけどねw

あと、全体を無理やり囲うのはどうなん

949:名無しさん@お腹いっぱい。
09/02/22 17:59:07 a3nz7nXd0
特定の文字を判定してそこまでの文字を消すマクロはありますか?

例えば
「あいうえお」と入力してあって
「う」まで消したい、そうすると
「あい」となるようなマクロです。

950:名無しさん@お腹いっぱい。
09/02/22 18:28:16 DuKIHBzQ0
POS COPY CHGMOJ でいいじゃねーの

951:名無しさん@お腹いっぱい。
09/02/22 18:31:19 K0Xm20HXP
string = "あいうえお"
find = "う"

MsgBox(COPY(string, 1, POS(find,string)-1))

いや、違う?
この世界に「愛」だけを残す方法を我々に聞いているのか?

952:名無しさん@お腹いっぱい。
09/02/22 19:08:17 a3nz7nXd0
>>950
初心者なのでよくわかりません

>>951
できれば表計算ソフトで使用したいのですが・・・

953:名無しさん@お腹いっぱい。
09/02/22 19:14:53 mX0F8+M00
>>952
冗談じゃなく、ロジックを正しく説明してくれないとプログラムなんか書けませんから。
日本語から勉強してきてください。


954:名無しさん@お腹いっぱい。
09/02/22 19:16:18 lHLWjdVe0
>>952
その表計算ソフトのスレででも聞けよ…

955:名無しさん@お腹いっぱい。
09/02/22 21:10:11 a3nz7nXd0
>>953
セル内に
1戦1勝0負
10戦5勝5負
1000戦500勝500負



となっているものを負を消して
1戦1勝
10戦5勝
1000戦500勝



としたいのです。
よろしくお願いします。

956:名無しさん@お腹いっぱい。
09/02/22 21:21:24 feS5VAah0
丸投げしたいなら他行ってくれ
スレ違いだ

957:名無しさん@お腹いっぱい。
09/02/22 21:37:49 a3nz7nXd0
>>956
そうですか、自分で努力します。
失礼しました。

958:名無しさん@お腹いっぱい。
09/02/22 22:42:54 K0Xm20HXP
うむ
たとえばExcelの場合だとしよう
A1:A100(A1,A2,・・・A100のセル)にそのデータがあるとすればB1に
=LEFT(A1,FIND("勝",A1))
を入れる。次にB1選択した状態でメニューから
編集-コピーを選択、B2:B100選択した状態で
編集-貼り付けを選択。
さらにB1:B100を選択した状態で
編集-コピーを選択、
C1を選択した状態で、
編集-形式を選択して貼り付け(だったっけ?)-値を選択すると
C1:C100に目的のデータが入力される

UWSCでやれない訳ではないけれど結構大変になる
一般的な表計算ソフトの標準機能でこのような簡単な手段は
用意されているのでそちらを調べたほうがいい



959:名無しさん@お腹いっぱい。
09/02/22 23:27:25 q6eIkfWd0
>>958
反応するなよ。反応されるとそれに対して反応したくなる…
そんなに面倒なことせんでも(ry

960:名無しさん@お腹いっぱい。
09/02/22 23:54:16 a3nz7nXd0
>>958
ありがとうございます。参考になります。

961:名無しさん@お腹いっぱい。
09/02/23 04:11:08 S/nw+oX60
IEが複数開いてたとしてウインドウタイトルに特定の文字が含まれているもの
以外閉じるということはできますか?

例えばタイトルに「自動化ツール」というのがあるとして、その他タイトルに「自動化ツール」
が無かったら閉じるといった感じです。

962:名無しさん@お腹いっぱい。
09/02/23 08:00:29 7fqz0Mlm0
>>961
できます

963:名無しさん@お腹いっぱい。
09/02/23 10:33:55 S/nw+oX60
>>962
死にうせろ

964:名無しさん@お腹いっぱい。
09/02/23 11:15:39 H0niA5cQ0
>>961
簡単だよ

965:名無しさん@お腹いっぱい。
09/02/23 11:42:07 PyFhHQu70
>>961
できます。簡単だから頑張って

966:名無しさん@お腹いっぱい。
09/02/23 16:39:43 8oL82p7A0
>>961
タブブラウザ(FireFox3とか)を使うと、たくさんタブが増えても閉じるボタン一発で閉じれるよ。
ウィンドウをいっぱい開いちゃってもタスクバーで右クリックしてまとめて終了すればいい。
Alt+F4で連続終了させるのが簡単。Alt+TABやAlt+ESCと組み合わせてもいいし。


もしそういうスクリプトを作ったとして、たとえば銀行取引のページが別窓で表示されたときに
同じタイトルだからと言って閉じてしまうと取引が不完全なまま終了しちゃっておかしくなるかも。

あと、UWSCってタイトルでアプリを終了させようとすると、
UWSCってフォルダを開いてるエクスプローラーが閉じられたりUWSC自身が終了したり変なことになる。
そういうヘンなの作ってなにか意味あるの?


967:名無しさん@お腹いっぱい。
09/02/23 21:08:56 WFLH0UN70
それはお前だけじゃね?

968:名無しさん@お腹いっぱい。
09/02/24 00:04:30 3MTrBR1N0
>>961
ウィンドウタイトルに「自動化ツール」が含まれない IE6 を終了

DIM i

FOR i=0 TO GETALLWIN()-1
  IF STATUS(ALL_WIN_ID[i], ST_CLASS) <> "IEFrame" THEN CONTINUE
  IFB !POS("自動化ツール", STATUS(ALL_WIN_ID[i], ST_TITLE)) THEN
    CTRLWIN(ALL_WIN_ID[i], CLOSE)
  ENDIF
NEXT

969:名無しさん@お腹いっぱい。
09/02/24 00:47:30 rOG7rC/gP
私も考えてみたのですがIE7でタブを使っている場合は
どうすればいいんでしょうね

それさえ実現できれば>>961さんの要求を完全に満たせると思うのですが

970:名無しさん@お腹いっぱい。
09/02/24 11:56:45 1GbWnsrA0
chkimg()で透過色指定+形でチェックを同時にできるようにしてほしいのう
画像内の文字に対するgrepみたいなのを作ってるのだけどフォントカラーが変わったら使えなくなってしまう
フォントスタイル自体は固定なので問題ないんだけど

971:名無しさん@お腹いっぱい。
09/02/24 15:42:30 CGjnVP+X0
chkimgX() みたいな関数作って
内部で透過色&形の2重にチェックするぐらいしか思いつかないわー

972:名無しさん@お腹いっぱい。
09/02/24 17:02:53 Jl8nOyx+0
いやそれ画像2枚いりますやんw

973:名無しさん@お腹いっぱい。
09/02/24 20:21:28 7Fr+80aB0
単純な input() や slctbox() ではなく、
リストボックスをいくつか置き、さらにそのリストボックスの値で
ラベルが動的に変化するようなフォームを使いたいのですが、

同じようなことを試みられた方はいらっしゃいますか?
やはり外部DLLを自作するしかないでしょうか。

974:名無しさん@お腹いっぱい。
09/02/24 21:47:44 AV7g6HDD0
>>973
DLLで画面出す気?
プロパティみたいな感じで?
UWSCの有料版で画面作れるらしいけど、
無料がよければ、最近HTAていうの知ったんだけど、
DynamicHTMLで画面作って、結果をクリップボード経由で渡すようなのなら作れると思う。

リストボックスが変更されたら表示を変更。
OKボタンにOnClickイベントとしてクリップボードにセット。
というHTMLを作って拡張子をHTAに変更。
いや、別にHTMLのまんまでもいいんやけど画面まわりうざいし。

あ、いつどうやって終了を知らせるかが問題だな。
・・・


975:名無しさん@お腹いっぱい。
09/02/24 21:51:45 D2y5nC2+0
ajax使用webサイト超めんどー
なんとかなんない?

976:名無しさん@お腹いっぱい。
09/02/24 22:32:36 7Fr+80aB0
>>974
ありがとう、参考になりました。

977:名無しさん@お腹いっぱい。
09/02/25 13:22:51 dj7Ej2fH0
>>968
思うような動作ができました。m(_ _)m


978:名無しさん@お腹いっぱい。
09/02/26 18:52:26 NcOYiIHC0
多重起動禁止はiniファイルを弄ることで簡単にできるようになったのですが
ほかのスクリプトの実行が終わった後に、後のスクリプトを実行できるようにする方法はありませんか?

979:名無しさん@お腹いっぱい。
09/02/26 19:39:33 ncgoh4z50
callで呼び出せば良いんじゃない?

980:名無しさん@お腹いっぱい。
09/02/26 19:40:54 NcOYiIHC0
いや 先に実行したスクリプトが終わった判定はどうすればいいのかなと思いまして

981:名無しさん@お腹いっぱい。
09/02/26 19:41:18 NcOYiIHC0
ああ連続でやればいいんですね

982:名無しさん@お腹いっぱい。
09/02/27 16:52:50 fl1SuMSB0
>>975
FLASH,ActiveX,,JAVAappletなんかよりはよっぽど楽

983:名無しさん@お腹いっぱい。
09/02/28 21:17:11 hQtF23UU0
slctboxの戻値「slct_1」等は出力させると数字のみになるのはなぜなんでしょうか?
select ~selend文で
caseのあとは"slct_"+数字でも数字のみ指定でも正しく動いているようですが

984:名無しさん@お腹いっぱい。
09/02/28 23:33:07 lrDMYjZcP
>>983
一般的に定数は何かしらの数値に割り当てられるのが普通です。
数値にしておくと演算子=,<>等の処理をそのまま流用できるから設計上楽なのです。
それならば文字列として"SLCT_1"として持たせたほうが分かりやすいのでは?とも考えられますが、
小さい情報量にしたほうがexeサイズが小さくて済んだり、計算量が少なくて済むなど
メリットが大きいのです。
ただしSLCT_1が1と出力されるからといってバージョンアップ等で今後変更される可能性があるので
必ず比較する場合は
「IF ret=1 THEN・・・」ではなく
「IF ret=SLCT_1 THEN・・・」とすべきでしょう。

985:983
09/03/01 00:17:23 re5Hkvhc0
なるほどためになりました
サンクス

986:名無しさん@お腹いっぱい。
09/03/01 08:13:50 c3BdarSQ0
<img src="http://~~~/Apos/img/web/10174/106711_1.gif">

リンクに使われている上記のような画像が複数あったとします。
ページ内にある全ての途中まで共通しているURLの画像をゲット
してクリックすることはできますか?

http://~~~/Apos/img/web/10174ここまでが一緒で後は違うアドレスです。

987:名無しさん@お腹いっぱい。
09/03/01 12:17:03 jADlBu/J0
できますよ

988:名無しさん@お腹いっぱい。
09/03/01 17:53:19 b7uK3KHI0
// IEで表示中のページにリンクされているzipへのリンクを取得し、IEDownload()関数でダウンロードする。
while true
 data = IEGetData( IE, "TAG=A", i )
 Src = IEGetSrc( IE, "A", i )
 if !length(Src) then break
 Link = BetweenStr( Src, "href=<#DBL>", "<#DBL>" )
 ifb "zip" = Copy( Link, Pos(".", Link, -1) + 1, Length(Link) - Pos(".", Link, -1) ) Then
  IE.navigate( Link )
  IEDownload( IE )
  break
 Endif
 i = i + 1
wend

Function IEDownload( var IE )
Fend


989:名無しさん@お腹いっぱい。
09/03/01 19:53:07 c3BdarSQ0
>>987
死にうせろ2

990:名無しさん@お腹いっぱい。
09/03/01 20:33:14 q5FcoyWP0
>>989
簡単だよ 自分の頭蓋骨の中をたまには使えよ

991:名無しさん@お腹いっぱい。
09/03/01 21:14:20 b7uK3KHI0
data = IEGetData( IE, "TAG=A", i )
これってAタグならラベル部分、その他ではValueを取り出せるんだけど
ラベルを指定してクリックするのがIELINK()
この後に
IELINK(data)
って入れてもいいんだけど、ダウンロード用ページだと同じラベルでいっぱいファイルがある。
だからUWSCの関数では番号指定とかでもしないとクリックできない。
まあリンクは簡単に取り出せるからIE.Navigate()で開けばいいんだけど

「ファイルのダウンロード」窓がクリックできん・・・
ボタンが反応はしてるんだけどクリックできん。
CtrlWin()でアクティブにしてもアクティブにならない。
以前作ったときはちゃんと動いていたんだけどなあ・・・
画像の保存とかページの保存とかならIEの子ウィンドウとして拾えるけど
ダウンロードは親子関係がないっぽいし。
モーダルとモードレスで親子関係が違ってくるとかなのかな。
いや、つかんでもクリックできないんだよな。

親子両方クリックしたらアクティブになった。なんか裏のやつを子として処理してたのかな。
でもフォーカスが「保存」ボタンには移ってるんだけどなあ・・・
名前をつけて保存ならクリックできるのに。

戦車で野球のボールを投げたら時速327キロか。


992:名無しさん@お腹いっぱい。
09/03/02 00:20:27 OsLHIqg20
RecIE使ってみたけど、ダイアログのクリックは拾ってくれないな。
IELink(IE,"DL002")
BusyWait(IE)

本体で記録してみたけど
ACW(GETID("ファイルのダウンロード","#32770"),422,375,435,243,0)
ScKey()はだめだったけどMouseOrg()で窓に直接Kbd()でならもしかしていけるかも。

だめだった。
しかし、MouseOrg()してKbd()してClkItem()したらいけた。
Kbd()でアクティブ化に成功してるんだろう。


993:名無しさん@お腹いっぱい。
09/03/02 11:20:51 OsLHIqg20
「この種類のファイルであれば常に警告する」のチェックを外せばそのままダウンロードが開始されるんだな・・・
今までやらなかったけどもうこれが一番の解決法か・・・
と思ったけど保存ダイアログが出てこないと思ったら勝手に起動されちゃうんだな。
上書きの警告もないし、キャッシュにしか落ちてないんだろう。
これじゃダウンロードにならない。
URLToFileとかいうのが使えればいいんだけど今やってるところはパスワード制限かかっててアクセスエラーになるからできないし。

>MouseOrg()してKbd()してClkItem()したらいけた。
これについては親子両方に送ればうまくいったが、子だけに送ったらだめだった。
多分他の窓をクリックすることでアクティブ状態が切り替わってうまくいってたんだな。
トップレベルなのに非アクティブなあの状態は何とかならんのか・・・

もしかしたらあの二重の窓の二つ目が開く直前に裏の窓をクリックしてしまうのが問題なのかもしれん。
親窓の方拾ったらスルーして待つかな。


994:名無しさん@お腹いっぱい。
09/03/02 12:25:41 MGuj9EpHO
他人が役立つ日記ならここで大歓迎
環境に依存した再利用性の低い独り言はブログにでも貼ったら?

995:名無しさん@お腹いっぱい。
09/03/02 13:02:26 pSlHrzIi0
次スレたててこい>浪費したやつ

996:名無しさん@お腹いっぱい。
09/03/02 17:11:41 OsLHIqg20
【速報】 全鯖規制ISP一覧 VIPPERのせいですね、わかります
スレリンク(news板)
URLリンク(qb5.2ch.net)

なんか祭りになってたんでスレ立てしてみたんです。
ねws
スレリンク(sec2chd板)

そしたら全サーバーで規制されました。


997:名無しさん@お腹いっぱい。
09/03/02 19:50:06 rP5khwz50
自動化ツールuwsc使いよ集まれ4
スレリンク(software板)

998:名無しさん@お腹いっぱい。
09/03/02 21:30:58 9PDTuTrY0
おつおつ。

999:名無しさん@お腹いっぱい。
09/03/03 02:16:28 0ITm2xmn0
999

1000:名無しさん@お腹いっぱい。
09/03/03 02:27:23 6utcIoKu0
んじゃ1000

1001:1001
Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch