如何在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" 运行它,注意消息框显示之

如何在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"
运行它,注意消息框显示之前的延迟


注意,数字以毫秒为单位,因此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之类的主机上运行时可能没有意识到),则它不会自动可用

微软的嘿,脚本编写人!博客上有一篇文章专门讨论这个主题,他们使用VBScript
setTimeout
创建一个计时器来模拟睡眠,而不需要使用占用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"))