如何在vbscript中设置延迟
如何在vbscript中设置延迟如何在vbscript中设置延迟,vbscript,Vbscript,如何在vbscript中设置延迟 WScript.Sleep(100)在Windows XP、Vista上不起作用。如果是VBScript,则应该是 WScript.Sleep 100 如果是JavaScript WScript.Sleep(100); 以毫秒为单位的时间。WScript.Sleep 1000会导致1秒的睡眠。为此目的工作(XP) 创建一个新文件,称之为test.vbs。把这个放进去 WScript.Sleep 1000 MsgBox "TEST" 运行它,注意消息框显示之
WScript.Sleep(100)
在Windows XP、Vista上不起作用。如果是VBScript,则应该是
WScript.Sleep 100
如果是JavaScript
WScript.Sleep(100);
以毫秒为单位的时间。WScript.Sleep 1000会导致1秒的睡眠。为此目的工作(XP)
创建一个新文件,称之为test.vbs。把这个放进去
WScript.Sleep 1000
MsgBox "TEST"
运行它,注意消息框显示之前的延迟
注意,数字以毫秒为单位,因此1000是1秒。睡眠时间功能以毫秒(ms)为单位 如果你想要3分钟,那就是方法:
WScript.Sleep(1000 * 60 * 3)
还有另一种选择:
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中模拟睡眠延迟,但WSScript不可用(例如:您的脚本是从Microsoft的BGInfo工具调用的),请尝试以下方法 以下示例将延迟至指令处理后的10秒:
Dim dteWait
dteWait = DateAdd("s", 10, Now())
Do Until (Now() > dteWait)
Loop
这是我的解决办法。使用脚本,该脚本由第三方程序运行,未声明WScript,也不允许导入
Function MySleep(milliseconds)
set WScriptShell = CreateObject("WScript.Shell")
WScriptShell.Run "Sleep -m " & milliseconds, 0, true
end Function
更新看起来Microsoft从win 8中删除了Sleep.exe,因此这在win 8中不起作用,除非您将Sleep.exe放在%path%中定义的文件夹中。以下是对@user235218提供的解决方案的更新,允许您指定所需的毫秒数 注意,-n选项是重试次数,-w是ping的超时(以毫秒为单位)。我选择127.255.255.254地址,因为它在环回范围内,ms windows不响应它 我也怀疑这会提供毫秒精度,但另一方面,我在一个使用ms脚本控件的应用程序中尝试了它,虽然内置的睡眠功能锁定了接口,但这种方法没有 如果有人能解释为什么这个方法没有锁定接口,我们可以让这个答案更完整。在用户线程中运行的两个睡眠函数
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
子等待(秒)
暗温
温度=计时器
do while timer temp这里的许多答案都假设您正在Windows脚本主机中运行VBScript(通常是wscript.exe
或cscript.exe
)。如果您遇到诸如“Variable is undefined:“WScript””之类的错误,那么您可能没有
WScript对象只有在Windows脚本主机下运行时才可用,如果在另一个脚本主机(如Internet Explorer)下运行时(如果您在HTA之类的主机上运行时可能没有意识到),则它不会自动可用
微软的嘿,脚本编写人!博客上有一篇文章专门讨论这个主题,他们使用VBScriptsetTimeout
创建一个计时器来模拟睡眠,而不需要使用占用CPU的循环等等
使用的代码如下所示:
<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>
Dim DTM开始时间
子测试
dtmStartTime=现在
idTimer=window.setTimeout(“PausedSection”,5000,“VBScript”)
端接头
分段暂停
Msgbox dtmStartTime&vbCrLf&Now
窗口清除超时(idTimer)
端接头
有关完整的解释,请参见,但基本上,当单击按钮时,它会创建一个从现在开始触发5000毫秒的计时器,当它触发时,将运行名为“PausedSection”的VBScript子例程,该例程将清除计时器,并运行您希望它运行的任何代码。以下行将使脚本休眠5分钟
WScript.Sleep 5*60*1000
请注意,传递给sleep call的值以毫秒为单位。如下所述:
将等待1秒@badbod99这就像在说:只要你没有被抓到,偷窃作品以及购买——“someSub(param)”将把param的副本传递给someSub。删除)并替换(用空格使代码成为有效的VBScript。另一个违反规则的行为:否()但是,当调用Sub.@Ekkehard.Horner时,它是有效的VBScript。它显式地传递值ByVal
。我不会使用这样的括号;我会编写调用WScript.Sleep(…)
。它可以工作……但我担心该解决方案的CPU使用情况(这是一个长循环)。也许在没有WScript可用的脚本中,您可以使用CreateObject调用它,如下面的回答所示:在IE 11中工作。糟糕的解决方案。但是,如果某个东西很愚蠢,但它工作……这并不愚蠢。我为一个HTA工作,它不会读取我创建的WScript
shell对象objShell.Sleep()
,也不是WScript.Sleep()
。所以我改用了Paulie的方法。一个警告:在Chrome中,如果你想等待脚本响应,只要你输入的时间超过1秒,它就会弹出一个窗口。你可以说“是”,它会工作,但它可能会吓坏许多非技术人员。“WScript.Sleep(100)
在Windows XP、Vista上不起作用“是的,它起作用(仅在XP中测试过)。它等待100毫秒(十分之一秒)。如果需要100秒,则使用100*1000,因为该值以毫秒为单位。(由于这是VBScript,您不需要参数。它们实际上不会破坏它,但它不正确…)试试WSH.Sleep 1000
这是一个很好的解决方案,非常简单,但是当从HTA内部运行时,它会生成一个无响应的脚本警报,询问您是否要停止运行脚本,因为它可能会锁定您的计算机。您可以说不,但它仍然会中断程序的正常运行。
Application.Wait (Now + TimeValue("0:00:01"))