Fungsi FindNextPrinterChangeNotification

Fungsi FindNextPrinterChangeNotification mengambil informasi tentang pemberitahuan perubahan terbaru untuk objek pemberitahuan perubahan yang terkait dengan printer atau server cetak. Panggil fungsi ini ketika operasi tunggu pada objek pemberitahuan perubahan terpenuhi.

Fungsi ini juga mengatur ulang objek pemberitahuan perubahan ke status tidak diberi sinyal. Anda kemudian dapat menggunakan objek dalam operasi tunggu lain untuk melanjutkan pemantauan pencetak atau server cetak. Sistem operasi akan mengatur objek ke status tersinyal saat berikutnya salah satu set perubahan tertentu terjadi pada printer atau server cetak. Fungsi FindFirstPrinterChangeNotification membuat objek pemberitahuan perubahan dan menentukan kumpulan perubahan yang akan dipantau.

Sintaks

BOOL FindNextPrinterChangeNotification(
  _In_      HANDLE hChange,
  _Out_opt_ PDWORD pdwChange,
  _In_opt_  LPVOID pPrinterNotifyOptions,
  _Out_opt_ LPVOID *ppPrinterNotifyInfo
);

Parameter

hChange [in]

Handel ke objek pemberitahuan perubahan yang terkait dengan printer atau server cetak. Anda mendapatkan handel seperti itu dengan memanggil fungsi FindFirstPrinterChangeNotification . Sistem operasi mengatur objek pemberitahuan perubahan ini ke status sinyal saat mendeteksi salah satu perubahan yang ditentukan dalam filter pemberitahuan perubahan objek.

pdwChange [keluar, opsional]

Penunjuk ke variabel yang bitnya diatur untuk menunjukkan perubahan yang terjadi untuk menyebabkan pemberitahuan terbaru. Bendera bit yang mungkin diatur sesuai dengan yang ditentukan dalam parameter fdwFilter dari panggilan FindFirstPrinterChangeNotification . Sistem menetapkan satu atau beberapa bendera bit berikut.

Nilai Makna
PRINTER_CHANGE_ADD_FORM
Formulir ditambahkan ke server.
PRINTER_CHANGE_ADD_JOB
Tugas cetak dikirim ke pencetak.
PRINTER_CHANGE_ADD_PORT
Porta atau monitor ditambahkan ke server.
PRINTER_CHANGE_ADD_PRINT_PROCESSOR
Prosesor cetak ditambahkan ke server.
PRINTER_CHANGE_ADD_PRINTER
Pencetak ditambahkan ke server.
PRINTER_CHANGE_ADD_PRINTER_DRIVER
Pengandar pencetak ditambahkan ke server.
PRINTER_CHANGE_CONFIGURE_PORT
Port dikonfigurasi pada server.
PRINTER_CHANGE_DELETE_FORM
Formulir dihapus dari server.
PRINTER_CHANGE_DELETE_JOB
Pekerjaan telah dihapus.
PRINTER_CHANGE_DELETE_PORT
Porta atau monitor dihapus dari server.
PRINTER_CHANGE_DELETE_PRINT_PROCESSOR
Prosesor cetak dihapus dari server.
PRINTER_CHANGE_DELETE_PRINTER
Pencetak telah dihapus.
PRINTER_CHANGE_DELETE_PRINTER_DRIVER
Pengandar pencetak dihapus dari server.
PRINTER_CHANGE_FAILED_CONNECTION_PRINTER
Sambungan pencetak gagal.
PRINTER_CHANGE_SET_FORM
Formulir disetel pada server.
PRINTER_CHANGE_SET_JOB
Pekerjaan telah ditetapkan.
PRINTER_CHANGE_SET_PRINTER
Pencetak telah disetel.
PRINTER_CHANGE_SET_PRINTER_DRIVER
Pengandar pencetak telah disetel.
PRINTER_CHANGE_WRITE_JOB
Data pekerjaan ditulis.
PRINTER_CHANGE_TIMEOUT
Waktu pekerjaan habis.
PRINTER_CHANGE_SERVER
Windows 7: Terjadi perubahan pada server.

pPrinterNotifyOptions [in, opsional]

Penunjuk ke struktur PRINTER_NOTIFY_OPTIONS . Atur anggota Bendera struktur ini ke PRINTER_NOTIFY_OPTIONS_REFRESH, untuk menyebabkan fungsi mengembalikan data saat ini untuk semua bidang informasi printer yang dipantau. Fungsi mengabaikan semua anggota struktur lainnya. Parameter ini bisa NULL.

ppPrinterNotifyInfo [keluar, opsional]

Penunjuk ke variabel penunjuk yang menerima penunjuk ke buffer baca-saja yang dialokasikan sistem. Panggil fungsi FreePrinterNotifyInfo untuk membebaskan buffer setelah Anda selesai. Parameter ini bisa NULL jika tidak ada informasi yang diperlukan.

Buffer berisi struktur PRINTER_NOTIFY_INFO , yang berisi array struktur PRINTER_NOTIFY_INFO_DATA . Setiap elemen array berisi informasi tentang salah satu bidang yang ditentukan dalam parameter pPrinterNotifyOptions dari panggilan FindFirstPrinterChangeNotification . Biasanya, fungsi ini menyediakan data hanya untuk bidang yang berubah untuk menyebabkan pemberitahuan terbaru. Namun, jika struktur yang ditujukan oleh parameter pPrinterNotifyOptions menentukan PRINTER_NOTIFY_OPTIONS_REFRESH, fungsi menyediakan data untuk semua bidang yang dipantau.

