web-dev-qa-db-ja.com

vbscriptで遅延を設定する方法

Vbscriptで遅延を設定する方法は?

WScript.Sleep(100)は、Windows XP、Vistaでは機能しません。

49
Mark

この作業を終了します(XP)。

新しいファイルを作成し、test.vbsと呼びます。これを入れてください。

WScript.Sleep 1000
MsgBox "TEST"

実行して、メッセージボックスが表示されるまでの遅延に注意してください。

数値はミリ秒単位であるため、1000は1秒です。

52
badbod99

VBScriptでスリープ遅延をシミュレートしようとしているが、WScriptが使用できない場合(たとえば、スクリプトがMicrosoftのBGInfoツールから呼び出される場合)、次のアプローチを試してください。

以下の例は、命令が処理された瞬間から10秒まで遅延します。

Dim dteWait
dteWait = DateAdd("s", 10, Now())
Do Until (Now() > dteWait)
Loop
30

vBScriptの場合は、

WScript.Sleep 100

JavaScriptの場合

WScript.Sleep(100);

ミリ秒単位の時間。 WScript.Sleep 1000は1秒のスリープをもたらします。

20
Jeeva Subburaj

次の行は、スクリプトを5分間スリープ状態にします。

WScript.Sleep 5*60*1000

Sleep呼び出しに渡される値はミリ秒単位であることに注意してください。

10
Raja Anbazhagan

ここでの多くの答えは、VBScriptをWindows Scripting Host(通常はwscript.exeまたはcscript.exe)で実行していることを前提としています。 'Variable is undefined: "WScript"'のようなエラーが発生する場合は、おそらくそうではありません。

WScriptオブジェクトは、Windows Scripting Hostで実行している場合、Internet Explorerなどの別のスクリプトホストで実行している場合にのみ使用できます(HTAのような場合は気付かないかもしれません)自動的には利用できません。

MicrosoftのHey、Scripting Guy!ブログには、このトピックだけの記事があります HTAでスクリプトを一時的に一時停止するにはどうすればよいですか? VBScript setTimeoutを使用してタイマーを作成し、 CPUホギングループなどを使用します。

使用されるコードは次のとおりです。

<script language = "VBScript">

    Dim dtmStartTime

    Sub Test
        dtmStartTime = Now 
        idTimer = window.setTimeout("PausedSection", 5000, "VBScript")
    End Sub

    Sub PausedSection
        Msgbox dtmStartTime & vbCrLf & Now
        window.clearTimeout(idTimer)
    End Sub

</script>

<body>
    <input id=runbutton  type="button" value="Run Button" onClick="Test">
</body>

詳細な説明については リンクされたブログ投稿 を参照してください。ただし、基本的にボタンをクリックすると、今から5,000ミリ秒を起動するタイマーが作成され、起動すると「PausedSection」というVBScriptサブルーチンが実行されますタイマーをクリアし、必要なコードを実行します。

9
GAThrawn

別の代替手段を次に示します。

Sub subSleep(strSeconds) ' subSleep(2)
    Dim objShell
    Dim strCmd
    set objShell = CreateObject("wscript.Shell")
    'objShell.Run cmdline,1,False

    strCmd = "%COMSPEC% /c ping -n " & strSeconds & " 127.0.0.1>nul"     
    objShell.Run strCmd,0,1 
End Sub 
7
Marc B. Hankin

より良いタイマーを使用する:

Sub wait (sec)
    dim temp
    temp=timer
    do while timer-temp<sec
    loop
end Sub
4

スリープ機能の時間はミリ秒(ms)です

3分が必要な場合、それがそれを行う方法です:

WScript.Sleep(1000 * 60 * 3)
4
Nadir SOUALEM

以下に、@ user235218が提供するソリューションの更新を示します。これにより、必要なミリ秒数を指定できます。

注:-nオプションは再試行の回数で、-wはpingのミリ秒単位のタイムアウトです。 127.255.255.254アドレスを選択したのは、それがループバック範囲内にあり、msウィンドウがそれに応答しないためです。

また、これはミリ秒の精度を提供するのではないかと疑っていますが、別のメモでは、msスクリプトコントロールを使用してアプリケーションで試しましたが、組み込みのスリープ機能はこのメソッドではできなかったインターフェイスをロックしました。

誰かがこのメソッドがインターフェイスをロックしなかった理由の説明を提供できれば、この答えをより完全にすることができます。両方のスリープ機能は、ユーザースレッドで実行されます。

Const WshHide = 0
Const WAIT_ON_RETURN = True

Sub Sleep(ByVal ms)

   Dim Shell 'As WScript.Shell

   If Not IsNumeric(ms) Then _
       Exit Sub

   Set Shell = CreateObject("WScript.Shell")

   Call Shell.Run("%COMSPEC% /c ping -n 1 -w " & ms & " 127.255.255.254 > nul", WshHide, WAIT_ON_RETURN)

End Sub
3
Robert

これが私の解決策です。 WScriptが宣言されておらずインポートが許可されていないサードパーティのプログラムによって実行されたスクリプトを使用しました。

Function MySleep(milliseconds)
  set WScriptShell = CreateObject("WScript.Shell")
  WScriptShell.Run "Sleep -m " & milliseconds, 0, true
end Function

更新
Microsoftがwin 8からSleep.exeを削除したように見えるため、%path%で定義されたフォルダーにSleep.exeを配置しない限り、これはwin 8で機能しません。

3
Atomosk