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
Wbemdisp.h
Typbibliothek
Wbemdisp.tlb
DLL
Wbemdisp.dll
CLSID
CLSID _ SWbemServices
IID
IID _ ISWbemServices

Weitere Informationen

Swbemservices

SWbemEventSource.NextEvent

SWbemServices.ExecQuery

Empfangen eines WMI-Ereignisses

Abfragen mit WQL

WQL (SQL für WMI)

Bestimmen des Zu empfangenden Ereignistyps