SWbemServices.ExecNotificationQuery-Methode
Die ExecNotificationQuery-Methode des SWbemServices-Objekts führt eine Abfrage aus, um Ereignisse zu empfangen. Der Aufruf wird sofort zurückgegeben. Der Benutzer kann den zurückgegebenen Enumerator nach Ereignissen bei deren Ankunft abrufen.
Die -Methode wird im semisynchronen Modus aufgerufen. Weitere Informationen finden Sie unter Aufrufen einer Methode.
Eine Erläuterung dieser Syntax finden Sie unter Dokumentkonventionen für die Skripterstellungs-API.
Syntax
objwbemEventsource = .ExecNotificationQuery( _
ByVal strQuery, _
[ ByVal strQueryLanguage ], _
[ ByVal iFlags ], _
[ ByVal objWbemNamedValueSet ] _
)
Parameter
-
strQuery
-
Erforderlich. Eine Zeichenfolge, die den Text der ereignisbezogenen Abfrage enthält. Dieser Parameter darf nicht leer sein. Weitere Informationen zum Erstellen von WMI-Abfragezeichenfolgen finden Sie unter Abfragen mit WQL und in der WQL-Referenz.
-
strQueryLanguage [ Optional]
-
Eine Zeichenfolge, die die zu verwendende Abfragesprache enthält. Wenn angegeben, muss dieser Wert "WQL" sein.
-
iFlags [ Optional]
-
Dies ist eine ganze Zahl, die das Verhalten der Abfrage bestimmt. Der Standardwert ist wbemFlagReturnImmediately + wbemFlagForwardOnly. Wenn Sie diesen Parameter angeben, muss dieser Parameter sowohl auf wbemFlagReturnImmediately als auch auf wbemFlagForwardOnly festgelegt werden, da der Aufruf fehlschlägt. Dieser Parameter kann die folgenden Werte akzeptieren.
-
wbemFlagForwardOnly** (32 (0x20))
-
Bewirkt, dass ein vorwärts enumerator zurückgegeben wird. Vorwärts-Enumeratoren sind im Allgemeinen viel schneller und verwenden weniger Arbeitsspeicher als herkömmliche Enumeratoren, aber sie lassen keine Aufrufe von SWbemObject.Clone zu. _
-
wbemFlagReturnImmediately( (16 (0x10))
-
Bewirkt, dass der Aufruf sofort zurückkehrt.
objWbemNamedValueSet [ Optional]
In der Regel ist dies nicht definiert. Andernfalls ist dies ein SWbemNamedValueSet-Objekt, dessen Elemente die Kontextinformationen darstellen, die vom Anbieter verwendet werden können, der die Anforderung bedient. Ein Anbieter, der solche Informationen unterstützt oder erfordert, muss die erkannten Wertnamen, den Datentyp des Werts, die zulässigen Werte und die Semantik dokumentieren.
Rückgabewert
Wenn kein Fehler auftritt, gibt diese Methode ein SWbemEventSource-Objekt zurück. Sie können die SWbemEventSource.NextEvent-Methode aufrufen, um Ereignisse abzurufen, sobald sie eintreffen.
Fehlercodes
Nach Abschluss der ExecNotificationQuery-Methode kann das Err-Objekt einen der Fehlercodes in der folgenden Liste enthalten.
-
wbemErrAccessDenied – 2147749891 (0x80041003)
-
Der aktuelle Benutzer ist nicht berechtigt, das Ergebnis anzeigen zu können.
-
wbemErrFailed – 2147749889 (0x80041001)
-
Unbekannter Fehler.
-
wbemErrInvalidParameter – 2147749896 (0x80041008)
-
Ungültiger Parameter wurde angegeben.
-
wbemErrInvalidQuery – 2147749911 (0x80041017)
-
Die Abfragesyntax ist ungültig.
-
wbemErrInvalidQueryType – 2147749912 (0x80041018)
-
Die angeforderte Abfragesprache wird nicht unterstützt.
-
wbemErrOutOfMemory : 2147749894 (0x80041006)
-
Nicht genügend Arbeitsspeicher zum Abschließen des Vorgangs.
Hinweise
Im Gegensatz zur SWbemServices.ExecQueryAsync-Methode gibt ExecNotificationQuery Ereignistypobjekte zurück, die von zukünftigen Ereignissen und nicht von vorhandenen Objekten generiert werden. Die Ereignisobjekte, die von ExecNotificationQuery anforderungen, können entweder intrinsisch (z. B. _ _ InstanceCreationEvent)oder extrinsisch (z. B. Registrierungsanbieterereignisse wie RegistryKeyChangeEvent- oder SNMP-Ereignisse) sein. Weitere Informationen finden Sie unter Bestimmen des Ereignistyps zum Empfangen und Empfangen von Ereignisbenachrichtigungen.
Die Anzahl der SCHLÜSSELWÖRTER AND und OR, die in WQL-Abfragen verwendet werden können, ist begrenzt. Eine große Anzahl von WQL-Schlüsselwörtern, die in einer komplexen Abfrage verwendet werden, kann dazu führen, dass WMI den WBEM _ E _ QUOTA _ VIOLATION-Fehlercode als HRESULT-Wert zurückgibt. Der Grenzwert für WQL-Schlüsselwörter hängt davon ab, wie komplex die Abfrage ist.
Beispiele
Im folgenden VBScript-Codebeispiel werden Änderungen an Volumes auf einem lokalen Computer überwacht. Beachten Sie, dass Win32 _ VolumeChangeEvent ein extrinsisches Ereignis ist, das von einem Anbieter definiert wird, kein systeminternes WMI-definiertes Ereignis. Weitere Informationen finden Sie unter Bestimmen des Ereignistyps, der empfangen werden soll.
Set colMonitoredEvents = _
GetObject("Winmgmts:").ExecNotificationQuery_
("Select * from Win32_VolumeChangeEvent")
Do While i = 0
Set strLatestEvent = colMonitoredEvents.NextEvent
Wscript.Echo strLatestEvent.DriveName & "Time Created = " _
& strLatestEvent.Time_Created
Select Case strLatestEvent.EventType
Case 1
WScript.Echo "EventType = Configuration Changed"
Case 2
WScript.Echo "EventType = Device Arrival"
Case 3
WScript.Echo "EventType = Device Removal"
Case 4
WScript.Echo "EventType = Docking"
Case Else
WScript.Echo "Unrecognized EventType"
End Select
Loop
Im folgenden VBScript-Codebeispiel wird das Löschen des Prozesses überwacht. Wenn Sie einen Prozess in einem Task-Manager oder eine Anwendung schließen, zeigt das Skript eine Meldung an. Beachten Sie, dass dieses Skript ein systeminternes Ereignis abfragt, das durch WMI - _ _ InstanceDeletionEvent definiert wird.
Set objWMIService = GetObject( _
"Winmgmts:{impersonationLevel=impersonate}" )
Set colMonitoredProcesses = _
objWMIService.ExecNotificationQuery( _
"SELECT * FROM __InstanceDeletionEvent WITHIN 10 WHERE " _
& "TargetInstance ISA 'Win32_Process'")
i = 0
Do While i < 11
Set strLatestProcess = colMonitoredProcesses.NextEvent
WScript.Echo strLatestProcess.TargetInstance.Name
WScript.Sleep 10000
i= i + 1
Loop
Anforderungen
| Anforderung | Wert |
|---|---|
| Unterstützte Mindestversion (Client) |
Windows Vista |
| Unterstützte Mindestversion (Server) |
Windows Server 2008 |
| Header |
|
| Typbibliothek |
|
| DLL |
|
| CLSID |
CLSID _ SWbemServices |
| IID |
IID _ ISWbemServices |