1 (изменено: Xameleon, 2021-01-25 13:01:37)

Тема: 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)
Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

2

Re: HTA: Sleep для HTA / WSC

Что-то же было: JScript: Создание окна, а также трансляция WScript в HTA.

3

Re: HTA: Sleep для HTA / WSC

alexii, да, но если я правильно помню, то это опять же трансляция WSH объекта из одного процесса в другой (т.е их уже как минимум 2), что мне не очень нравится.

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

4

Re: HTA: Sleep для HTA / WSC

Да, именно так.