2

私が作成したいくつかの .HTA スクリプトでは、CPU を使用せずに数ミリ秒だけ待機する VBScript WScript.Sleep コマンドが必要でした。Web をブラウジングすると、これを探しているのは私だけではないようです。

https://www.google.nl/search?q=hta+sleep

(これを読んだら、おそらくこれも必要になると思います)

私が見つけた最善の解決策は、PING コマンドを使用するものであるようです。しかし、特に、スクリプトを数 100 ミリ秒一時停止するだけでよい場合、このソリューションは、外部コマンドを使用し、関連する .HTA スクリプトとはほとんど関係のないあらゆる種類の (ネットワーク) プロセスをトリガーするため、静かで奇妙です。

そのため、最初に思いついたのは、WMI の Win32_PingStatus クラスを使用して外部コマンドを回避することでしたが、完全に WMI に基づいていない理由を疑問に思うようになりました。適切な WMI クラスとメソッドを配置するのに数時間かかりましたが、ついに成功しました...</p>

4

5 に答える 5

1
Sub Sleep(iMilliSeconds)

    With GetObject("winmgmts:\\.\root\cimv2")
        With .Get("__IntervalTimerInstruction").SpawnInstance_()
            .TimerId = "Sleep"
            .IntervalBetweenEvents = iMilliSeconds
            .Put_()
        End With
        .ExecNotificationQuery("SELECT * FROM __TimerEvent WHERE TimerId='Sleep'").NextEvent
    End With

End Sub

2015 年 2 月 11 日追加:

残念ながら、この機能は Internet Explorer 10 を使用している場合は機能しません (以下のコメントを参照)。Internet Explorer 11 がインストールされている場合、HTA を管理者として実行すると動作するように見えます。

于 2013-05-31T20:25:37.767 に答える
0

Wait(2000) '2秒休止

Sub Wait(Time)
  Dim wmiQuery, objWMIService, objPing, objStatus
  wmiQuery = "Select * From Win32_PingStatus Where Address = '1.1.1.1' AND Timeout = " & Time
  Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
  Set objPing = objWMIService.ExecQuery(wmiQuery)
  For Each objStatus in objPing
  Next
End Sub
于 2014-10-01T10:25:51.347 に答える