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


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

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



1 名前:名無しさん@お腹いっぱい。 [2009/12/09(水) 05:27:33 ID:J1DL1P1U0]
Windowsを自動化させるツールUWSC。
www.uwsc.info/

uwsc使いのみなさま、マターリ己のスクリプトを晒しましょ。

74 名前:73 mailto:sage [2009/12/20(日) 18:36:46 ID:NXkHkjdJ0]
このスレは今後オレのメモとして使うからお前ら書き込むなよ。

75 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 18:54:23 ID:sezMof5L0]
了解

76 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 19:15:57 ID:wo2Kl350P]
メモは非表示にしたいので名前は「うんこメモ」でよろしく

77 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 20:15:15 ID:sezMof5L0]
// 待ちループなしのIE制御スクリプト
STOPFORM(true)
PUBLIC gIE2
gIE2 = CreateOLEObj("InternetExplorer.Application")
gIE2.visible = True
gIE = CreateOLEObj("InternetExplorer.Application")
gIE.visible = True
ID = HNDToID(gIE.HWND)
OLEEvent( gIE, "DWebBrowserEvents2", "TitleChange", "TitleChange" )
OLEEvent( gIE, "DWebBrowserEvents2", "BeforeNavigate2", "BeforeNavigate2" )
OLEEvent( gIE, "DWebBrowserEvents2", "NewWindow2", "NewWindow2" )
OLEEvent( gIE, "DWebBrowserEvents2", "OnQuit", "OnQuit" )
sleep(60)
CtrlWin(ID, CLOSE)
Procedure OnQuit()
 exitexit
FEND
Procedure TitleChange() // キャッシュに入ってない場合に2回呼ばれる。そして1回目はページ受信前のタイトル。
 Title = EVENT_PRM[0]
 print "TC " + Title
FEND
Procedure BeforeNavigate2() // 1回のページ操作につき1回呼ばれる。
 IE = EVENT_PRM[0]   // IEオブジェクト
 URL = EVENT_PRM[1]  // 開くURL
 print "BN " + IEGetData( IE, "TAG=title" ) + " " + URL
FEND
Procedure NewWindow2()
 EVENT_PRM[0] = gIE2  // 新しく指定するブラウザオブジェクト(自分自身は指定できない)
 EVENT_PRM[1] = True // Cancel flag
 print "NW"
Fend

78 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/21(月) 12:37:44 ID:9pLp31HK0]
>> ID:sezMof5L0
>>74のスレにそんなに顔真っ赤になったのか?
一生懸命メモ貼らなくていいよ。

79 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/21(月) 15:31:16 ID:1MBjkeY90]
XPでIE6使ってるけど、”ファイルのダウンロード”ダイアログではバックグラウンドで保存ボタンをクリックできないんだけど
これってダイアログが裏で動くのを却下してるってことなのかな。
いまさらだけど、たまにしか作らないとそういうところで引っかかる。
最初から表にいてもなんかクリックできなくて一旦裏にもって行かないといけなかったり。
結局AACで指定しないといけない。
”名前を付けて保存”ではそんなことなさそうなんだけど。
”名前を付けて保存”の上書き確認とかのメッセージボックスなら自作のGetChldID()ですばやく確実にIDをゲットしてクリックできるんだけどなあ。
>  Until !ClkItem( DlgID, "保存", CLK_BTN or CLK_SHORT or CLK_BACK )
>  Result = !CancelIfOverWrite(DlgID, 20)
> // ID: 名前を付けて保存ダイアログのID
> // false: キャンセルしてない true: キャンセルした
> Function CancelIfOverWrite(ID, TLimit)
>  Result = false
>  print "called CancelIfOverWrite()"
>  Repeat
>   sleep(0.1); TLimit = TLimit - 0.1; if TLimit < 0 then exit
>   if !IDToHnd(ID) then exit
>   CID = GetChldID( ID )
>  Until 0 < CID
>  // 上書き確認メッセージ処理
>  Result = true
>  while true
>   ifb 0 < CID then
>    ClkItem( CID, "いいえ" )
>   Else
>    ClkItem( ID, "キャンセル" )
>   Endif
>   sleep(0.3); TLimit = TLimit - 0.3; if TLimit < 0 then exit
>   if !IDToHnd(ID) then exit
>   CID = GetChldID( ID )
>  wend
> FEND

80 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/21(月) 15:44:52 ID:1MBjkeY90]
あと、>>77のBeforeNavigate2でIEオブジェクトをスレッドに渡して処理しようとしても、
IEオブジェクトを使うときにエラーになる。
グローバル変数を使ったりvarで渡したりしてみたけどどーしてもエラーになる。
普通にスレッド実行するときにはvar引数でIEオブジェクトを渡して使えてたんだけど、
BeforeNavigate2でスレッド呼び出ししたらなぜか駄目だ。
結局BeforeNavigate2では開始フラグをセットして、関数呼び出しは普通に待ちループでやった。
まあBeforeNavigate2も何度か呼ばれたりするみたいだしそのほうが2重起動とかなくてよかったみたい。
もしかして2重起動されるのが原因・・なわけないな。ちゃんと選別してたから。


81 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/21(月) 16:01:58 ID:GyHfCZ1l0]
独り言お疲れ様です

82 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/21(月) 22:51:55 ID:qrX4Zb5TP]
質問ならまだしも独り言口調ってマジムカつく
もっと読んでる人の事を考えてほしい



83 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/22(火) 09:25:16 ID:/egSySEF0]
>>82
質問ならまだしも独り言口調ってマジむかつきませんか?
もっと読んでる人のことを考えて欲しいと思っているのですが、貴方の考えはどうでしょう?

84 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/22(火) 11:16:08 ID:Y5j4vTTi0]
>>82は釣りだろ。

85 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/25(金) 22:12:23 ID:QQjADlGN0]
DOSコマンドの

pushd X:\Temp
del /q *.*
for /D %%f in ( * ) do rmdir /s /q "%%f"

というのをUWSCでやろうとして

