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
Wbemdisp.h
Biblioteca de tipos
Wbemdisp.tlb
DLL
Wbemdisp.dll
CLSID
CLSID_SWbemServices
IID
IID_ISWbemServices

Confira também

SWbemServices

SWbemEventSource.NextEvent

SWbemServices.ExecQuery

Recebendo um evento WMI

Consulta com WQL

WQL (SQL para WMI)

Determinando o tipo de evento a receber