Jika bit PRINTER_NOTIFY_INFO_DISCARDED diatur di anggota Bendera dari struktur PRINTER_NOTIFY_INFO , terjadi luapan atau kesalahan, dan pemberitahuan mungkin telah hilang. Dalam hal ini, tidak ada pemberitahuan tambahan yang akan dikirim hingga Anda melakukan panggilan FindNextPrinterChangeNotification kedua yang menentukan PRINTER_NOTIFY_OPTIONS_REFRESH.

Mengembalikan nilai

Jika fungsi berhasil, nilai yang dikembalikan adalah nilai bukan nol.

Jika fungsi gagal, nilai yang dikembalikan adalah nol.

Keterangan

Catatan

Ini adalah fungsi pemblokiran atau sinkron dan mungkin tidak segera dikembalikan. Seberapa cepat fungsi ini kembali tergantung pada faktor run-time seperti status jaringan, konfigurasi server cetak, dan faktor implementasi driver printer yang sulit diprediksi saat menulis aplikasi. Memanggil fungsi ini dari utas yang mengelola interaksi dengan antarmuka pengguna dapat membuat aplikasi tampak tidak responsif.

Panggil fungsi FindNextPrinterChangeNotification setelah operasi tunggu pada objek pemberitahuan yang dibuat oleh FindFirstPrinterChangeNotification telah terpenuhi. Memanggil FindNextPrinterChangeNotification memungkinkan Anda mendapatkan informasi tentang perubahan yang memenuhi operasi tunggu, dan mengatur ulang objek pemberitahuan sehingga dapat diberi sinyal ketika perubahan berikutnya terjadi.

Dengan satu pengecualian, jangan panggil fungsi FindNextPrinterChangeNotification jika objek pemberitahuan perubahan tidak dalam status sinyal. Jika fungsi tunggu mengembalikan nilai WAIT_TIMEOUT, objek perubahan tidak dalam status disinyalkan. Panggil fungsi FindNextPrinterChangeNotification hanya jika fungsi tunggu berhasil tanpa waktu habis. Pengecualiannya adalah ketika FindNextPrinterChangeNotification dipanggil dengan bit PRINTER_NOTIFY_OPTIONS_REFRESH diatur dalam parameter pPrinterNotifyOptions . Perhatikan bahwa bahkan ketika bendera ini diatur, bendera PRINTER_NOTIFY_INFO_DISCARDED masih dapat diatur dalam parameter ppPrinterNotifyInfo .

Untuk terus memantau printer atau server cetak untuk perubahan, ulangi siklus panggilan salah satu fungsi tunggu , lalu panggil fungsi FindNextPrinterChangeNotification untuk memeriksa perubahan dan mengatur ulang objek pemberitahuan.

FindNextPrinterChangeNotification dapat menggabungkan beberapa perubahan ke bidang informasi printer yang sama ke dalam satu pemberitahuan. Ketika ini terjadi, fungsi biasanya menciutkan semua perubahan untuk bidang menjadi satu entri dalam array struktur PRINTER_NOTIFY_INFO_DATA di ppPrinterNotifyInfo; entri tunggal hanya melaporkan informasi terbaru. Namun, untuk beberapa bidang informasi pekerjaan dan printer, fungsi dapat mengembalikan beberapa entri array untuk bidang yang sama. Dalam hal ini, entri array terakhir untuk bidang melaporkan data saat ini, dan entri sebelumnya berisi data untuk tahap menengah.

Saat Anda tidak lagi memerlukan objek pemberitahuan perubahan, tutup dengan memanggil fungsi FindClosePrinterChangeNotification .

Catatan

Di Windows XP dengan Paket Layanan 2 (SP2) dan yang lebih baru, Internet Connection Firewall (ICF) memblokir port printer secara default, tetapi pengecualian untuk Berbagi File dan Cetak dapat diaktifkan. Jika pengguna membuat koneksi printer ke komputer lain, dan pengecualian tidak diaktifkan, maka pengguna tidak akan menerima pemberitahuan perubahan printer dari server. Admin komputer harus mengaktifkan pengecualian.

Contoh

Sampel kode berikut menggambarkan bagaimana Anda dapat memantau status printer dengan menggunakan fungsi-fungsi ini.

// Get change notification handle for the printer   
chgObject = FindFirstPrinterChangeNotification( 
                hPrinter, 
                PRINTER_CHANGE_JOB, 
                0, 
                NULL); 

if (chgObject != INVALID_HANDLE_VALUE) {
    while (bKeepMonitoring) {
        // Wait for the change notification 
        WaitForSingleObject(chgObject, INFINITE);

        fcnreturn = FindNextPrinterChangeNotification(
                        chgObject, 
                        pdwChange, 
                        NULL, 
                        NULL);

        if (fcnreturn) {
            // Check value of *pdwChange and 
            //  deal with the indicated change 
        }
        // Insert some mechanism to stop monitoring
        //  such as: 
        //
        // if (something happens) {
        //     bKeepMonitoring = false; 
        // }
        //
    }
    // Close Printer Change Notification handle when finished. 
    FindClosePrinterChangeNotification(chgObject);
} else {
    // Unable to open printer change notification handle 
    dwStatus = GetLastError();
}

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung
Windows 2000 Professional [hanya aplikasi desktop]
Server minimum yang didukung
Windows 2000 Server [hanya aplikasi desktop]
Header
Winspool.h (termasuk Windows.h)
Pustaka
Winspool.lib
DLL
Spoolss.dll

Lihat juga

Pencetakan

Cetak Fungsi API Spooler

FindClosePrinterChangeNotification

FindFirstPrinterChangeNotification

PRINTER_NOTIFY_INFO

PRINTER_NOTIFY_INFO_DATA

PRINTER_NOTIFY_OPTIONS