Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Метод ExecNotificationQuery объекта SWbemServices выполняет запрос для получения событий. Вызов возвращается немедленно. Пользователь может опрашив возвращаемый перечислитель на наличие событий по мере их поступления.
Метод вызывается в полусинхронном режиме. Дополнительные сведения см. в разделе Вызов метода .
Описание этого синтаксиса см. в разделе Соглашения о документах для API сценариев.
Синтаксис
objwbemEventsource = .ExecNotificationQuery( _
ByVal strQuery, _
[ ByVal strQueryLanguage ], _
[ ByVal iFlags ], _
[ ByVal objWbemNamedValueSet ] _
)
Параметры
-
strQuery
-
Обязательный. Строка, содержащая текст запроса, связанного с событиями. Этот параметр не может быть пустым. Дополнительные сведения о создании строк запросов WMI см. в разделах Запросы с помощью WQL и Справочник по WQL .
-
strQueryLanguage [необязательно]
-
Строка, содержащая используемый язык запросов. Если он указан, это значение должно быть WQL.
-
iFlags [необязательно]
-
Это целое число, определяющее поведение запроса. Значение по умолчанию — wbemFlagReturnImmediately + wbemFlagForwardOnly. Если вы укажете этот параметр, для этого параметра необходимо задать как 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)
-
Недостаточно памяти для завершения операции.
Комментарии
В отличие от метода SWbemServices.ExecQueryAsync , ExecNotificationQuery возвращает объекты типа событий, созданные будущими событиями, а не существующими объектами. Объекты событий, запрашиваемые ExecNotificationQuery , могут быть встроенными (например , __InstanceCreationEvent) или extrinsic (например, событиями поставщика реестра, такими как 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 |
| Заголовок |
|
| Библиотека типов |
|
| DLL |
|
| CLSID |
CLSID_SWbemServices |
| IID |
IID_ISWbemServices |