Vertraging instellen in vbscript

Hoe stel ik vertraging in in vbscript?

WScript.Sleep(100)werkt niet op Windows XP, Vista.


Antwoord 1, autoriteit 100%

Werk dit einde (XP).

Maak een nieuw bestand, noem het test.vbs. Zet dit erin.

WScript.Sleep 1000
MsgBox "TEST"

Voer het uit, let op de vertraging voordat het berichtvenster wordt weergegeven.

Let op, het getal is in milliseconden, dus 1000 is 1 seconde.


Antwoord 2, autoriteit 51%

Als u een slaapvertraging in VBScript probeert te simuleren, maar WScript is niet beschikbaar (bijvoorbeeld: uw script wordt aangeroepen vanuit de BGInfo-tool van Microsoft), probeer dan de volgende aanpak.

Het onderstaande voorbeeld duurt 10 seconden vanaf het moment dat de instructie is verwerkt:

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

Antwoord 3, autoriteit 38%

als het VBScript is, zou het

. moeten zijn

WScript.Sleep 100

Als het JavaScript is

WScript.Sleep(100);

Tijd in milliseconden. WScript.Sleep 1000 resulteert in een slaap van 1 seconde.


Antwoord 4, autoriteit 17%

Veel van de antwoorden hier gaan ervan uit dat u uw VBScript draait in de Windows Scripting Host (meestal wscript.exeof cscript.exe). Als u fouten krijgt zoals ‘Variabele is niet gedefinieerd: “WScript”‘, dan is dat waarschijnlijk niet het geval.

Het WScript-object is alleen beschikbaar als u onder de Windows Scripting Host draait, als u onder een andere scripthost draait, zoals die van Internet Explorer (en u bent misschien zonder het te beseffen als u in zoiets als een HTA) is het niet automatisch beschikbaar.

Microsoft’s Hey, Scripting Guy! Blog heeft een artikel dat alleen op dit onderwerp ingaat Hoe kan ik een script tijdelijk pauzeren in een HTA?waarin ze een VBScript setTimeoutgebruiken om een timer te maken om te simuleren a Slaapstand zonder CPU-hogging-loops, enz. te gebruiken.

De gebruikte code is deze:

<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>

Zie de gelinkte blogpostvoor de volledige uitleg, maar als er op de knop wordt geklikt, wordt in wezen een timer gemaakt die vanaf nu 5000 milliseconden afgaat, en wanneer deze wordt geactiveerd, wordt de VBScript-subroutine uitgevoerd genaamd “PausedSection” die de timer wist en de gewenste code uitvoert.


Antwoord 5, autoriteit 17%

De volgende regel zorgt ervoor dat je script 5 minuten slaapt.

WScript.Sleep 5*60*1000

Houd er rekening mee dat de waarde die wordt doorgegeven aan de slaapoproep in milliseconden is.


Antwoord 6, autoriteit 11%

Hier is nog een alternatief:

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 

Antwoord 7, autoriteit 8%

Tijd van de slaapfunctie is in milliseconden (ms)

als je 3 minuten wilt, is dat de manier om het te doen:

WScript.Sleep(1000 * 60 * 3)

Antwoord 8, autoriteit 6%

timer beter gebruiken:

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

Antwoord 9, autoriteit 6%

Hier is mijn oplossing. Werkte met script, dat werd uitgevoerd door een programma van derden zonder WScript-declaratie en geen import toegestaan.

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

Bijwerken
Het lijkt erop dat Microsoft Sleep.exe uit win 8 heeft verwijderd, dus dit werkt niet in win 8, tenzij u Sleep.exe in de map plaatst die is gedefinieerd in %path%.


Antwoord 10, autoriteit 5%

Hier is een update van de oplossing van @user235218 waarmee u het aantal milliseconden kunt specificeren dat u nodig heeft.

Opmerking: de optie -n is het aantal pogingen en de -w is de time-out in milliseconden voor ping. Ik koos voor het adres van 127.25.25.254.254.254.254, want het staat in het loopbackbereik en MS Windows reageert er niet op.

Ik betwijfel ook dat dit millisecond nauwkeurigheid biedt, maar op een andere opmerking probeerde ik het in een applicatie met behulp van de MS-scriptbesturing en terwijl de ingebouwde slaapfunctie de interface is vergrendeld, deze methode niet.

Als iemand een verklaring kan geven voor waarom deze methode de interface niet heeft vergrendeld, kunnen we dit antwoord compleet maken. Beide slaapfuncties waar in de gebruikersdraad worden uitgevoerd.

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

Antwoord 11, Autoriteit 2%

Zoals vermeld in deze antwoord :

Application.Wait (Now + TimeValue("0:00:01"))

wacht op 1 seconde


Antwoord 12

WScript.Sleep 100

De volgende code moet goed werken.

Other episodes