Método SWbemServices.ExecNotificationQuery
O método ExecNotificationQuery do objeto SWbemServices executa uma consulta para receber eventos. A chamada é retornada imediatamente. O usuário pode sondar o enumerador retornado para encontrar eventos conforme eles chegam.
O método é chamado no modo semissíncrono. Para obter mais informações, consulte Chamar um método.
Para conferir uma explicação dessa sintaxe, confira Convenções de documentação para API de script.
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 a eventos. Este parâmetro não pode ficar em branco. Para obter mais informações sobre como criar cadeias de caracteres de consulta do WMI, veja Como consultar com WQL e a referência da WQL.
-
strQueryLanguage [opcional]
-
Cadeia de caracteres que contém a linguagem de consulta a ser usada. Se especificado, esse valor deverá ser "WQL".
-
iFlags [opcional]
-
Esse é um inteiro que determina o comportamento da consulta. O valor padrão é wbemFlagReturnImmediately + wbemFlagForwardOnly. Se você especificar esse parâmetro, ele 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 de encaminhamento seja retornado. Normalmente, os enumeradores apenas de encaminhamento são mais rápidos e usam menos memória do que os enumeradores convencionais, mas eles 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 será 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 não ocorrer nenhum erro, 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 poderá 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)
-
Foi especificado um parâmetro inválido.
-
wbemErrInvalidQuery - 2147749911 (0x80041017)
-
A sintaxe da consulta não é válida.
-
wbemErrInvalidQueryType – 2147749912 (0x80041018)
-
O idioma de consulta solicitado não tem suporte.
-
wbemErrOutOfMemory – 2147749894 (0x80041006)
-
Não há memória suficiente para concluir a operação.
Comentários
Ao contrário do método SWbemServices.ExecQueryAsync, o 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 RegistryKeyChangeEvent ou SNMP). Para obter mais informações, consulte Determinar o tipo de evento a receber e Receber notificações de eventos.
Existem limites no número de palavras-chave AND e OR que podem ser usadas nas consultas WQL. Um grande número de palavras-chave da 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 de um computador local. Observe que Win32_VolumeChangeEvent é um evento extrínseco definido por um provedor e não um evento intrínseco definido pelo WMI. Para obter mais informações, confira 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 |