DOSCMD("pushd X:\Temp<#CR>del /q *.*<#CR>for /D %%f in ( * ) do rmdir /s /q <#dbl>%%f<#dbl>", false, true)

と書いたけど、ちゃんと動いてくれない
どこが間違ってるの?

86 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/25(金) 22:22:33 ID:PGzvFXxt0]
<#CR>で繋げないんだろう。
|使うかバッチファイル作るかすればいいんじゃないかな?

87 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/25(金) 23:15:19 ID:QQjADlGN0]
だめだ、俺の知識じゃどうやってもできない
おとなしくバッチファイルにしとくわ

88 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/26(土) 08:32:23 ID:scMOjuw20]
>>85
複数のコマンドを連続で実行するなら丸括弧と改行で区切ればいいよ。
普通にコマンドラインで
> ( dir
とだけ入力すれば、More?って聞いてくる。
> )
で閉じるまで実行待ち状態。

パイプも連続実行だけど後のやつが受け取ったものをどう処理するか分からないからね。
しかしなんでループ処理でrmdirしちゃうのかねえ。

89 名前:85 mailto:sage [2009/12/26(土) 09:25:34 ID:MKs2n1Uw0]
動かなかった原因がわかった
UWSCスクリプトでやるときは%が一つ余分になるんだ

>>88
okwave.jp/qa4178416.html
俺はここから丸写ししただけ

90 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/27(日) 19:25:42 ID:Y9u003Cq0]
UWSCではっていうか、
VIDタグに流し込まれたHTMLって普通にDOMアクセスできないですよね。
だけどHTMLソースコードをテキストで構造解析するのはちょっと大変。
そこで、DIVタグのIDさえ取れればその配下のエレメントを処理できる関数を書いてみました。
判定関数をEVALでCALLすることで汎用的に使えます。
まだ動かしてはいないんだけど、一応EVALが関数を実行してオブジェクトを返せることは確認しました。

>// DOMアクセスで再帰的に配下のエレメントをたどる。
>// EVALの結果がemptyでなくなったらやめて結果として返す。
>Function SrchDomTree( elm, func )
> result = empty
> // 先に直接の子ノードを調べる
> for i = 0 to elm.childNodes.length
>  ret = eval(func)
>  ifb ret then
>   result = ret
>   exit
>  endif
> next
> // 孫ノードに入っていく
> for i = 0 to elm.childNodes.length - 1
>  ifb elm.childNodes[i].childNodes.length then
>   ret = SrchDomTree( elm.childNodes[i], func )
>   ifb ret then
>    result = ret
>    exit
>   endif
>  endif
> next
>Fend

91 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/27(日) 19:42:39 ID:Y9u003Cq0]
おっと。引数を追加する仕組みを忘れてました。
eval(func)のところは
eval( func + "(" + elm.childNodes[i] + env +")" )
呼び出しは
SrchDomTree( elm, "func", ", 引数2, 引数3" )
って感じになるかな?

判定関数はこんな感じ。
>// エレメントのouterHTMLを取ってAタグならIMG srcに"video_download.gif"があるか調べ、
>// あればouterHTMLからリンクアドレスを取得
>Function GetFLVLink(elm)
> result = empty
> str = elm.outerHTML
> ifb 1 = Pos( "<A", str ) then
>  ifb Pos( "video_download.gif", BetweenStr( str, "src=<#DBL>", "<#DBL>" ) ) then
>   result = BetweenStr( str, "href=<#DBL>", "<#DBL>" )
>  endif
> endif
>Fend
>
>// 指定されたリンク文字を持つリンクアドレスを取得
>Function GetKWDLink( elm, keyword )
> result = empty
> str = elm.outerHTML
> ifb 1 = Pos( "<A", str ) then
>  ifb Pos( keyword, elm.innerHTML ) then
>   result = BetweenStr( str, "href=<#DBL>", "<#DBL>" )
>  endif
> endif
>Fend

92 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/27(日) 23:50:29 ID:KdIVRt980]
ieをアクティブにした状態で以下を実行してみたのですがcom_error例外が発生しました
となってしまします
というか2行目以降でieを使うとエラーになります
解説サイトなど探してもあっさり進んでしまうのですが…何か足りませんか?
よろしくお願いします

ie = CreateOLEObj("InternetExplorer.Application")
SENDSTR(0, IE.document.title)



93 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/28(月) 00:21:27 ID:GHkoEhmr0]
>>92
変数や関数は大文字小文字を区別します。
ieはオブジェクトを受け取ってるけど、IEはオブジェクトを持ってないからエラーになります。
あと、document.titleのtitleもTitleと、大文字小文字を区別するのでエラーになるでしょう。
documentの方は割りと融通が利くようですが。

あと、IEオブジェクトなどはユーザーが閉じると無効になり、使えばエラーになります。
そういうのはそういうものとして使うか、終了を検知してスクリプトを適切に処理するかのどっちかになります。
ID = HNDToID(IE.HWND)
と、IDを取っておいて
ifb ! IDToHnd(ID) then
 // IDと元のIEオブジェクトは無効
 exit
endif
とやれば、com_error例外にならずに終了を判定できます。
IDToHnd()は終了検知に便利なのでお勧めです。

ちなみにウィンドウハンドルのゼロはデスクトップを意味するので、本来は数値で有効無効を判定できるものではないと思います。


94 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/28(月) 01:24:44 ID:8NfAzOMC0]
win7では使用できますか?

95 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/30(水) 11:24:56 ID:3SgEgPry0]
>>94
多分使えますよ。
でもいろいろ気をつけることはあるようです。
ttp://www.uwsc.info/faq.html


96 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/30(水) 11:45:30 ID:3SgEgPry0]
OLEEVENTを使っていてどーもクラッシュしまくるので、前後にsleep()を入れてみたら少し改善したようだ。

