SWbemServices.ExecNotificationQuery 方法

SWbemServices物件的ExecNotificationQuery方法會執行查詢來接收事件。 呼叫會立即傳回。 使用者可以在抵達時輪詢傳回的列舉值以取得事件。

方法會在半非同步模式中呼叫。 如需詳細資訊,請參閱 呼叫方法

如需此語法的說明,請參閱 腳本 API 的檔慣例

語法

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

參數

strQuery

必要。 包含事件相關查詢文字的字串。 此參數不可為空白。 如需建置 WMI 查詢字串的詳細資訊,請參閱 使用 WQL 查詢和 WQL 參考。

strQueryLanguage [選擇性]

包含要使用的查詢語言的字串。 如果指定,此值必須是 「WQL」。

iFlags [選擇性]

這是決定查詢行為的整數。 預設值為wbemFlagReturnImmediately + wbemFlagForwardOnly。 如果您指定此參數,這個參數必須同時設定為 wbemFlagReturnImmediatelywbemFlagForwardOnly ,否則呼叫會失敗。 此參數可以接受下列值。

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) 或外部 (,例如登錄提供者事件,例如RegistryKeyChangeEvent或 SNMP 事件) 。 如需詳細資訊,請參閱 決定接收接收事件通知的事件類型。

WQL 查詢中可以使用 的 ANDOR 關鍵字數目有一些限制。 複雜查詢中使用的大量 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 (適用於 WMI 的 SQL)

決定要接收的事件種類