Metode SWbemServices.ExecNotificationQuery

Metode ExecNotificationQuery dari objek SWbemServices menjalankan kueri untuk menerima peristiwa. Panggilan segera kembali. Pengguna dapat melakukan polling enumerator yang dikembalikan untuk peristiwa saat mereka tiba.

Metode ini dipanggil dalam mode semisinkron. Untuk informasi selengkapnya, lihat Memanggil Metode.

Untuk penjelasan tentang sintaks ini, lihat Konvensi Dokumen untuk Scripting API.

Sintaks

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

Parameter

strQuery

Wajib diisi. String yang berisi teks kueri terkait peristiwa. Parameter ini tidak boleh kosong. Untuk informasi selengkapnya tentang membangun string kueri WMI, lihat Mengkueri dengan WQL dan referensi WQL .

strQueryLanguage [opsional]

String yang berisi bahasa kueri yang akan digunakan. Jika ditentukan, nilai ini harus "WQL".

iFlags [opsional]

Ini adalah bilangan bulat yang menentukan perilaku kueri. Nilai defaultnya adalah wbemFlagReturnImmediately + wbemFlagForwardOnly. Jika Anda menentukan parameter ini, parameter ini harus diatur ke wbemFlagReturnImmediately dan wbemFlagForwardOnly atau panggilan gagal. Parameter ini dapat menerima nilai berikut.

wbemFlagForwardOnly (32 (0x20))

Menyebabkan enumerator hanya maju dikembalikan. Enumerator hanya maju umumnya jauh lebih cepat dan menggunakan lebih sedikit memori daripada enumerator konvensional, tetapi mereka tidak mengizinkan panggilan untuk SWbemObject.Clone_.

wbemFlagReturnImmediately (16 (0x10))

Menyebabkan panggilan segera kembali.

objWbemNamedValueSet [opsional]

Biasanya, ini tidak ditentukan. Jika tidak, ini adalah objek SWbemNamedValueSet yang elemennya mewakili informasi konteks yang dapat digunakan oleh penyedia yang melayani permintaan. Penyedia yang mendukung atau memerlukan informasi tersebut harus men dokumentasikan nama nilai yang dikenali, jenis data nilai, nilai yang diizinkan, dan semantik.

Nilai kembali

Jika tidak ada kesalahan yang terjadi, metode ini mengembalikan objek SWbemEventSource . Anda dapat memanggil metode SWbemEventSource.NextEvent untuk mengambil peristiwa saat peristiwa tiba.

Kode kesalahan

Setelah penyelesaian metode ExecNotificationQuery , objek Err mungkin berisi salah satu kode kesalahan dalam daftar berikut.

wbemErrAccessDenied - 2147749891 (0x80041003)

Pengguna saat ini tidak berwenang untuk melihat tataan hasil.

wbemErrFailed - 2147749889 (0x80041001)

Kesalahan yang tidak ditentukan.

wbemErrInvalidParameter - 2147749896 (0x80041008)

Parameter tidak valid ditentukan.

wbemErrInvalidQuery - 2147749911 (0x80041017)

Sintaks kueri tidak valid.

wbemErrInvalidQueryType - 2147749912 (0x80041018)

Bahasa pemrogram kueri yang diminta tidak didukung.

wbemErrOutOfMemory - 2147749894 (0x80041006)

Memori tidak cukup untuk menyelesaikan operasi.

Keterangan

Tidak seperti metode SWbemServices.ExecQueryAsync , ExecNotificationQuery mengembalikan objek jenis peristiwa yang dihasilkan oleh peristiwa di masa mendatang daripada objek yang ada. Objek peristiwa yang diminta ExecNotificationQuery dapat berupa intrinsik (seperti __InstanceCreationEvent) atau ekstrinsik (seperti peristiwa penyedia registri seperti peristiwa RegistryKeyChangeEvent atau SNMP). Untuk informasi selengkapnya, lihat Menentukan Jenis Peristiwa untuk Menerima dan Menerima Pemberitahuan Peristiwa.

Ada batasan jumlah kata kunci AND dan OR yang dapat digunakan dalam kueri WQL. Sejumlah besar kata kunci WQL yang digunakan dalam kueri kompleks dapat menyebabkan WMI mengembalikan kode kesalahan WBEM_E_QUOTA_VIOLATION sebagai nilai HRESULT . Batas kata kunci WQL tergantung pada seberapa kompleks kuerinya.

Contoh

Contoh kode VBScript berikut memantau perubahan pada volume di komputer lokal. Perhatikan bahwa Win32_VolumeChangeEvent adalah peristiwa ekstrinsik yang ditentukan oleh penyedia bukan peristiwa yang ditentukan WMI intrinsik. Untuk informasi selengkapnya, lihat Menentukan Jenis Peristiwa yang Akan Diterima.

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

Contoh kode VBScript berikut memantau penghapusan proses. Jika Anda menghapus proses di Task Manager atau menutup aplikasi, maka skrip akan menampilkan pesan. Perhatikan bahwa skrip ini mengkueri peristiwa intrinsik yang ditentukan oleh 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

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung
Windows Vista
Server minimum yang didukung
Windows Server 2008
Header
Wbemdisp.h
Pustaka jenis
Wbemdisp.tlb
DLL
Wbemdisp.dll
CLSID
CLSID_SWbemServices
IID
IID_ISWbemServices

Lihat juga

SWbemServices

SWbemEventSource.NextEvent

SWbemServices.ExecQuery

Menerima Acara WMI

Mengkueri dengan WQL

WQL (SQL untuk WMI)

Menentukan Jenis Peristiwa yang Akan Diterima