右クリックメニューをポップアップウィンドウとして検出しようとしたけど、
GetWindow( IDToHnd(ID), GW_ENABLEDPOPUP ) で取得できるのはダイアログ・ツールチップのほか、サブメニューだけっぽいね。
1個目のメニューは右クリックメニューですらポップアップじゃないらしい。
GetID( "", "#32768" )でいけるって本家の過去ログに書いてあったんだけど、やっぱそれが現実的だった。
メニューは簡単に閉じるから名前なし親子関係なしでも案外正しく取れるもんだ。
ただ、クリックできない病気のためにうまくいかない。

しかし、サブメニューの操作が必要なときはその方法ではIDが取得できないだろう。
サブメニュー用のID取得関数がたまたまできたので次レスに投稿する。
ちなみに、親子関係はメインウィンドウの子ということになる。
間違っても親メニューの子ではないので注意が必要。
いや、もしかすると親メニューの子であり、メインメニューの孫だったりするかもしれないが。

GetIDでやっているような、タイマーと永久ループの指定可能な関数にしてみたんだが、
それをfor文でやれるかなと思ったけど、回数を決定できる条件じゃないとだめだった。
具体的には、step0で永久ループにしようと思ったんですが、実行時に警告が出ました。
浮動小数点演算ではやってはいけない、ちょうど0になったときだけ終了という条件にすることでシンプルにできました。
ちゃんと動くかは試してないけど、まあ大丈夫でしょう。

ちなみに、動作確認などのテストコードに番号を振ってるんですが、そのfor文が108番でした。
間は結構飛び飛びだけど、年末にその番号にあたったんでなんだか縁起がいいかもです。


97 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/30(水) 11:57:01 ID:3SgEgPry0]
// サブメニューのIDを取得する。
// TLimit=-1 : 永久待ち
// TLimit=0 : 1回のみ
// 戻り値 0 : 該当なし -1:ダイアログ表示 その他:サブメニューのID
Function WaitSubMenuPopup( ID, TLimit = -1 )
 def_dll GetWindow(hWnd,long):long:user32.dll
 Public GW_ENABLEDPOPUP = 6   // ポップアップウィンドウ
 result = 0
 H = IDToHnd(ID)
 Repeat
  sleep(0.01)
  if 0 < TLimit then TLimit = TLimit - 0.01
  retH = GetWindow( H, GW_ENABLEDPOPUP )
  if ! retH then continue
  retID = HndToID(retH)
  Select Status(retID, ST_CLASS)
   case "#32768"  // メニュー
    result = retID
    exit
   case "#32770"  // ダイアログが表示されたらエラー中断
    result = -1
    exit
  Selend
 Until ! TLimit
Fend

98 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/31(木) 18:28:22 ID:Z8Iw0iCS0]
FOR文の使い方について教えてください。
以下のように書くと10から20までの数字が画面に表示されます。

FOR i = 10 TO 20 STEP 1
    FUKIDASI( i)
    SLEEP( 1)
NEXT

ところが各数字を10分の1にすると1から1.9までの数字しか表示されません。

FOR i = 1.0 TO 2.0 STEP 0.1
    FUKIDASI( i)
    SLEEP( 1)
NEXT

これはどうしてなのでしょうか?

99 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/31(木) 19:15:53 ID:8NQ2XvCh0]
STEP 0.2だと2が表示されるな。
挙動がようわからん…
何か0.124と0.125の間あたりで切り替わるようだが…
とりあえず
FOR i = 10 TO 20
//   多用するならj = i / 10とかして使う
    FUKIDASI( i/10)
    SLEEP( 1)
NEXT
とかするのが無難そうね。

100 名前:名無しさん@お腹いっぱい。 [2009/12/31(木) 22:41:43 ID:WvG0KKdQP]
>>98
誤差の影響です。
コンピュータはすべて2進法で計算していますが、
この2進法では0.1という数字を「正確に」扱う事が出来ないのが原因です。

これは私たちの身の回りにもよくある話です。
私たちが普段使っている10進法では「1/9」を小数で表現すると
0.1111・・・ですよね。
1/9を9個足せばもちろん1です。
しかし
0.111111111111111111と途中で数字を切り捨てて計算を続けたらどうでしょうか?
これを9個足しても
0.999999999999999999にしかならず、決して1にはなりませんね。

もちろん工夫をする事によってこの問題を回避する方法を持っている
計算プログラムも存在していますが、難しい処理が必要になるため
プログラムの価格が高価であったり計算する時間が長くなったりします。
uwscのようなプログラムでは一般的に誤差を持っています。

誤差を極力減らすためには>>99さんがおっしゃるように
なるべく整数のまま計算をするのが最も効果的な方法といえます。

101 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/01(金) 00:05:54 ID:zRjPwPJp0]
>>100
お前、頭いいな。
どこ大学出よ?

102 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/01(金) 01:08:17 ID:SeLmUNNh0]
この場合は誤差はないと思いますけど。

原因は多分、0.0を0と計算できないこと・・・
いや、やっぱり誤差かな?
回数を計算するときにUWSC内部で
(2.0-1.0)/0.1とかやってるんだろう。

10進数の0.1は、2進数で・・・
ttp://www.infonet.co.jp/ueyama/ip/semi_cnd/abacus.html
> ところで、10進数の 0.1 は、2進数では正確に表すことができず、 その近似値は 0.00011001100110011001100 … になります。

てことは・・やべ>>97は無限ループだ。
全て100倍して整数値で計算しないと。
んでもって確実に整数値にするためにINT()とか使わないと。




103 名前: 【末吉】   【1885円】 mailto:sage [2010/01/01(金) 01:51:39 ID:SeLmUNNh0]
!omikuji !dama

104 名前: 【ぴょん吉】 【605円】 mailto:sage [2010/01/01(金) 01:56:44 ID:JMt2GOx60]
てすと

105 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/01(金) 10:05:06 ID:SeLmUNNh0]
> Until !CEIL(TLimit)
>>97は判定をこーするだけでいいな。
複数条件だと論理演算がふつーにはできんからややこしくなるし。
!!(条件1) and !!(条件2)でも通るかもしれんけど。


