Método SWbemServices.ExecNotificationQuery
El método ExecNotificationQuery del objeto SWbemServices ejecuta una consulta para recibir eventos. La llamada se devuelve inmediatamente. El usuario puede sondear el enumerador que se devuelve en busca de eventos a medida que estos llegan.
Se llama al método en el modo semisincrónico. Para obtener más información, consulte Llamada a un método.
Para obtener una explicación de esta sintaxis, vea Convenciones de documentación para la API de scripting.
Sintaxis
objwbemEventsource = .ExecNotificationQuery( _
ByVal strQuery, _
[ ByVal strQueryLanguage ], _
[ ByVal iFlags ], _
[ ByVal objWbemNamedValueSet ] _
)
Parámetros
-
strQuery
-
Necesario. Cadena que contiene el texto de la consulta relacionada con eventos. Este parámetro no puede estar en blanco. Para más información sobre la creación de cadenas de consulta WMI, vea Consulta con WQL y la referencia WQL.
-
strQueryLanguage [opcional]
-
Cadena que contiene el lenguaje de consulta que se va a usar. Si se especifica, este valor debe ser "WQL".
-
iFlags [opcional]
-
El entero que determina el comportamiento de la consulta. El valor predeterminado es wbemFlagReturnImmediately + wbemFlagForwardOnly. Si especifica este parámetro, debe establecerse en wbemFlagReturnImmediately y también en wbemFlagForwardOnly o se producirá un error en la llamada. Este parámetro puede aceptar los valores siguientes.
-
wbemFlagForwardOnly (32 (0x20))
-
Provoca la devolución de un enumerador de solo avance. Los enumeradores de solo avance suelen ser mucho más rápidos y usan menos memoria que los enumeradores convencionales, pero no permiten llamadas a SWbemObject.Clone_.
-
wbemFlagReturnImmediately (16 (0x10))
-
Hace que la llamada se devuelva inmediatamente.
objWbemNamedValueSet [opcional]
Normalmente, esto no está definido. De lo contrario, se trata de un objeto SWbemNamedValueSet cuyos elementos representan la información de contexto que puede usar el proveedor que atiende la solicitud. Un proveedor que admita o necesite esa información debe documentar los nombres de valor reconocidos, el tipo de datos del valor, los valores permitidos y la semántica.
Valor devuelto
Si no se produce ningún error, este método devuelve un objeto SWbemEventSource. Puede llamar al método SWbemEventSource.NextEvent para recuperar los eventos a medida que llegan.
Códigos de error
Después de completar el método ExecNotificationQuery, el objeto Err puede contener uno de los códigos de error de la lista siguiente.
-
wbemErrAccessDenied: 2147749891 (0x80041003)
-
El usuario actual no está autorizado para ver el conjunto de resultados.
-
wbemErrFailed - 2147749889 (0x80041001)
-
Error no especificado.
-
wbemErrInvalidParameter: 2147749896 (0x80041008)
-
Se ha especificado un parámetro no válido.
-
wbemErrInvalidQuery: 2147749911 (0x80041017)
-
La sintaxis de la consulta no es válida.
-
wbemErrInvalidQueryType: 2147749912 (0x80041018)
-
No se admite el lenguaje de consulta solicitado.
-
wbemErrOutOfMemory: 2147749894 (0x80041006)
-
No hay suficiente memoria para completar la operación.
Comentarios
A diferencia del método SWbemServices.ExecQueryAsync, ExecNotificationQuery devuelve objetos de tipo de evento generados por eventos futuros en lugar de objetos existentes. Los objetos de evento que solicita ExecNotificationQuery pueden ser intrínsecos (como __InstanceCreationEvent) o extrínsecos (por ejemplo, eventos del proveedor del Registro como RegistryKeyChangeEvent o eventos de SNMP). Para obtener más información, vea Determinación del tipo de evento que se va a recibir y Recepción de notificaciones de eventos.
Existe un límite en el número de palabras clave AND y OR que pueden usarse en las consultas WQL. Un gran número de palabras clave de WQL usadas en una consulta compleja puede hacer que WMI devuelva el código de error WBEM_E_QUOTA_VIOLATION como valor HRESULT. El límite de palabras clave WQL que pueda usarse dependerá de la complejidad de la consulta.
Ejemplos
El siguiente ejemplo de código de VBScript supervisa los cambios en los volúmenes de un equipo local. Tenga en cuenta que Win32_VolumeChangeEvent es un evento extrínseco que define un proveedor, no un evento intrínseco definido por WMI. Para obtener más información, vea Determinación del tipo de evento que se va a recibir.
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
El siguiente ejemplo de código de VBScript supervisa la eliminación del proceso. Si elimina un proceso en el Administrador de tareas o cierra una aplicación, el script muestra un mensaje. Tenga en cuenta que este script consulta un evento intrínseco que define 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
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible |
Windows Vista |
Servidor mínimo compatible |
Windows Server 2008 |
Encabezado |
|
Biblioteca de tipos |
|
Archivo DLL |
|
CLSID |
CLSID_SWbemServices |
IID |
IID_ISWbemServices |