Beispiel: Gleichzeitiges Überwachen mehrerer Ereignis Abfragen
Im folgenden Skript Beispiel wird die asynchrone Ereignis Benachrichtigung veranschaulicht, wobei die SWbemServices.Execnotificationqueryasync -Methode und das slibemsink -Objekt verwendet werden.
Hinweis
Da der Rückruf für die Senke möglicherweise nicht auf derselben Authentifizierungs Ebene wie der Client zurückgegeben wird, wird empfohlen, semisynchrone anstelle der asynchronen Kommunikation zu verwenden. Weitere Informationen finden Sie unter Aufrufen einer Methode.
Dim WithEvents sink As SWbemSink
Private Sub ExecNoteAsync_Click()
Dim services As SWbemServices
Dim strQuery As String
Dim cntxt As SWbemNamedValueSet
Set sink = New SWbemSink
Set services = GetObject( _
"winmgmts:{impersonationLevel=impersonate,(security)}")
strQuery = "SELECT * FROM __InstanceCreationEvent "& _
"WHERE TargetInstance ISA 'Win32_NTLogEvent'"
Set cntxt = New SWbemNamedValueSet
cntxt.Add "sinkname", "ExecNoteAsync"
services.Security_.Privileges.Add (wbemPrivilegeSecurity)
services.ExecNotificationQueryAsync sink, strQuery, , , , cntxt
MsgBox "This program will asynchronously " _
& "process Win32_NTLogEvent events."
End Sub
Private Sub sink_OnObjectReady( _
ByVal objWbemObject As WbemScripting.ISWbemObject,
ByVal objWbemAsyncContext As _
WbemScripting.ISWbemNamedValueSet)
On Error GoTo ErrorHandler
Dim cntxt_item As WbemScripting.SWbemNamedValue
Set cntxt_item = objWbemAsyncContext.Item("sinkname")
If cntxt_item.Value = "ExecNoteAsync" Then
MsgBox " Got event: " & objWbemObject.TargetInstance.Message
End If
Set objWbemObject = Nothing
Exit Sub ' Exit to avoid handler
ErrorHandler:
MsgBox "Error number: " & Str(Err.Number) & vbNewLine & _
"Description: " & Err.Description, vbCritical
End Sub