Тема: VBS & JScript: Asynchronous WMI Sink
Не представляю, как реализовать подключение событий WMI в MSScriptControl.
Ни VBS, ни JScript не позволяют реализовать
Set objSWbemSink = WScript.CreateObject("WbemScripting.SWbemSink", "Sink_")
Задача: в Excel создать таймер для управления загружаемым в ScriptControl из облака кодом.
В VBA таймер работает. Однако, постоянная передача управления VBA <-> ScriptControl и обратно через Excel.Run jscript и SC.run vbascript слишком часто крашит. Предполагается, что исключение этой связки повысит стабильность.
Вариант подключения в ScriptControl VBA-объекта таймера через AddObject выглядит костылем.
Класс VBA-таймера
Dim objSWbemServicesEx As Object
Dim WithEvents objSWbemSink As WbemScripting.SWbemSink
Dim todo, par1, par2, par3, par4, par5 As String
Private Sub Class_Initialize()
Set objSWbemServicesEx = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set objSWbemSink = New WbemScripting.SWbemSink
todo = par1 = par2 = par3 = ""
End Sub
Public Sub Start(sec, jsFunc, p1, p2, p3, p4, p5)
todo = jsFunc
par1 = p1
par2 = p2
par3 = p3
par4 = p4
par5 = p5
objSWbemServicesEx.ExecNotificationQueryAsync objSWbemSink, "SELECT * FROM __InstanceModificationEvent WHERE TargetInstance ISA 'Win32_LocalTime' AND TargetInstance.Second=" & sec
End Sub
Private Sub objSWbemSink_OnObjectReady(ByVal objWbemObject As WbemScripting.ISWbemObject, ByVal objWbemAsyncContext As WbemScripting.ISWbemNamedValueSet)
objSWbemSink.Cancel
Code.Run todo, Excel.Application, par1, par2, par3, par4, par5
End Sub
Куда еще можно покопать?