106 名前:98 mailto:sage [2010/01/01(金) 11:48:35 ID:pAk0r2E30]
>>99-100

回答ありがとう。なるほど。

小数点以下を多めに表示させるとこうなりました。

FOR i = 1.0 TO 2.1 STEP 0.1
    FUKIDASI( FORMAT( i, 19, 17))
    SLEEP( 1)
NEXT

1.00000000000000000
1.10000000000000009
1.19999999999999996
1.30000000000000004
1.39999999999999991
1.50000000000000000
1.60000000000000009
1.69999999999999996
1.80000000000000004
1.89999999999999991
2.00000000000000000

0.1を正確に表せないとはいえ、誤差が拡大しないように調整されてるのかな。
回数が狂うのは>>102の言うように実行回数計算を別途やっていてその時点で誤差が出てるんですかね。

107 名前:98 mailto:sage [2010/01/01(金) 16:45:33 ID:wjuaj82V0]
小数の問題っていろんなところに出るんだなぁ。
ROUND関数って小数点以下を四捨五入する関数なんだと思うけど
入れる数字によってはおかしくなる。

FUKIDASI( ROUND( 12.5))
SLEEP( 1)

108 名前: 【大吉】   【313円】 mailto:sage [2010/01/01(金) 18:36:08 ID:h6GpVGPr0]
FUKIDASI( hoge(12.5))
SLEEP(1)

Function hoge(num)
 num = num + 0.5
 num = int(num)
 Result = num
Fend
これだとまともに動くなw
中でどんなことやってるんだろうか…

109 名前:名無しさん@お腹いっぱい。 [2010/01/01(金) 21:30:04 ID:RTODHS/O0 BE:4155991698-2BP(0)]
恐らくヘルプにも四捨五入とは書かれておらず「丸める」とあるはずです。
>>107の挙動を見る限り一般的に使用されている「偶数丸め」をそのまま採用しているかと。

偶数丸めというのは12.5のように12と13の中間の値を取る場合は
偶数側の値に切り捨てを行う処理方法です。13.5であれば切り上げて14とします。

round(14.5)も14になるはずですよ。

110 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/03(日) 10:53:27 ID:r0VUyURQ0]
>>90の修正
文字列をEVALに渡す場合、ダブルクォーテーションを付加しないと変数扱いになる。
数値を渡す場合は不要なので、SrchDomTreeを呼ぶときに付加しておいたほうがいいっぽい。
// SrchDomTree( "func", IE.document.getElementById("my_footer"), "<#DBL>文字列<#DBL>", "123" )

// Function SrchDomTree( func, elm, env1 = 0, env2 = 0, env3 = 0, env4 = 0 )
//  result = empty
//  // 先に直接の子ノードを調べる
//  for i = 0 to elm.childNodes.length - 1
//   ret = eval( func + "(" + "elm.childNodes[i]" + "," + env1 + "," + env2 + "," + env3 + "," + env4 +")" )
//   ifb !IsEmpty(ret) then
//    result = ret
//    exit
//   endif
//  next
//  // 孫ノードに入っていく
//  for i = 0 to elm.childNodes.length - 1
//   ret = SrchDomTree( func, elm.childNodes[i], env1, env2, env3, env4 )
//   ifb !IsEmpty(ret) then
//    result = ret
//    exit
//   endif
//  next
// Fend

おまけ
// ifb 3 = elm.childNodes[i].nodeType then // テキスト
//  elm.childNodes[i].nodeValue // テキストデータ


111 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/05(火) 14:59:27 ID:WsNY715b0]
softalk使って日本語しゃべらせたいんだけど、素人過ぎてショートカット乱立させてクリックさせるのが限界です・・・。

上品な立ち振る舞いで話させるには、どうプログラムしたら良いですかね?


112 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/05(火) 16:22:04 ID:deSK2IBq0]
>>111
doscmd or exec と softalk の引数指定



113 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/05(火) 20:02:55 ID:idKMoxPT0]
ヘルプすべて印刷して一読すると良いよ
それが面倒臭いならテンプレの本買え

114 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/05(火) 23:22:45 ID:WsNY715b0]
>>112-113
ありがとよ。かなりスマートになった。


exe名入れるときにメモ帳は"notepad"でいいのに、
softalk指定するときはアドレス入れないといけないのは何でなんだ?

プログラムの基礎の質問なんだと思うが...

115 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/06(水) 00:07:16 ID:12AIG4f80]
そのディレクトリにパスが通っているかという話。
環境変数のPATHにそのディレクトリを登録すれば(=パスを通せば)行ける。
詳しくはググるよろし。

116 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/06(水) 03:48:14 ID:j0L+SVeO0]
ECMAScript みたいに
関数自体を変数に代入する方法ないかな?
変数を () 付きで実行することで
その変数に代入された関数を実行するようにしたい


117 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/06(水) 03:57:32 ID:j0L+SVeO0]
あ、evalあるのね
これでできそうです
お騒がせしました

118 名前: ◆fdAnbU5Z6U mailto:sage [2010/01/06(水) 07:29:33 ID:EasGK5JXP]
少しだけ相手してやんよww
若いだろ?至りってやつだな


119 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/06(水) 10:00:09 ID:jv+N909k0]
>>118
じゃあこれデバッグしてください。
ttp://karimofu.org/dlp/mofu1_7789.zip.php
ダウンロードパス:saymove

120 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/06(水) 10:01:35 ID:jv+N909k0]
ていうか1月6日に閉鎖ですか。
これから先自作スクリプトはどこにうpすればいいのか。


121 名前: ◆fdAnbU5Z6U mailto:sage [2010/01/06(水) 11:44:36 ID:EasGK5JXP]
キモイホモだなぁ!おまえブサメンでキモブサだろ?少しだけ相手してやんよww
若いだろ?至りってやつだな

122 名前:98 mailto:sage [2010/01/08(金) 14:59:40 ID:VCRefa1D0]
>>109
その通りですね・・・偶数丸めというのを知らなかったので。
お騒がせしてすみませんでした。



