• 締切済み

HTML + VBScript で Sleep できない

お世話になります。ご教授ください。 類似の質問が既にあるのかもしれませんが、質問させていただきます。。。 HTML上に記述するVBScriptでは、WScriptは使用できないという記事を見かけます。 実際、HTML+VBScriptで使用すると、 変数は宣言されていません:'WScript' とエラーが出ました。 WSH は WScript のインスタンスを読み込むことができないうんぬん、と書かれていました。 書きたいことは、 WScript.Sleep 1000 です。 もしくは、これに変わる何かがしたいです。 外部ファイル化(.vbs)を試してみましたが、ダメでした。 ==== サンプル(Sample.vbs) ==== Option Explicit MsgBox "start" Dim Idx = 0 Do While Idx <> 3 WScript.Sleep 1000 MsgBox Idx Idx = Idx + 1 Loop WScript.Sleep 1000 MsgBox "end" ================ <html> <head> <meta http-equiv="Content-Script-Type" content="text/vbscript"> <script language="VBScript" type="text/vbscript" src="sample.vbs"></script> </head> … という感じです。 上記はあくまでサンプルですが、最終的には「ループの中で」待ち状態、になるようにしたいです。 Do While ある条件 1秒待ち ある条件に、なるかならないか Loop (setTimeout を使用する例が書かれていましたが、それではループ制御は走り続け、CPUが痛い目に合いました。。。) もしかして、WScript は使用できるのに、記述ミスかもしれませんし。。。 できない場合は、それに変わる案などいただけるとありがたいです。 よろしくお願いします。

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

Sleepは難しいのでは? たとえばこんな感じでどうでしょう? <script language="vbscript"> Dim Idx,timerID sub Window_onLoad() Idx=0 msgbox "start" timerID=Window.SetInterval("test()",1000) end sub sub test() if Idx>=3 then Window.ClearInterval(timerID) msgbox "end" else msgbox Idx end if Idx=Idx+1 end sub </script>

gen-ji
質問者

お礼

さっそくありがとうございます! ですが、この方法だとOnLoadで処理していることになるかと。 Loop 内で、ビジー状態・ウェイト状態にしたいなぁというのが 本意です。。。 SetTimeout はLoop処理をいったん止めるということは できないようですし。。。 ある条件、というのも、3回ループなどではなく、 本当は可変したものを作成したいのです。 外部プログラムが終了したか、判定する、といった具合に。。。 WSHShell.Runメソッドを使用した 同期ではないものです。 非同期で、かつ外部プログラムが終了したかチェックするものを 作成するつもりでいるのですが。。。 CScript.exe は、WScript を使用できるそうなので、 VBScript から無理やり CScript を実行して Sleep できないかなぁ というところで行き詰まっています。 ※まず、それが可能なのかもわからず状態ですが(^^;