Как установить задержку в vbscript?
WScript.Sleep(100)
не работает в Windows XP, Vista.
Как установить задержку в vbscript?
WScript.Sleep(100)
не работает в Windows XP, Vista.
Работайте с этой целью (XP).
Создайте новый файл, назовите его test.vbs. Поместите это в него.
WScript.Sleep 1000
MsgBox "TEST"
Запустите его, обратите внимание на задержку до появления окна сообщения.
Обратите внимание, что номер находится в миллисекундах, поэтому 1000 составляет 1 секунду.
Если вы пытаетесь моделировать задержку сна в VBScript, но WScript недоступен (например: ваш script вызывается из инструмента Microsoft BGInfo), попробуйте следующий подход.
Пример ниже будет задерживаться до 10 секунд с момента обработки команды:
Dim dteWait
dteWait = DateAdd("s", 10, Now())
Do Until (Now() > dteWait)
Loop
если это VBScript, это должно быть
WScript.Sleep 100
Если это JavaScript
WScript.Sleep(100);
Время в миллисекундах. WScript.Sleep 1000 приводит к 1-секундному сну.
Следующая строка сделает ваш script спать в течение 5 минут.
WScript.Sleep 5*60*1000
Обратите внимание, что значение, переданное во время сна, составляет миллисекунды.
Здесь другая альтернатива:
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
Многие ответы здесь предполагают, что вы используете свой VBScript в Windows Scripting Host (обычно wscript.exe
или cscript.exe
). Если вы получаете ошибки, такие как "Переменная" undefined: "WScript", то вы, вероятно, нет.
Объект WScript доступен только в том случае, если вы работаете под Windows Scripting Host, если вы работаете под другим хостом script, таким как Internet Explorer (и вы, возможно, не понимаете его, если находитесь в чем-то как HTA), он не доступен автоматически.
Microsoft Эй, сценарист! В блоге есть статья, которая касается именно этой темы Как временно приостановить script в HTA?, в которой они используют VBScript setTimeout
создать таймер для имитации спящего режима без необходимости использовать петли для зависания процессора и т.д.
Используемый код:
<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>
См. связанное сообщение в блоге для полного объяснения, но по сути, когда кнопка нажата, создается таймер, который запускает 5000 миллисекунд, и когда он срабатывает, запускается подпрограмма VBScript под названием "PausedSection", которая очищает таймер и запускает любой код, который вы хотите.
Время ожидания Функция находится в миллисекундах (мс)
если вы хотите 3 минуты, вот как это сделать:
WScript.Sleep(1000 * 60 * 3)
Ниже приведено обновление решения, предоставленного @user235218, которое позволяет указать количество требуемых миллисекунд.
Примечание. Параметр -n - это количество повторений, а -w - тайм-аут в миллисекундах для пинга. Я выбрал адрес 127.255.255.254, потому что он находится в диапазоне loopback, и ms-окна не реагируют на него.
Я также сомневаюсь, что это обеспечит миллисекундную точность, но в другой заметке я попробовал ее в приложении с помощью управления ms script, а встроенная функция сна заблокировала интерфейс, который этот метод не сделал.
Если кто-нибудь может объяснить, почему этот метод не заблокировал интерфейс, мы могли бы сделать этот ответ более полным. Обе функции сна, которые выполняются в пользовательском потоке.
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
лучший таймер использования:
Sub wait (sec)
dim temp
temp=timer
do while timer-temp<sec
loop
end Sub
Вот мое решение. Работал с script, который запускался сторонней программой без объявления WScript и не разрешен импорт.
Function MySleep(milliseconds)
set WScriptShell = CreateObject("WScript.Shell")
WScriptShell.Run "Sleep -m " & milliseconds, 0, true
end Function
Обновить
Похоже, Microsoft удалил Sleep.exe из win 8, так что это не работает в win 8, если вы не поставили Sleep.exe в папку, определенную в% path%.