123 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/15(金) 20:16:22 ID:3e5Ape4g0]
長文で失礼します。
最近uwscを勉強しはじめました。
uwsc本を参考に連番のIDでサイトにログインするように作ってみました。
一応出来たのですが、ID001からID030までを連続で入れることが出来ないため()
1〜9用マクロと10〜30用マクロに分けて使っています。
もっとシンプルにしたり、1〜30までの連番を1つのマクロに統一する方法はありますでしょうか?
おそらく初歩的なことなのでしょうが質問お願いします。
_________________________________________
例)ログインIDは "id001"〜"id030"
  パスワードは ps
>SUUJI = 1
>FOR A = 1 TO 30

>KBD(VK_i)
>KBD(VK_d)
>KBD(VK_0)
>SENDSTR(,SUUJI)
>SUUJI = SUUJI +1
>KBD(VK_TAB)
>KBD(VK_p)
>KBD(VK_s)
>KBD(VK_TAB)
>KBD(VK_ENTER)
id入力の所を、
1〜9用マクロは、KBD(VK_i) KBD(VK_d) KBD(VK_0) KBD(VK_0)
10〜30用マクロはKBD(VK_i) KBD(VK_d) KBD(VK_0)
にして使っています。

一本化するにはどのように直せば良いでしょうか?

124 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/15(金) 22:54:28 ID:zUTDSHGw0]
>>123
IESetDataを使おう。
Formatで0埋めは出来ないようだから、
z = "0"
zz = "00"
とかして、

for i = 1 to 30
ifb i < 10
hoge = zz + i //数値と文字列足すと文字列として足してくれる
else
hoge = z + i
endif
IESetData(IEID,hoge,"ID")
IESetData(IEID,"ps","PASS")
〜〜
next
とか、そんな感じ。
RecIEで出力させて見れば解ると思うよ。

125 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/15(金) 22:55:55 ID:zUTDSHGw0]
インデント入らなかった、スマソ
for i = 1 to 30
 ifb i < 10
  hoge = zz + i //数値と文字列足すと文字列として足してくれる
 else
  hoge = z + i
 endif
 IESetData(IEID,hoge,"ID")
 IESetData(IEID,"ps","PASS")
〜〜
next

126 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/16(土) 13:15:51 ID:ZYqbg1Ld0]
自動ログインスクリプトを作成してみたのだが、サーバーエラーが出た場合の回避方がわかりません。
ifを使う事はわかったのだが、ピッタシに来る例文が探しても見つからないのです。
自力で色々試すもうまく行かず・・・どなたかご教授下さいませ。
以下スクリプト

//IEを開いてページ表示
IE = CREATEOLEOBJ("InternetExplorer.Application")
IE.visible = True
IE.navigate("http://×××××")
//5秒停止
sleep(5)
//接続表示待ち
while True
if (! ie.busy) and (ie.readyState=4) then Break
sleep(0.1)
wend
id = GETID("Internet Explorer")
//ログインID入力
IESETDATA( IE, "●●●●", "id" )
IESETDATA( IE, "※※※※", "pass" )
CLKITEM(id,"ログイン", CLK_ACC or CLK_MUSMOVE)
//5秒停止
sleep(5)
//接続表示待ち
while True
if (! ie.busy) and (ie.readyState=4) then Break
sleep(0.1)
wend

この下にもし「サーバーエラー」が出た場合は再度http://×××××に戻って
再度ログインID入力を再実行したいのだが・・・

127 名前:名無しさん@お腹いっぱい。 [2010/01/16(土) 16:16:24 ID:hORuBIiX0]
>>126
ttp://www3.bigcosmic.com/board/s/board.cgi?id=umiumi&mode=all&no=2800
IE = CREATEOLEOBJ("InternetExplorer.Application") ←これはループの外
IE.visible = True
> while true
>  受信処理(>>126のスクリプトのうち最初の2行を除く部分)
>  if 0 = Pos("サーバーが混み合っています", str) then break
>  // 受信エラー
>  sleep(60)
> wend
> // 正常に受信


128 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/16(土) 20:08:00 ID:L+sAYtsZQ]
わたくし初心者でちょっと困っているのですが
FAQにある
「負荷が高い時に ウィンドウのオープンをスクリプトが待ち切れず・・・」
の答えとしての↓
スクリプト内のGETID関数に第3引数(待ち時間指定)を付けて下さい。
GETID("xxxx", "xxxx", -1)  // -1:画面が出るまで待つ

同様に括弧内に-1をつけても思うように実行されません(待ってくれないのですが)
どなたかご教授お願いしますorz

129 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/16(土) 20:20:02 ID:hORuBIiX0]
>>128
ウィンドウが出現しても、そのコントロールの配置に時間がかかる場合があります。
その場合、ウィンドウは存在しているからIDは取得できますが、コントロールがないので操作に失敗します。
コントロールを利用可能になっているか確かめる必要があります。

ウィンドウが出現していることを確認するには、Statusでタイトル名などを取得したらいいですよ。
本当にGetIDに失敗していたら取得したIDは-1になっているはずなので、その時点ではじくこともできるでしょう。


130 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/16(土) 20:21:01 ID:U6EzK14SP]
待ってくれないって事は戻り値は-1なの?
別ウィンドウのを取得してるんじゃね?

131 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/17(日) 01:11:03 ID:SVOvo/dN0]
数字を文字列として扱うにはどうすればいいでしょうか?
intA = 10
intB = intA * 2 //20
Print intA + intB //"1020"と表示したい
文字列結合子と演算子が同じ"+"なので、不可能なのでしょうか?

132 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/17(日) 02:22:14 ID:2D/YPlQ90]
>>131
// フォーマット
戻値 = FORMAT( 数値, 幅, [小数点桁 or 16進指定] )
引数
  数値: 数値 もしくは文字
  幅: 出力される文字数 (数値より指定幅が大きい時は左側をスペースにて補完)
     数値ではなく文字が指定された場合は その文字で幅分を埋める
  小数点桁 or 16進指定: 表示する小数点桁数、 また -1が指定された場合は16進数表記にする
