Partilhar via


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

Confira também

SWbemServices

SWbemEventSource.NextEvent

SWbemServices.ExecQuery

Receber um evento do WMI

Como consultar com WQL

WQL (SQL para WMI)

Determinar o tipo de evento a receber