<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBScript: отслеживание событий таймера WMI]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=1663&amp;type=atom" />
	<updated>2008-06-26T07:16:22Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=1663</id>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: отслеживание событий таймера WMI]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=11825#p11825" />
			<content type="html"><![CDATA[<p>Интересно, что свойства созданного экземпляра класса __IntervalTimerInstruction можно менять в обработчике события SWbemSink_OnObjectReady, а значит, и менять интервал вызова самого обработчика:<br /></p><div class="codebox"><pre><code>Option Explicit

Dim objSWbemServices
Dim objSWbemObjectIntervalTimerInstruction
Dim objSWbemObjectIntervalTimerInstructionInstance
Dim objSWbemSink

Dim strComputer


strComputer = &quot;.&quot;

&#039; Получаем объект SWbemServices
Set objSWbemServices = GetObject(&quot;winmgmts:{impersonationLevel=impersonate}!\\&quot; &amp; strComputer &amp; &quot;\root\cimv2&quot;)

&#039; Получаем класс __IntervalTimerInstruction
Set objSWbemObjectIntervalTimerInstruction = objSWbemServices.Get(&quot;__IntervalTimerInstruction&quot;)

&#039; Создаём экземпляр класса __IntervalTimerInstruction
Set objSWbemObjectIntervalTimerInstructionInstance = objSWbemObjectIntervalTimerInstruction.SpawnInstance_

With objSWbemObjectIntervalTimerInstructionInstance
    &#039; Задаём значения созданного экземпляра…
    .IntervalBetweenEvents = 1000
    .TimerId = &quot;MyTimer&quot;
    
    &#039; и записываем его
    .Put_
End With

&#039; Создаём объект SWbemSink
Set objSWbemSink = WScript.CreateObject(&quot;WbemScripting.SWbemSink&quot;, &quot;SWbemSink_&quot;)

&#039; Подписываемся асихронное оповещение о событиях 
objSWbemServices.ExecNotificationQueryAsync objSWbemSink, &quot;SELECT * FROM __TimerEvent WHERE TimerID = &#039;MyTimer&#039;&quot;

&#039; Делаем паузу в исполнении скрипта на 30 секунд
WScript.Echo &quot;Waiting for events in 30 seconds...&quot;
WScript.Sleep 1000 * 30
WScript.Echo &quot;Finishing script...&quot;

&#039; Отменяем подписку на оповещение о событиях
objSWbemSink.Cancel

&#039; Удаляем созданный экземпляр класса __IntervalTimerInstruction
objSWbemObjectIntervalTimerInstructionInstance.Delete_

&#039; Очищаем объекты
Set objSWbemSink = Nothing
Set objSWbemObjectIntervalTimerInstructionInstance = Nothing
Set objSWbemObjectIntervalTimerInstruction = Nothing
Set objSWbemServices = Nothing

WScript.Quit 0
&#039;=============================================================================

&#039;=============================================================================
Sub SWbemSink_OnObjectReady(objObject, objAsyncContext)
    With objSWbemObjectIntervalTimerInstructionInstance
        &#039; Меняем значение интервала
        .IntervalBetweenEvents = .IntervalBetweenEvents + 1000
        
        &#039; Записываем
        .Put_

        WScript.Echo &quot;[&quot; &amp; CStr(Time()) &amp; &quot;] : Timer event has occurred. Event&#039;s interval is &quot; &amp; CStr(.IntervalBetweenEvents) &amp; &quot;.&quot;
    End With
End Sub
&#039;=============================================================================</code></pre></div><p>Автор примера - <strong>alexii</strong>.</p>]]></content>
			<author>
				<name><![CDATA[The gray Cardinal]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=2</uri>
			</author>
			<updated>2008-06-26T07:16:22Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=11825#p11825</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[VBScript: отслеживание событий таймера WMI]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=11824#p11824" />
			<content type="html"><![CDATA[<p>Пример создаёт таймер с интервалом 2 секунды, а затем отслеживает этот таймер в течение 20 секунд с выдачей соответствующих сообщений.<br /></p><div class="codebox"><pre><code>Option Explicit

Dim objSWbemServices
Dim objSWbemObjectIntervalTimerInstruction
Dim objSWbemObjectIntervalTimerInstructionInstance
Dim objSWbemSink

Dim strComputer


strComputer = &quot;.&quot;

&#039; Получаем объект SWbemServices
Set objSWbemServices = GetObject(&quot;winmgmts:{impersonationLevel=impersonate}!\\&quot; &amp; strComputer &amp; &quot;\root\cimv2&quot;)

&#039; Получаем класс __IntervalTimerInstruction
Set objSWbemObjectIntervalTimerInstruction = objSWbemServices.Get(&quot;__IntervalTimerInstruction&quot;)

&#039; Создаём экземпляр класса __IntervalTimerInstruction
Set objSWbemObjectIntervalTimerInstructionInstance = objSWbemObjectIntervalTimerInstruction.SpawnInstance_

With objSWbemObjectIntervalTimerInstructionInstance
    &#039; Задаём значения созданного экземпляра…
    .IntervalBetweenEvents = 2000
    .TimerId = &quot;MyTimer&quot;
    
    &#039; и записываем его
    .Put_
End With

&#039; Создаём объект SWbemSink
Set objSWbemSink = WScript.CreateObject(&quot;WbemScripting.SWbemSink&quot;, &quot;SWbemSink_&quot;)

&#039; Подписываемся асихронное оповещение о событиях 
objSWbemServices.ExecNotificationQueryAsync objSWbemSink, &quot;SELECT * FROM __TimerEvent WHERE TimerID = &#039;MyTimer&#039;&quot;

&#039; Делаем паузу в исполнении скрипта на 20 секунд
WScript.Echo &quot;Waiting for events in 20 seconds...&quot;
WScript.Sleep 1000 * 20
WScript.Echo &quot;Finishing script...&quot;

&#039; Отменяем подписку на оповещение о событиях
objSWbemSink.Cancel

&#039; Удаляем созданный экземпляр класса __IntervalTimerInstruction
objSWbemObjectIntervalTimerInstructionInstance.Delete_

&#039; Очищаем объекты
Set objSWbemSink = Nothing
Set objSWbemObjectIntervalTimerInstructionInstance = Nothing
Set objSWbemObjectIntervalTimerInstruction = Nothing
Set objSWbemServices = Nothing

WScript.Quit 0
&#039;=============================================================================

&#039;=============================================================================
Sub SWbemSink_OnObjectReady(objObject, objAsyncContext)
    WScript.Echo &quot;[&quot; &amp; CStr(Time()) &amp; &quot;] : Timer event has occurred.&quot;
End Sub
&#039;=============================================================================</code></pre></div><p>Автор примера - <strong>alexii</strong>.</p>]]></content>
			<author>
				<name><![CDATA[The gray Cardinal]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=2</uri>
			</author>
			<updated>2008-06-26T07:12:51Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=11824#p11824</id>
		</entry>
</feed>
