勇芳软件工作室.汉化:  Windows Management Instrumentation > Scripting API for WMI > Scripting API Objects > SWbemServices >

ExecNotificationQuery Method

Previous pageReturn to chapter overviewNext page

描述

 

SWbemServices对象的ExecNotificationQuery方法执行一个查询以接收事件。该呼叫立即。用户可以在返回的枚举器到达时轮询事件。

 

该方法在半同步模式下被调用。有关详细信息,请参阅调用方法.

 

PowerBASIC 语法

 

METHOD ExecNotificationQuery ( _

BYVAL strQuery AS WSTRING, _

OPTIONAL BYVAL strQueryLanguage AS WSTRING, _

OPTIONAL BYVAL iFlags AS LONG, _

OPTIONAL BYVAL objWbemNamedValueSet AS IDispatch _

) AS ISWbemEventSource

 

参数

 

strQuery

 

需要。包含事件相关查询文本的字符串。此参数不能为空。

 

strQueryLanguage

 

包含要使用的查询语言的字符串。如果指定,此值必须为“WQL”。

 

iFlags

 

这是一个确定查询行为的整数。默认值为wbemFlagReturnImmediately+ wbemFlagForwardOnly.如果指定此参数,则此参数必须设置为wbemFlagReturnImmediatelywbemFlagForwardOnly或调用失败。此参数可以接受以下值。

 

含义

wbemFlagForwardOnly

32

&H20

导致只返回枚举器。前向枚举器通常比传统枚举器更快,使用更少的内存,但不允许调用SWbemObject.Clone_.

wbemFlagReturnImmediately

16

&H10

使呼叫立即返回。

 

objWbemNamedValueSet

 

通常,这是未定义的。否则,这是一个SWbemNamedValueSet对象,其元素表示正在为请求提供服务的提供商可以使用的上下文信息。支持或要求此类信息的提供者必须记录识别的值名称,值的数据类型,允许的值和语义。

 

返回值

 

如果没有发生错误,该方法返回一个SWbemEventSource对象。您可以调用SWbemEventSource.NextEvent方法来检索事件到达时。

 

OBJRESULT

 

错误(名称/十进制/十六进制)

含义

wbemErrAccessDenied

-2147217405

&H80041003

当前用户无权查看结果集。

wbemErrFailed

-2147217407

&H80041001

未指定错误

wbemErrInvalidParameter

-2147217400

&H80041008

指定了无效参数。

wbemErrInvalidQuery

-2147217385

&H80041017

查询语法无效。

wbemErrInvalidQueryType

-2147217384

&H80041018

不支持请求的查询语言。

wbemErrOutOfMemory

-2147217402

&H80041006

没有足够的内存来完成操作。

 

示例代码[VBScript]

 

以下VBScript代码示例监视本地计算机上对卷的更改。请注意,Win32_VolumeChangeEvent是由提供程序—定义的外部事件,而不是内在的WMI定义的事件。有关详细信息,请参阅确定要接收的事件类型.

 

Windows 2000,Windows NT 4.0和Windows Me / 98/95Win32_VolumeChangeEvent不可用。

 

设置colMonitoredEvents = _

 GetObject("Winmgmts:").ExecNotificationQuery_

  (“从Win32_VolumeChangeEvent选择*”)

 

当我= 0

 设置strLatestEvent = colMonitoredEvents.NextEvent

 Wscript.Echo strLatestEvent.DriveName &“创建时间=”_

  &strLatestEvent.Time_Created

 

 选择案例strLatestEvent.EventType

   案例1    

     WScript.Echo“EventType = Configuration Changed”

   案例2

     WScript.Echo“EventType =设备到达”

   案例3

     WScript.Echo“EventType =设备删除”

   案例4

     WScript.Echo“EventType = Docking”

 

   Case Else

     WScript.Echo“无法识别的事件类型”

   结束选择

循环

 

示例代码[VBScript]

 

以下VBScript代码示例监视进程删除。如果您删除任务管理器中的进程或关闭应用程序,则脚本将显示一条消息。请注意,此脚本查询由WMI - __InstanceDeletionEvent定义的内部事件。

 

设置objWMIService = GetObject(_

 “Winmgmts:{impersonationLevel = impersonate}”)

设置colMonitoredProcesses = _

 objWMIService.ExecNotificationQuery(_

 “SELECT * FROM __InstanceDeletionEvent WITHIN 10 WHERE”_

 &“TargetInstance ISA”Win32_Process“”)

i = 0

当我<11

 设置strLatestProcess = colMonitoredProcesses.NextEvent

 WScript.Echo strLatestProcess.TargetInstance.Name

 WScript.Sleep 10000

  i= i + 1

循环

 

备注

 

SWbemServices.ExecQueryAsync方法不同,ExecNotificationQuery返回由未来事件而不是现有对象生成的事件类型对象。事件对象ExecNotificationQuery请求可以是内在的(例如__InstanceCreationEvent)或外部的(例如注册表提供者事件,如RegistryKeyChangeEvent或SNMP事件)。有关详细信息,请参阅确定接收和接收事件通知的事件类型.

 

对于可在WQL查询中使用的ANDOR关键字的数量有限制。复杂查询中使用的大量WQL关键字可能导致WMI返回作为HRESULT值的WBEM_E_QUOTA_VIOLATION错误代码。WQL关键字的限制取决于查询的复杂程度。

 

要求

 

客户

需要Windows Vista,Windows XP,Windows 2000 Professional,Windows NT Workstation 4.0 SP4及更高版本,Windows Me,Windows 98或Windows 95 OSR2及更高版本。

服务器

需要Windows Server 2008,Windows Server 2003,Windows 2000 Server或Windows NT Server 4.0 SP4及更高版本。

类型库

使用Wbemdisp.tlb。

Wbemdisp.inc。

DLL

需要Wbemdisp.dll。