Método SWbemServices.ExecNotificationQuery
O método ExecNotificationQuery do objeto SWbemServices executa uma consulta para receber eventos. A chamada retorna imediatamente. O usuário pode sondar o enumerador retornado para eventos conforme eles chegam.
O método é chamado no modo semissíncrono. Para obter mais informações, consulte Chamar um método.
Para obter uma explicação dessa sintaxe, consulte As Convenções de Documento para a API de Scripts.
Sintaxe
objwbemEventsource = .ExecNotificationQuery( _
ByVal strQuery, _
[ ByVal strQueryLanguage ], _
[ ByVal iFlags ], _
[ ByVal objWbemNamedValueSet ] _
)
Parâmetros
-
strQuery
-
Obrigatórios. Cadeia de caracteres que contém o texto da consulta relacionada ao evento. Esse parâmetro não pode ficar em branco. Para obter mais informações sobre como criar cadeias de caracteres de consulta WMI, consulte Consulta com WQL e a referência do WQL .
-
strQueryLanguage [opcional]
-
Cadeia de caracteres que contém a linguagem de consulta a ser usada. Se especificado, esse valor deve ser "WQL".
-
iFlags [opcional]
-
Esse é um inteiro que determina o comportamento da consulta. O valor padrão é wbemFlagReturnImmediatelywbemFlagForwardOnly + . Se você especificar esse parâmetro, esse parâmetro deverá ser definido como wbemFlagReturnImmediately e wbemFlagForwardOnly ou a chamada falhará. Esse parâmetro pode aceitar os valores a seguir.
-
wbemFlagForwardOnly (32 (0x20))
-
Faz com que um enumerador somente encaminhamento seja retornado. Os enumeradores somente para encaminhamento geralmente são muito mais rápidos e usam menos memória do que os enumeradores convencionais, mas não permitem chamadas para SWbemObject.Clone_.
-
wbemFlagReturnImmediately (16 (0x10))
-
Faz com que a chamada retorne imediatamente.
objWbemNamedValueSet [opcional]
Normalmente, isso é indefinido. Caso contrário, esse é um objeto SWbemNamedValueSet cujos elementos representam as informações de contexto que podem ser usadas pelo provedor que está atendendo à solicitação. Um provedor que dê suporte ou exija essas informações deve documentar os nomes de valor reconhecidos, o tipo de dados do valor, os valores permitidos e a semântica.
Retornar valor
Se nenhum erro ocorrer, esse método retornará um objeto SWbemEventSource . Você pode chamar o método SWbemEventSource.NextEvent para recuperar eventos conforme eles chegam.
Códigos do Erro
Após a conclusão do método ExecNotificationQuery , o objeto Err pode conter um dos códigos de erro na lista a seguir.
-
wbemErrAccessDenied - 2147749891 (0x80041003)
-
O usuário atual não está autorizado a exibir o conjunto de resultados.
-
wbemErrFailed - 2147749889 (0x80041001)
-
Erro não especificado.
-
wbemErrInvalidParameter - 2147749896 (0x80041008)
-
Parâmetro inválido foi especificado.
-
wbemErrInvalidQuery - 2147749911 (0x80041017)
-
A sintaxe de consulta não é válida.
-
wbemErrInvalidQueryType - 2147749912 (0x80041018)
-
O idioma de consulta solicitado não tem suporte.
-
wbemErrOutOfMemory - 2147749894 (0x80041006)
-
Memória insuficiente para concluir a operação.
Comentários
Ao contrário do método SWbemServices.ExecQueryAsync , ExecNotificationQuery retorna objetos de tipo de evento gerados por eventos futuros em vez de objetos existentes. Os objetos de evento que execNotificationQuery solicita podem ser intrínsecos (como __InstanceCreationEvent) ou extrínsecos (como eventos do provedor de registro, como eventos RegistryKeyChangeEvent ou SNMP). Para obter mais informações, consulte Determinar o tipo de evento a receber e receber notificações de evento.
Há limites para o número de palavras-chave AND e OR que podem ser usadas em consultas WQL. Um grande número de palavras-chave WQL usadas em uma consulta complexa pode fazer com que o WMI retorne o código de erro WBEM_E_QUOTA_VIOLATION como um valor HRESULT . O limite de palavras-chave WQL depende da complexidade da consulta.
Exemplos
O exemplo de código VBScript a seguir monitora alterações em volumes em um computador local. Observe que Win32_VolumeChangeEvent é um evento extrínseco definido por um provedor que não é um evento definido pelo WMI intrínseco. Para obter mais informações, consulte Determinar o tipo de evento a receber.
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
O exemplo de código VBScript a seguir monitora a exclusão do processo. Se você excluir um processo no Gerenciador de Tarefas ou fechar um aplicativo, o script exibirá uma mensagem. Observe que esse script consulta um evento intrínseco definido pelo 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 | Valor |
---|---|
Cliente mínimo com suporte |
Windows Vista |
Servidor mínimo com suporte |
Windows Server 2008 |
Cabeçalho |
|
Biblioteca de tipos |
|
DLL |
|
CLSID |
CLSID_SWbemServices |
IID |
IID_ISWbemServices |