戻値
  フォーマットされた文字列



133 名前:123 mailto:sage [2010/01/17(日) 06:07:26 ID:rLsFwGWi0]
>>124

数字の所はIFで処理するといいのですね、なるほどです。
昨日から直す作業をしてるのですがまだ動いてないので(IESetData関数がない、と言われてしまう…)もう少し練習をしてみます^^
試しに使っていたのでフリー版を利用していたのですが、RecIEの機能を調べていたらとても便利そうですね。
とても参考になりました。
ありがとうございました。


134 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/17(日) 10:06:50 ID:mb/jokyZ0]
>>131
print "" + intA + intB
もしくは
print intA + "" + intB

print intA + intB + "" はNG

135 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/17(日) 10:26:16 ID:gXklMUNy0]
//スペースにて補完→0にて補完へ変更…それだけ(^^;

for i = 1 to 30
  hoge = ChgMoj( Format( i, 3 ), " ", 0 )
next

136 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/17(日) 13:01:39 ID:SVOvo/dN0]
>>132,134,135 レスありです。
>>132
その関数は知っているのですが、実は16進数で合体させるため、Formatを多用する以外に方法があるかどうかの確認でした。
説明不足でわざわざコピペしていただいてありがとうございました。
>>134
この方法がスクリプトを後で見返したときに一番単純で理解しやすそうですね。
昔VBでVal関数を知らなかったときに文字列に+0して数列に変換していた方法を思い出しましたw

137 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/19(火) 20:29:01 ID:E18f84ud0]
UWSCProを使用しています。
一度exe化したものを、再び.uwsに戻す事は可能でしょうか?
戻せないにしても、exeの物の中のスクリプトを表示する事は出来るのでしょうか?

138 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/19(火) 21:29:37 ID:dm9R5tz30]
>>137
たぶんバイナリエディタで開くと最後にくっついてるんじゃね?

139 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/19(火) 21:37:14 ID:/h2JRfae0]
>>137
Pro版のEXE化について質問です。
まだ購入していないのですが、EXE化時にスクリプトをコンパイルしていないとの書き込みがありました。

www3.bigcosmic.com/board/s/board.cgi?id=umiumi&mode=all&no=617

この時には、生のスクリプトがEXEに連結されるだけですか?
そうである場合、暗号化後のスクリプトをEXE化の元に指定することもできますか?

EXE化後に、EXEをエディタで見たらそのままスクリプトが見えてしまわないかと気になったもので。。。

宜しくお願いします。

DATE:2007/3/25(Sun) 15:04 No.628


RE:EXE化時のスクリプト内容 umiumi


暗号化して取り込んでいますので、自分で変換作業をしておく必要はありません。


140 名前:137 mailto:sage [2010/01/20(水) 01:35:54 ID:+aeXo+8F0]
>>138139
バイナリエディタで見てみましたが私には分かりませんでした。
掲示板のQ&Aの回答を見る感じだと、一度exe化してしまったら戻すことは出来ないということで合ってますでしょうか?
暗号化を解く方法があるのであれば別でしょうが…

141 名前:名無しさん@お腹いっぱい。 [2010/01/20(水) 22:41:47 ID:ip1Zjd0h0]
WINDOWS 7でIE8を使用しております。
とある図書館にログインして自分の借りている図書および予約の図書を確認するスクリプトを作っております。
しかし、IDとパスワードは入力さるのですが、「ログイン」のボタンがど〜〜〜しても押してくれません。

大変すみませんが、教えていただけないでしょうか?

次のように実装しております。

ie = CreateOLEObj("InternetExplorer.Application")
ie.Visible = True
id = GETID("Internet Explorer")


ie.navigate("https://lib.city.shinagawa.tokyo.jp/cgi-bin/Sopcsryc.sh?p_mode=1&proc=kyj")


while True // 接続表示待ち
if (! ie.busy) and (ie.readyState=4) then Break
sleep(0.1)
wend

id = GETID("Internet Explorer")

//ログインID入力
IESETDATA( IE, "123456789", "ryno" )
IESETDATA( IE, "9876", "passwd" )


CLKITEM(id,"ログイン", CLK_ACC)




142 名前:名無しさん@お腹いっぱい。 [2010/01/20(水) 23:02:51 ID:8bN4FDNJ0]
>>141
本家掲示板にIDとパスワードが書いてあるんでログインスクリプト動かしてみたけど
被害者が襲撃に来た(マジで)
うちの地元の警察は個人情報をリークして権力者等に直接襲撃許可を出す悪い癖があるんだ。

親切に教えてやろうと思った奴を罠にかけるのが狙いかもしれないので触らずに削除依頼出すべし。




143 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/20(水) 23:13:48 ID:9xULNIKf0]
>>141
ie.navigate("javascript:onClick(this.execCGI(1));")

144 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/20(水) 23:32:14 ID:8bN4FDNJ0]
>>141
ソース見ると<input type="button" value="ログイン" onClick="execCGI(1)">
名前もIDもないので"ログイン"の文字をクリックするか、itemsを順番に見ていくしかないな。
execCGI(1)って関数実行してるからこれを呼び出せればそれでもいいかも。

ClkItemを使う場合、IDのとり方が悪い。
× id = GETID("Internet Explorer")
○ ID = HNDToID(IE.HWND)

そして、「ログイン」という文字はタイトルバーにもあるので、もしかするとこちらをクリックするかもしれない。
番号に2を入れてみるとうまくいくかも。
> CLKITEM(id,"ログイン", CLK_ACC, true, 2)

>>143
おお。その手があったか。
しかしOnClickは余計じゃないか?
> ie.navigate("javascript:this.execCGI(1);")


145 名前:141 [2010/01/21(木) 00:41:19 ID:BYisD/DI0]
>>143 様、
>>144 様、

う、動いたぁ!ログインボタンが押せたよぉ!

こんなに早いレスがもらえるなんて、感謝感激です。

>>142
何を言ってるんだかよくわからんかった。


