SWbemServices.ExecNotificationQuery メソッド
SWbemServices オブジェクトの ExecNotificationQuery メソッドは、イベントを受信するクエリを実行します。 呼び出しはすぐに戻ります。 ユーザーは、返された列挙子をポーリングすることで、到着したイベントをチェックできます。
メソッドは、半同期モードで呼び出されます。 詳細については、「メソッドの呼び出し」を参照してください。
この構文の説明については、「スクリプト 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 など) と外部 (RegistryKeyChangeEvent や SNMP イベントなど) があります。 詳細については、「受信するイベントの種類の決定」および「イベント通知の受信」を参照してください。
WQL クエリで使用できる AND および OR キーワードの数には制限があります。 複雑なクエリで使用される 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 |
Header |
|
タイプ ライブラリ |
|
[DLL] |
|
CLSID |
CLSID_SWbemServices |
IID |
IID_ISWbemServices |