Comment définir le délai dans vbscript?
WScript.Sleep(100)
ne fonctionne pas sous Windows XP, Vista.
Travaillez cette fin (XP).
Créez un nouveau fichier, appelez-le test.vbs. Mettez ceci dedans.
WScript.Sleep 1000
MsgBox "TEST"
Exécutez-le, notez le délai avant que la boîte de message ne s'affiche.
Notez que le nombre est en millisecondes, donc 1000 correspond à 1 seconde.
Si vous essayez de simuler un délai de veille dans VBScript mais que WScript n'est pas disponible (votre script est par exemple appelé à partir de l'outil BGInfo de Microsoft), essayez l'approche suivante.
L'exemple ci-dessous retardera jusqu'à 10 secondes à partir du traitement de l'instruction:
Dim dteWait
dteWait = DateAdd("s", 10, Now())
Do Until (Now() > dteWait)
Loop
si c'est VBScript, il devrait être
WScript.Sleep 100
Si c'est du JavaScript
WScript.Sleep(100);
Temps en millisecondes. WScript.Sleep 1000 entraîne un sommeil d'une seconde.
La ligne suivante fera dormir votre script pendant 5 minutes.
WScript.Sleep 5*60*1000
Notez que la valeur transmise à l'appel en veille est exprimée en millisecondes.
Beaucoup de réponses ici supposent que vous exécutez votre VBScript dans l'hôte de script Windows (généralement wscript.exe
ou cscript.exe
). Si vous obtenez des erreurs telles que ', la variable n'est pas définie: "WScript" ', alors vous ne l'êtes probablement pas.
L'objet WScript est disponible uniquement si vous utilisez Windows Hosting Script, si vous utilisez un autre script Host, tel qu'Internet Explorer (et vous risquez de ne pas vous en rendre compte si vous êtes dans un environnement HTA). non disponible automatiquement.
Hé, scripteur de Microsoft! Le blog contient un article qui traite uniquement de ce sujet Comment puis-je suspendre temporairement un script dans un HTA? dans lequel ils utilisent un script VBScript setTimeout
pour créer un minuteur permettant de simuler une veille sans utiliser des boucles monopolisant le processeur, etc.
Le code utilisé est le suivant:
<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>
Voir le article de blog lié pour l'explication complète, mais lorsque vous cliquez sur le bouton, un temporisateur déclenche 5 000 millisecondes à partir de maintenant et, lorsqu'il se déclenche, exécute la sous-routine VBScript appelée "PausedSection" qui efface la minuterie et lance le code que vous voulez.
Voici une autre alternative:
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
mieux utiliser timer:
Sub wait (sec)
dim temp
temp=timer
do while timer-temp<sec
loop
end Sub
La fonction de temps de sommeil est exprimée en millisecondes (ms)
si vous voulez 3 minutes, c'est la façon de le faire:
WScript.Sleep(1000 * 60 * 3)
Voici une mise à jour de la solution fournie par @ user235218 qui vous permet de spécifier le nombre de millisecondes requis.
Remarque: l'option -n correspond au nombre de tentatives et le -w correspond au délai d'expiration en millisecondes du ping. J’ai choisi l’adresse 127.255.255.254 parce qu’elle se situe dans la plage du bouclage et que ms windows ne répond pas.
Je doute également que cela fournisse une précision de l'ordre de la milliseconde, mais sur une autre note, je l'ai essayé dans une application utilisant le contrôle de script ms et, bien que la fonction de veille intégrée ait verrouillé l'interface, cette méthode ne l'a pas été.
Si quelqu'un peut expliquer pourquoi cette méthode n'a pas verrouillé l'interface, nous pouvons compléter cette réponse. Les deux fonctions de veille ont été exécutées dans le thread utilisateur.
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
Voici ma solution. Utilisation d'un script exécuté par un programme tiers sans déclaration WScript ni importation autorisée.
Function MySleep(milliseconds)
set WScriptShell = CreateObject("WScript.Shell")
WScriptShell.Run "Sleep -m " & milliseconds, 0, true
end Function
Mise à jour
On dirait que Microsoft a supprimé Sleep.exe de Windows 8, donc cela ne fonctionne pas avec Windows 8, sauf si vous placez Sleep.exe dans le dossier défini dans% path%.