Тема: HTA: Sleep для HTA / WSC
Когда-то давно потребовалась функция Sleep для WSC. Гугление привело только к такому результату. Но предложенные решения либо требовали запуска сторонних процессов либо админских прав. Ни то ни другое меня особо не устроило и я собрал свой вариант. Сейчас наткнулся на него и решил, пускай на форуме тоже будет. Мало ли кому-то пригодится.
Интересно, а какими альтернативами пользуетесь вы в таких случаях ?
Код для JS:
// Initializing sleep function
var sleep = (function(){
var evt = GetObject('winmgmts:root\\CIMV2').ExecNotificationQuery(
'SELECT Milliseconds FROM __InstanceModificationEvent WITHIN 10000 \
WHERE TargetInstance ISA "Win32_LocalTime" AND TargetInstance.Year < 0'
)
return function(milliseconds){
try {evt.NextEvent(milliseconds)} catch(e){}
}
})()
// Testing
var d = new Date();
sleep(3000);
WSH.Echo(new Date() - d)
Код для VBS:
' Class initialization and creating Sleep as instance for future calls
Class clsSleep
Private objEvent
Private Sub Class_Initialize()
Set objEvent = GetObject("winmgmts:root\CIMV2").ExecNotificationQuery( _
"SELECT Milliseconds FROM __InstanceModificationEvent WITHIN 10000" & _
"WHERE TargetInstance ISA 'Win32_LocalTime' AND TargetInstance.Year < 0")
End Sub
Public Default Sub [](Milliseconds)
On Error Resume Next
objEvent.NextEvent(Milliseconds)
End Sub
End Class
Dim Sleep:Set Sleep = new clsSleep
' Testing
Dim sngStartTime
sngStartTime = Timer
Sleep 3000
MsgBox Int((Timer - sngStartTime) * 1000)