<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBScript: отслеживание событий таймера WMI]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=1663</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=1663&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBScript: отслеживание событий таймера WMI».]]></description>
		<lastBuildDate>Thu, 26 Jun 2008 07:16:22 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: VBScript: отслеживание событий таймера WMI]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=11825#p11825</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (The gray Cardinal)]]></author>
			<pubDate>Thu, 26 Jun 2008 07:16:22 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=11825#p11825</guid>
		</item>
		<item>
			<title><![CDATA[VBScript: отслеживание событий таймера WMI]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=11824#p11824</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (The gray Cardinal)]]></author>
			<pubDate>Thu, 26 Jun 2008 07:12:51 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=11824#p11824</guid>
		</item>
	</channel>
</rss>