146 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/21(木) 04:34:42 ID:el+zjomK0]
IESetData(IE,True,"","ログイン")
この場合↑を使うとすると引数入れる方法ある?

147 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/21(木) 09:17:09 ID:prTvVb6F0]
>>141
いまさらだけど、

ie.document.forms(0).elements(6).value = "ryno" //利用ナンバー
ie.document.forms(0).elements(7).value = "passwd" //パスワード
ie.document.forms(0).elements(8).click //ログインボタンを押す

こっちのほうが安定してるよ。たぶん。

こいつを使って調べた↓
nem.symphonic-net.com/uwsct/HTMLStarkNaked.uws.txt

148 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/21(木) 10:50:10 ID:qBCWT2U/0]
>>147
141じゃないけど親切な人や

149 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/21(木) 12:50:21 ID:UbXqB2Oa0]
>>147
おーすげー
でもItemsはころころ変わる可能性があるからな。
やっぱり名前が使えるところは名前を使って
ログインボタンだけループでまわすべきだろう。

まあログインページの変更はあまり頻繁には起きないけども。


150 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/21(木) 12:54:41 ID:UbXqB2Oa0]
>>146
// Web上(IE)に値を設定
戻値 = IESETDATA( IE, 値, Name, [Value, 番号] )

IE,    IE,
値,   True,
Name, "",
[Value, "ログイン"
番号] ) ほらここ空いてる


151 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/22(金) 23:14:18 ID:5GAs0GCP0]
>>149
名前を使いたいなら

ie.document.all.tags("input").ryno.value = "なんたらかんたら"
ie.document.all.tags("input").passwd.value = "うんたらかんがら"

または

ie.document.forms(0).elements("ryno").value = "なんたら"
ie.document.forms(0).elements("passwd").value = "うんたら"

でおk。

152 名前:141 [2010/01/23(土) 00:13:09 ID:ER0elP5I0]
再度質問に来たんですけど、さらなるレスが付いていてビックリでございます。

いただいたレスを再度学習してから、また質問に来ることにします。

本当に、ありがとうございます。





153 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/27(水) 09:06:38 ID:bTNIzlWA0]
UWSCで、関数の中で他の関数を使用することって可能ですか?

154 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/27(水) 09:19:46 ID:bTNIzlWA0]
すいません、ちょっと勘違いしてました
↑は忘れてください・・・

155 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/28(木) 01:46:50 ID:vVvESZ+G0]
シェア版を試しにインスコしようとすると、トロイとしてはじかれる。なにこれ?

156 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/28(木) 01:53:42 ID:khCmP7150]
>>155
なんだろうね。
OSとかウィルスソフトとか現象とかを本家掲示板に報告した方がいいんじゃね?


157 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/29(金) 11:44:21 ID:PN5QGmYZ0]
IEのイベント使ってたらUWSCがメモリ不足やらランダムに型が違うとか
DLLでアクセス違反とかでまくりで訳が分からんかったけど、
BeforeNavigate2をNavigateComplete2に変更したらぱったりエラーも出なくなったよ。

以前NewWindow2でキャンセルフラグ立ててなくて同様にエラーが出まくってたんだけど、
BeforeNavigate2も同様にキャンセルフラグを処理しなきゃいけなくて、
もしかしたらフラグを間違ってセットしてたのかもしれない。
NavigateComplete2ならフラグがないからどっちセットするかで悩まなくて言いし、
なによりBeforeNavigate2のイベント発生時点ではIEオブジェクトとかプロパティが無効になってて
待ちループですらエラーになる状態で、回避するのに苦労したんだけど、そういう処理も必要なくなった。

っていうか、イベントの使い方を間違っていたのかも。


158 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/31(日) 21:49:27 ID:QYiiO/FR0]
んでスクリプトは一応完成したけどどーも無用の物を作っちゃったらしくて評判が悪かった。
だからこんなのつくりました的なものを紹介だけしときますね。

自動ダウンロードスクリプト公開中
ttp://www1.axfc.net/uploader/Sc/so/77860

7-zip32.dllで圧縮メソッドがBzip2で圧縮してたから
Windows標準では解凍できないようです。

動画ページに直リンがあったりするけど、てきとーな日本語入れてあったりするので使える保証がなく、
直リンにnavigateするとなぜかバイナリファイルをブラウザで開いたりするサイトが多くてやっぱり使える保証がなく、
かといってftpでダウンロードするAPIではいつ終わるとも知れず、
結局自分でリンク貼って右クリでダウンロードするしかなくて、
だけど万が一もあるので入力禁止措置も取ってないのでちょっとマウス持ってるとすぐ止まる。

スレッドで5秒後に確実に解除すればよさそうなんだけど
メインループが終了したときはスレッドも巻き添え食っちゃうから確実ではないし。
いや、スクリプトが終われば復帰できるのかな?

んで、動画サイトが2次サイトだから画質が悪くなっちゃってるのが多くて
ダウンロードしてももったいなかったりする。


159 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/31(日) 23:47:43 ID:Q/Gu8X0B0]
>>158
っ国語力とプログラミング力の関係 解説編
ttp://jibun.atmarkit.co.jp/ljibun01/rensai/genius/04/01.html

160 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/01(月) 00:52:02 ID:2o/R36uY0]
RecIEを起動させて
記録→アドレス入力→ok
でサイトに飛ぼうとすると

Racie
L20が存在しません

ってダイアログが出てきて先に進めないんだけど同じ症状出たことある人いる?
4.4cからだったと思うけどアップデートしたら途端に動かなくなった

161 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/01(月) 00:55:45 ID:Zow1+JjM0]
>>159
ああ、日本語って難しいね。
短く区切って書くと、悪口で埋め尽くされてしまっていたから
無理やりでもつないでしまう癖がついちゃったんだ。

これでも学生時代は国語はほぼ満点でやってきたんだけどね。
敬語だけはいまいち理解できんかったけど。
敬語ってややこしいのに授業時間が少なすぎ。
正しい敬語を使う環境が身近にないから、練習すればするほどおかしくなっていく。(福岡県の筑豊出身)
これでも親は地元企業の課長〜次長だったりする。

