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.exe
of 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 setTimeout
gebruiken 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.