1

Тема: 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

Куда еще можно покопать?

2

Re: VBS & JScript: Asynchronous WMI Sink

expertykt, скажите, пожалуйста, а ScriptControl для интерпретации скриптов используете для и обеспечения безопасности и изоляции от объектов документа или причина в другом ? Спрашиваю потому что, в принципе, можно делать интерпретацию подгруженного кода средствами самого VBA и тогда цепляться к событиям гораздо проще.

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

3

Re: VBS & JScript: Asynchronous WMI Sink

Xameleon,
не знаю другого способа грузить код в залоченый проект. И бонусом условная безопасность кода благодаря кажущейся изоляции от проекта книги.

интерпретацию подгруженного кода средствами самого VBA

это о чем?

4

Re: VBS & JScript: Asynchronous WMI Sink

expertykt, да была давно такая темка, но не уверен, что Вам понравится такой вариант.

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