今度は短く区切りすぎ?

162 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/01(月) 01:03:42 ID:Zow1+JjM0]
>>160
有料の機能だし本家で聞いたほうがいいと思うよ。
OSとIEと、UWSCの問題なかったバージョンとかも必要だと思う。
差し支えなければそのアドレスもね。
ところで、RacieじゃなくてRecieだよね?




163 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/01(月) 01:26:10 ID:Zow1+JjM0]
>>159
そういえば俺の後輩のやる気のないプログラマは
「俺文系なのにプログラマやらされてるんです。
 文系だからさっぱり分かりません。」ってゆってた。
「ああそう。」としか答えようがないっつーの。

164 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/01(月) 18:20:46 ID:WMRBoQc30]
頭悪そうだなお前

165 名前:名無しさん@お腹いっぱい。 [2010/02/05(金) 18:13:12 ID:hEkLWXs20]
HTMLソースを取得して差異があればmsgboxが出る程度の
簡易webチェッカーのようなものを作ろうと思ってるのですが
窓を非アクティブのままwebを更新する(戻るとか進むとかも)方法を教えて下さい

IE.Navigate(IE.LocationURL) や IE.Navigate(URL) も試したのですが
↓のようなサイトでは思うように更新後のソースが取得できませんでした
ttp://www7.big.or.jp/~fujiko/php/time_get.php

仕方ないので今は窓を開いて
CTRLWIN(id, ACTIVATE)
KBD(VK_F5)
とか
CLKITEM(id, "更新", CLK_ACC)
で更新してるのですが、非アクティブで実行する方法を教えて下さい

166 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/05(金) 20:04:44 ID:MmS/cyj/0]
winhttpかmsxml2を使う

167 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/05(金) 20:09:56 ID:vxp7+xcP0]
>>165
navigateしたあとちゃんと待ちループまわさないと駄目です。
また、nabigateが動き出す前に待ちループに入ってしまうと素通りしてしまうので、
それまでは待ちループに入らないようにする必要もあります。

例1)
IE.Navigate(url)
sleep(3)
REPEAT; sleep(0.1); UNTIL !IE.busy AND IE.readystate = 4

例2)
timeout = 3
IE.Navigate(url)
while !IE.busy AND IE.readystate = 4
 sleep(0.1); timeout = timeout - 0.1
 if timeout < 0 then break
wend
REPEAT; sleep(0.1); UNTIL !IE.busy AND IE.readystate = 4

例2の場合はtimeoutがないと、一瞬で表示が完了した場合に永久ループになります。

navigateの他にRefreshがあり、こちらは引数がいらないので手軽です。
中止    Stop
更新    Refresh
前に進む GoForward
戻る    GoBack

Stopはページが不完全になるので、DOMアクセスでCOMエラーが発生します。
これはStop→Refreshとした場合でも起こるので注意が必要。

WebBrowserコントロールでタブブラウザを作る(.netですが一部ソースは参考になると思います。)
ttp://codezine.jp/article/detail/659?p=3

168 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/05(金) 20:57:44 ID:hEkLWXs20]
>>166
レスありがとうございます
一応 CreateOLEObj("MSXML2.XMLhttp") も試していたのですが
思うような結果が得られず四苦八苦していたのでした

>>167
レス感謝です
>nabigateが動き出す前に待ちループに入ってしまうと素通り
になっていたようでした

結果的には IE.Refresh() で期待通りの結果が得られました
今から進む、戻るも試してきます
ありがとうございました

169 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/06(土) 14:30:56 ID:bC6Cwg/o0]
文字列A xxxxx 文字列B

ある文章の中で、特定の文字列AとBに挟まれた「xxxxx」という文字列を抜き出すにはどうするのが
スマートですかね? アドバイスください。

170 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/06(土) 14:50:08 ID:IY8b0Hns0]
>>169
文字列にもよるけど、
とりあえずBETWEENSTRていうのがある。
戻値 = BETWEENSTR( 文字列, 文字列A, 文字列B, [n個目, 数え方フラグ] )

ところで、 ;っていうのはどういう理由で入れてたんですか?


171 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/06(土) 14:52:23 ID:IY8b0Hns0]
訂正
;の部分は
& # 1 6 0 ;

172 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/06(土) 15:20:55 ID:MuLbdSUi0]
>>168追記
GoForward も GoBack も順調に動きました
改めまして感謝です

>>171
自分(PC専ブラ)には見えませんが、&#160はhtmlの半角空白みたいです

BetweenStrの話題があったので自分も更に質問です
HTMLソースの
111~
222~
333yyy のような文字列から 333 を抜きたい場合
BetweenStr(略, "xxx", "yyy", n) //yyyの前の文字を抜きたい
xxxとnの部分に何を入れれば良いのかが分かりません
宜しければ参考までに教えて下さい



173 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/06(土) 15:30:15 ID:MuLbdSUi0]
説明が不十分だと思ったので>>172追記
正確には
111~~<br>
222~~<br>
333yyy
という文字列で、"<br>", "yyy", 1 とか設定しても
222〜333まで抜き出してしまってうまくいかないのです

今は
変数1=(略, "<br>", "yy", 1)
変数2=(変数1, "<br>", "y", 1)
と複数段階に分けて書いてるのですが、これが簡潔に書けるなら知りたいな、と
宜しくお願い致します

174 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/06(土) 15:47:36 ID:IY8b0Hns0]
>>173
( マイナス値で指定すると後ろからサーチ)
BetweenStr(略, "<br>", "yy", -1)
これは試してみました?

> これが簡潔に書けるなら
手順が複雑にはなりますが、正規表現ライブラリを使えば
行頭(^)+不特定文字列(.*)+”yyy”で表現できる場合があります。
<br>のあとに改行コードが入っているならですが。

スクリプトをすっきりさせたいと言うことなら、自作関数に置き換えるとかでもいいと思います。







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

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

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