ejemplos - Cómo configurar el retraso en vbscript
manual vbscript pdf español (10)
¿Cómo configurar el retraso en vbscript?
WScript.Sleep(100)
no funciona en Windows XP, Vista.
Aquí está mi solución. Trabajó con el script, que fue ejecutado por un programa de terceros sin WScript declarado y sin importación permitida.
Function MySleep(milliseconds)
set WScriptShell = CreateObject("WScript.Shell")
WScriptShell.Run "Sleep -m " & milliseconds, 0, true
end Function
Actualizar
Parece que Microsoft eliminó Sleep.exe de win 8, así que esto no funciona en win 8 a menos que pongas Sleep.exe en la carpeta definida en% path%.
Aquí hay otra alternativa:
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
Aquí hay una actualización de la solución provista por @ user235218 que le permite especificar la cantidad de milisegundos que necesita.
Nota: La opción -n es el número de reintentos y la -w es el tiempo de espera en milisegundos para el ping. Elegí la dirección 127.255.255.254 porque está en el rango de bucle invertido y ms windows no responde.
También dudo que esto proporcione una precisión de milisegundos, pero en otra nota lo probé en una aplicación usando el control de script ms y mientras que la función de suspensión incorporada bloqueó la interfaz, este método no lo hizo.
Si alguien puede proporcionar una explicación de por qué este método no bloqueó la interfaz, podríamos hacer que esta respuesta sea más completa. Ambas funciones de suspensión se ejecutan en el hilo del usuario.
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
La función de tiempo de reposo está en milisegundos (ms)
Si quieres 3 minutos, esa es la forma de hacerlo:
WScript.Sleep(1000 * 60 * 3)
La siguiente línea hará que tu script se duerma durante 5 minutos.
WScript.Sleep 5*60*1000
Tenga en cuenta que el valor pasado a la llamada de reposo es en mili segundos.
Muchas de las respuestas aquí suponen que está ejecutando su VBScript en el Windows Scripting Host (generalmente wscript.exe
o cscript.exe
). Si está obteniendo errores como ''La variable no está definida: "WScript" '' entonces es probable que no.
El objeto WScript solo está disponible si está ejecutando bajo Windows Scripting Host, si está ejecutando bajo otro host de secuencia de comandos, como Internet Explorer (y podría estar sin darse cuenta si está en algo como una HTA). no está disponible automáticamente.
Hey de Microsoft, chico de scripting! El blog tiene un artículo que trata solo este tema ¿Cómo puedo pausar temporalmente una secuencia de comandos en una HTA? en el que utilizan un setTimeout
VBScript para crear un temporizador para simular un modo de espera sin necesidad de utilizar bucles de acumulación de CPU, etc.
El código utilizado es este:
<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>
Vea la publicación del blog vinculado para una explicación completa, pero esencialmente cuando se hace clic en el botón, crea un temporizador que se dispara a 5,000 milisegundos a partir de ahora, y cuando se dispara ejecuta la subrutina de VBScript llamada "PausedSection" que borra el temporizador y ejecuta lo que sea codigo que quieras
Si es VBScript, debería ser
WScript.Sleep 100
Si es javascript
WScript.Sleep(100);
Tiempo en milisegundos. Wscript.Sleep 1000 da como resultado un sueño de 1 segundo.
Si está intentando simular una demora en el modo de espera en VBScript pero WScript no está disponible (p. Ej., Su script se llama desde la herramienta BGInfo de Microsoft), intente el siguiente enfoque.
El siguiente ejemplo demorará hasta 10 segundos desde el momento en que se procesa la instrucción:
Dim dteWait
dteWait = DateAdd("s", 10, Now())
Do Until (Now() > dteWait)
Loop
Trabaja este extremo (XP).
Crea un nuevo archivo, llámalo test.vbs. Pon esto en esto.
WScript.Sleep 1000
MsgBox "TEST"
Ejecútelo, observe el retraso antes de que se muestre el cuadro de mensaje.
Tenga en cuenta que el número está en milisegundos, por lo que 1000 es 1 segundo.
mejor uso temporizador:
Sub wait (sec)
dim temp
temp=timer
do while timer-temp<sec
loop
end Sub