プロが教えるわが家の防犯対策術!

お世話になります。ご教授ください。
類似の質問が既にあるのかもしれませんが、質問させていただきます。。。

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 は使用できるのに、記述ミスかもしれませんし。。。
できない場合は、それに変わる案などいただけるとありがたいです。

よろしくお願いします。

A 回答 (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>
    • good
    • 0
この回答へのお礼

さっそくありがとうございます!

ですが、この方法だとOnLoadで処理していることになるかと。

Loop 内で、ビジー状態・ウェイト状態にしたいなぁというのが
本意です。。。

SetTimeout はLoop処理をいったん止めるということは
できないようですし。。。

ある条件、というのも、3回ループなどではなく、
本当は可変したものを作成したいのです。

外部プログラムが終了したか、判定する、といった具合に。。。
WSHShell.Runメソッドを使用した 同期ではないものです。
非同期で、かつ外部プログラムが終了したかチェックするものを
作成するつもりでいるのですが。。。

CScript.exe は、WScript を使用できるそうなので、
VBScript から無理やり CScript を実行して Sleep できないかなぁ
というところで行き詰まっています。
※まず、それが可能なのかもわからず状態ですが(^^;

お礼日時:2008/03/05 13:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!