Метод SWbemServices.ExecNotificationQuery

Метод ExecNotificationQuery объекта SWbemServices выполняет запрос для получения событий. Вызов возвращается немедленно. Пользователь может опрашив возвращаемый перечислитель событий по мере их поступления.

Метод вызывается в полусинхронном режиме. Дополнительные сведения см. в разделе "Вызов метода".

Описание этого синтаксиса см. в разделе "Соглашения о документах" для API скриптов.

Синтаксис

objwbemEventsource = .ExecNotificationQuery( _
  ByVal strQuery, _
  [ ByVal strQueryLanguage ], _
  [ ByVal iFlags ], _
  [ ByVal objWbemNamedValueSet ] _
)

Параметры

strQuery

Обязательный элемент. Строка, содержащая текст запроса, связанного с событиями. Этот параметр не может быть пустым. Дополнительные сведения о создании строк запросов WMI см. в статье "Запросы с помощью WQL " и справочника по WQL .

strQueryLanguage [необязательно]

Строка, содержащая используемый язык запросов. Если этот параметр указан, это значение должно иметь значение WQL.

iFlags [необязательно]

Это целое число, определяющее поведение запроса. Значение по умолчанию — wbemFlagReturnImmediatelywbemFlagForwardOnly + . Если этот параметр указан, этот параметр должен быть задан как wbemFlagReturnImmediately , так и wbemFlagForwardOnly или вызов завершается сбоем. Этот параметр может принимать следующие значения.

wbemFlagForwardOnly (32 (0x20))

Вызывает возврат перечислителя только для пересылки. Перечислители только для пересылки, как правило, гораздо быстрее и используют меньше памяти, чем обычные перечислители, но они не позволяют вызывать SWbemObject.Clone_.

wbemFlagReturnImmediately (16 (0x10))

Вызывает немедленное возвращение вызова.

objWbemNamedValueSet [необязательно]

Как правило, это не определено. В противном случае это объект SWbemNamedValueSet , элементы которого представляют сведения о контексте, которые могут использоваться поставщиком, обслуживающим запрос. Поставщик, поддерживающий или требующий такой информации, должен документирует распознанные имена значений, тип данных значения, допустимые значения и семантику.

Возвращаемое значение

Если ошибка не возникает, этот метод возвращает объект SWbemEventSource . Метод SWbemEventSource.NextEvent можно вызвать для получения событий по мере их поступления.

Коды ошибок

После завершения метода ExecNotificationQuery объект Err может содержать один из кодов ошибок в следующем списке.

wbemErrAccessDenied — 2147749891 (0x80041003)

Текущий пользователь не авторизован для просмотра результирующий набор.

wbemErrFailed — 2147749889 (0x80041001)

Незаданная ошибка.

wbemErrInvalidParameter — 2147749896 (0x80041008)

Указан недопустимый параметр.

wbemErrInvalidQuery — 2147749911 (0x80041017)

Недопустимый синтаксис запроса.

wbemErrInvalidQueryType — 2147749912 (0x80041018)

Запрошенный язык запросов не поддерживается.

wbemErrOutOfMemory — 2147749894 (0x80041006)

Недостаточно памяти для завершения операции.

Remarks

В отличие от метода SWbemServices.ExecQueryAsync, ExecNotificationQuery возвращает объекты типа событий, созданные будущими событиями, а не существующими объектами. Объекты событий, запрашиваемые ExecNotificationQuery , могут быть встроенными (например , __InstanceCreationEvent) или экстринсическими (например, событиями поставщика реестра, такими как RegistryKeyChangeEvent или СОБЫТИЯ SNMP). Дополнительные сведения см. в разделе "Определение типа события для получения и получения уведомлений о событиях".

Существуют ограничения на количество ключевых слов AND и OR , которые можно использовать в WQL-запросах. Большое количество ключевых слов WQL, используемых в сложном запросе, может привести к тому, что WMI возвращает код ошибки WBEM_E_QUOTA_VIOLATION в виде значения HRESULT . Ограничение ключевых слов WQL зависит от того, насколько сложным является запрос.

Примеры

Следующий пример кода VBScript отслеживает изменения томов на локальном компьютере. Обратите внимание, что Win32_VolumeChangeEvent является экстринсическим событием, которое определяется поставщиком, а не встроенным событием, определяемым WMI. Дополнительные сведения см. в разделе "Определение типа события для получения".

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

Следующий пример кода VBScript отслеживает удаление процесса. При удалении процесса в диспетчере задач или закрытии приложения скрипт отображает сообщение. Обратите внимание, что этот скрипт запрашивает встроенное событие, определенное 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

Требования

Требование Значение
Минимальная версия клиента
Windows Vista
Минимальная версия сервера
Windows Server 2008
Заголовок
Wbemdisp.h
Библиотека типов
Wbemdisp.tlb
DLL
Wbemdisp.dll
CLSID
CLSID_SWbemServices
IID
IID_ISWbemServices

См. также раздел

SWbemServices

SWbemEventSource.NextEvent

SWbemServices.ExecQuery

Получение события WMI

Выполнение запросов с помощью WQL

WQL (SQL для WMI)

Определение типа события для получения