Metodo SWbemServices.ExecNotificationQuery

Il metodo ExecNotificationQuery dell'oggetto SWbemServices esegue una query per ricevere gli eventi. La chiamata restituisce immediatamente. L'utente può eseguire il polling dell'enumeratore restituito per gli eventi non appena arrivano.

Il metodo viene chiamato in modalità semisynchronous. Per altre informazioni, vedere Chiamata di un metodo.

Per una spiegazione di questa sintassi, vedere Document Conventions per l'API di scripting.

Sintassi

objwbemEventsource = .ExecNotificationQuery( _
  ByVal strQuery, _
  [ ByVal strQueryLanguage ], _
  [ ByVal iFlags ], _
  [ ByVal objWbemNamedValueSet ] _
)

Parametri

strQuery

Obbligatorio. Stringa contenente il testo della query correlata all'evento. Questo parametro non può essere vuoto. Per altre informazioni sulla compilazione di stringhe di query WMI, vedere Esecuzione di query con WQL e informazioni di riferimento su WQL .

strQueryLanguage [facoltativo]

Stringa contenente il linguaggio di query da utilizzare. Se specificato, questo valore deve essere "WQL".

iFlags [facoltativo]

Valore intero che determina il comportamento della query. Il valore predefinito è wbemFlagReturnImmediately + wbemFlagForwardOnly. Se si specifica questo parametro, questo parametro deve essere impostato su wbemFlagReturnImmediately e wbemFlagForwardOnly oppure la chiamata ha esito negativo. Questo parametro può accettare i valori seguenti.

wbemFlagForwardOnly (32 (0x20))

Fa sì che venga restituito un enumeratore forward-only. Gli enumeratori forward-only sono in genere molto più veloci e usano meno memoria rispetto agli enumeratori convenzionali, ma non consentono chiamate a SWbemObject.Clone_.

wbemFlagReturnImmediately (16 (0x10))

Fa sì che la chiamata venga restituita immediatamente.

objWbemNamedValueSet [facoltativo]

In genere, questo non è definito. In caso contrario, si tratta di un oggetto SWbemNamedValueSet i cui elementi rappresentano le informazioni di contesto che possono essere utilizzate dal provider che sta servendo la richiesta. Un provider che supporta o richiede tali informazioni deve documentare i nomi dei valori riconosciuti, il tipo di dati del valore, i valori consentiti e la semantica.

Valore restituito

Se non si verifica alcun errore, questo metodo restituisce un oggetto SWbemEventSource . È possibile chiamare il metodo SWbemEventSource.NextEvent per recuperare gli eventi non appena arrivano.

Codici di errore

Dopo il completamento del metodo ExecNotificationQuery , l'oggetto Err può contenere uno dei codici di errore nell'elenco seguente.

wbemErrAccessDenied - 2147749891 (0x80041003)

L'utente corrente non è autorizzato a visualizzare il set di risultati.

wbemErrFailed - 2147749889 (0x80041001)

Errore non specificato.

wbemErrInvalidParameter - 2147749896 (0x80041008)

È stato specificato un parametro non valido.

wbemErrInvalidQuery - 2147749911 (0x80041017)

La sintassi della query non è valida.

wbemErrInvalidQueryType - 2147749912 (0x80041018)

Il linguaggio della query richiesta non è supportato.

wbemErrOutOfMemory - 2147749894 (0x80041006)

Memoria insufficiente per completare l'operazione.

Commenti

A differenza del metodo SWbemServices.ExecQueryAsync , ExecNotificationQuery restituisce oggetti di tipo evento generati da eventi futuri anziché da oggetti esistenti. Gli oggetti evento che ExecNotificationQuery richiede possono essere intrinseci ( ad esempio __InstanceCreationEvent) o estrinsici (ad esempio eventi del provider del Registro di sistema come gli eventi RegistryKeyChangeEvent o SNMP). Per altre informazioni, vedere Determinazione del tipo di evento da ricevere e ricevere notifiche degli eventi.

Esistono limiti al numero di parole chiave AND e OR che possono essere usate nelle query WQL. Un numero elevato di parole chiave WQL usate in una query complessa può causare la restituzione del codice di errore WBEM_E_QUOTA_VIOLATION come valore HRESULT . Il limite di parole chiave WQL dipende dalla complessità della query.

Esempio

Nell'esempio di codice VBScript seguente vengono monitorate le modifiche apportate ai volumi in un computer locale. Si noti che Win32_VolumeChangeEvent è un evento estrinsico definito da un provider non un evento intrinseco definito da WMI. Per altre informazioni, vedere Determinazione del tipo di evento da ricevere.

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

Nell'esempio di codice VBScript seguente viene monitorata l'eliminazione del processo. Se si elimina un processo in Gestione attività o si chiude un'applicazione, lo script visualizza un messaggio. Si noti che questo script esegue una query su un evento intrinseco definito da WMI - __InstanceDeletionEvent.

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

Requisiti

Requisito Valore
Client minimo supportato
Windows Vista
Server minimo supportato
Windows Server 2008
Intestazione
Wbemdisp.h
Libreria dei tipi
Wbemdisp.tlb
DLL
Wbemdisp.dll
CLSID
CLSID_SWbemServices
IID
IID_ISWbemServices

Vedi anche

SWbemServices

SWbemEventSource.NextEvent

SWbemServices.ExecQuery

Ricezione di un evento WMI

Esecuzione di query con WQL

WQL (SQL per WMI)

Determinazione del tipo di evento da ricevere