Тема: HTA/HTML: асинхронное отслеживание событий WMI
Обычная функция VBScript CreateObject используемая в пространстве HTA/HTML неспособна задействовать обработку событий неграфического ActiveX объекта, даже если объект поставляет соответствующий интерфейс. Чтобы выйти из ситуации, нет ничего проще, как создать неграфический ActiveX объект поставляющий события, в виде графического элемента с нулевыми размерными параметрами и обрабатывать его события через функции вида имя объекта_имя события. В предложенном HTA примере идет обработка событий объекта синхронизации WMI ISWbemSink (асинхронное отслеживание создания нового процесса).
sample.hta:
<HTML>
<HEAD>
<meta http-equiv=Content-Type content="text/html; charset=windows-1251">
<TITLE>
Обработка событий объекта ISWbemSink в пространстве HTA/HTML
</TITLE>
</HEAD>
<BODY SCROLL="YES">
<OBJECT ID="ObjSink"
STYLE="position:absolute;top:0;left:0;width:0;height:0"
CLASSID="CLSID:75718C9A-F029-11D1-A1AC-00C04FB6C223">
</OBJECT>
<SCRIPT LANGUAGE="VBScript">
Set IObjService =GetObject("winmgmts:\\.\Root\CIMV2")
'---------------------------------------------------------------------------
IObjService.ExecNotificationQueryAsync _
ObjSink, _
"SELECT * FROM __InstanceCreationEvent WITHIN 2 WHERE TargetInstance ISA ""Win32_Process"""
'/Обработка события/
'---------------------------------------------------------------------------
Function ObjSink_OnObjectReady(objWbemObject, ISWbemNamedValueSet)
MsgBox objWbemObject.GetObjectText_,vbExclamation+vbSystemModal,"Обработка событий"
End Function
'---------------------------------------------------------------------------
Function window_onunload()
ObjSink.Cancel()
End Function
'---------------------------------------------------------------------------
Function window_onload()
MsgBox "Запустите какой-нибудь процесс...",vbExclamation+vbSystemModal,"Обработка событий"
End Function
'---------------------------------------------------------------------------
</SCRIPT>
</BODY>
</HTML>