首页 文章

如何在vbscript中设置延迟

提问于
浏览
43

如何设置vbscript的延迟?

WScript.Sleep(100) 在Windows XP,Vista上不起作用 .

10 回答

  • 3

    更好地使用计时器

    Sub wait (sec)
        dim temp
        temp=timer
        do while timer-temp<sec
        loop
    end Sub
    
  • 6

    为此而努力(XP) .

    创建一个新文件,将其命名为test.vbs . 把它放进去吧 .

    WScript.Sleep 1000
    MsgBox "TEST"
    

    运行它,注意消息框显示之前的延迟 .

    请注意,该数字以毫秒为单位,因此1000为1秒 .

  • 6

    如果您尝试在VBScript中模拟睡眠延迟但WScript不可用(例如:您的脚本是从Microsoft的BGInfo工具调用的),请尝试以下方法 .

    以下示例将从处理指令的那一刻起延迟10秒:

    Dim dteWait
    dteWait = DateAdd("s", 10, Now())
    Do Until (Now() > dteWait)
    Loop
    
  • 18

    如果它是VBScript,它应该是

    WScript.Sleep 100
    

    如果是JavaScript

    WScript.Sleep(100);
    

    时间(以毫秒为单位) . WScript.Sleep 1000导致1秒睡眠 .

  • 29

    以下行将使您的脚本睡眠5分钟 .

    WScript.Sleep 5*60*1000
    

    请注意,传递给sleep调用的值以毫秒为单位 .

  • 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
    
  • 2

    这里有很多答案假设您在Windows Scripting Host(通常是 wscript.execscript.exe )中运行VBScript . 如果你're getting errors like '变量未定义:"WScript" ' then you'可能不是 .

    WScript对象仅在您在Windows Scripting Host下运行时才可用,如果您在另一个脚本主机(如Internet Explorer)下运行(如果您使用的是HTA,则可能没有意识到它)不会自动提供 .

    微软的嘿,脚本专家!博客有一篇专门讨论这个主题的文章How Can I Temporarily Pause a Script in an 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>
    

    有关完整说明,请参阅linked blog post,但实际上当单击按钮时,它会创建一个从现在开始触发5,000毫秒的计时器,并在其触发时运行名为"PausedSection"的VBScript子例程,它清除计时器,并运行您想要的任何代码至 .

  • 9

    睡眠时间功能以毫秒(ms)为单位

    如果你想要3分钟,那就是这样做的方法:

    WScript.Sleep(1000 * 60 * 3)
    
  • 45

    以下是@ user235218提供的解决方案的更新,允许您指定所需的毫秒数 .

    注意:-n选项是重试次数,-w是ping的超时时间(以毫秒为单位) . 我选择了127.255.255.254地址,因为它处于环回范围内并且ms窗口没有响应它 .

    我也怀疑这将提供毫秒精度,但另一方面我在使用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
    
  • 2

    这是我的解决方案 . 使用脚本,该脚本由第三方程序运行,未声明WScript且不允许导入 .

    Function MySleep(milliseconds)
      set WScriptShell = CreateObject("WScript.Shell")
      WScriptShell.Run "Sleep -m " & milliseconds, 0, true
    end Function
    

    Update
    看起来Microsoft从win 8中删除了Sleep.exe,因此除非将Sleep.exe放在%path%中定义的文件夹中,否则这在win 8中不起作用 .

相关问题