<Return[F]><Top>

FindNextPrinterChangeNotification

Declare Function Api_FindNextPrinterChangeNotification& Lib "winspool.drv" Alias "FindNextPrinterChangeNotification" (ByVal hChange&, pdwChange&, ByVal pPrinterNotifyOptions$, ByVal ppPrinterNotifyInfo&)

Declare Function FindNextPrinterChangeNotification Lib "winspool.drv" Alias "FindNextPrinterChangeNotification" (ByVal hChange As Long, pdwChange As Long, ByVal pPrinterNotifyOptions As String, ByVal ppPrinterNotifyInfo As Long) As Long

プリンタまたはプリントサーバーに関連付けられた変更通知オブジェクトに関する最新の変更通知の情報を取得する。この関数は、変更通知オブジェクトに対する待機操作が満たされたときに使う。
また、この関数は変更通知オブジェクトを非シグナル状態にリセットする。その結果、オブジェクトに対して別の待機操作を実行し、プリンタまたはプリントサーバーの監視を続けることができる。指定した変更の 1 つがプリンタまたはプリントオブジェクトで発生すると、オペレーティングシステムによってオブジェクトがシグナル状態に設定される。変更通知オブジェクトは FindFirstPrinterChangeNotification 関数を使って作成する。この関数では、同時に監視する変更を指定する。

パラメータ
hChange
    プリンタまたはプリントサーバーに関連付けられた変更通知オブジェクトを識別するハンドルを指定する。このハンドルは、

    FindFirstPrinterChangeNotification 関数を使って取得する。オペレーティングシステムは、変更通知オブジェクトの変更通知フィルタで指

    定された変更の 1 つを検出すると、そのオブジェクトをシグナル状態に設定する。
pdwChange
    ダブルワード変数へのポインタを指定する。この変数のビットによって、最新の変更通知の原因になった変更が分かる。セットされるビットフ

    ラグは、FindFirstPrinterChangeNotification 関数のパラメータ fdwFlags でセットするフラグに対応する。

    システムは、次の 1 つ以上のビットフラグをセットする。

    値                                                                                       

意味                                                                                           

    PRINTER_CHANGE_ADD_FORM

フサーバーにフォームが追加された。

    PRINTER_CHANGE_ADD_JOB

プリンタに印刷ジョブが送信された。

    PRINTER_CHANGE_ADD_PORT

サーバーにポートまたはモニタが追加された。

    PRINTER_CHANGE_ADD_PRINT_PROCESSOR

サーバーにプリントプロセッサが追加された。

    PRINTER_CHANGE_ADD_PRINTER

サーバーにプリンタが追加された。

    PRINTER_CHANGE_ADD_PRINTER_DRIVER

サーバーにプリンタドライバが追加された。

    PRINTER_CHANGE_CONFIGURE_PORT

サーバー上でポートが設定された。

    PRINTER_CHANGE_DELETE_FORM サーバーからフォームが削除された。
    PRINTER_CHANGE_DELETE_JOB ジョブが削除された。
    PRINTER_CHANGE_DELETE_PORT サーバーからポートまたはモニタが削除された。
    PRINTER_CHANGE_DELETE_PRINT_PROCESSOR サーバーからプリントプロセッサが削除された。
    PRINTER_CHANGE_DELETE_PRINTER プリンタが削除された。
    PRINTER_CHANGE_DELETE_PRINTER_DRIVER サーバーからプリンタドライバが削除された。
    PRINTER_CHANGE_FAILED_CONNECTION_PRINTER プリンタへの接続に失敗した。
    PRINTER_CHANGE_SET_FORM サーバ上でフォームが設定された。
    PRINTER_CHANGE_SET_JOB ジョブが設定された。
    PRINTER_CHANGE_SET_PRINTER プリンタが設定された。
    PRINTER_CHANGE_SET_PRINTER_DRIVER プリンタドライバが設定された。
    PRINTER_CHANGE_WRITE_JOB ジョブデータが書き込まれた。

pPrinterNotifyOptions
    PRINTER_NOTIFY_OPTIONS 構造体へのポインタを指定する。この構造体のメンバ Flags を

    PRINTER_NOTIFY_OPTIONS_REFRESH に設定することによって、監視対象になっている全プリンタ情報フィールドの現在のデータを関

    数が返すようにする。他のメンバはすべて無視される。このパラメータは、NULL にできる。
ppPrinterNotifyInfo
    システムによって割り当てられる読み取り専用バッファのアドレスを受け取るポインタ変数へのポインタを指定する。作業が終わったら、

    FreePrinterNotifyInfo 関数を使ってバッファを解放する。必要な情報がないときは、このパラメータを NULL にできる。
    バッファには PRINTER_NOTIFY_INFO 構造体が入る。この構造体には、PRINTER_NOTIFY_INFO_DATA 構造体の配列が入る。

    配列の各要素には、FindFirstPrinterChangeNotification 関数のパラメータ pPrinterNotifyOptions で指定したフィールドの 1 つに関す

    る情報が入っている。通常、この配列によってデータが提供されるのは、変更され、最新の通知の原因になったフィールドだけである。ただ

    し、pPrinterNotifyOptions が指す構造体で PRINTER_NOTIFY_OPTIONS_REFRESH が指定されていると、監視対象になっている

    すべてのフィールドのデータが提供される。
    PRINTER_NOTIFY_INFO 構造体のメンバ Flags で PRINTER_NOTIFY_INFO_DISCARDED がセットされているときは、オーバーフ

    ローまたはエラーの発生によって、通知が失われていることがある。その場合、PRINTER_NOTIFY_OPTIONS_REFRESH を指定する

    FindNextPrinterChangeNotification をもう一度呼び出すまで通知は送信されなあい。

戻り値
    関数が成功すると、0 以外の値が返る。
    関数が失敗すると、0 が返る。拡張エラー情報を取得するには、GetLastError 関数を使う。

解説
    FindNextPrinterChangeNotification 関数は、FindFirstPrinterChangeNotification 関数で作成した通知オブジェクトに対する待機操作

    が満たされた後で使う。FindNextPrinterChangeNotification 関数は、待機操作を満たした変更に関する情報を取得し、通知オブジェク

    トをリセットすることによって、そのオブジェクトが次の変更のシグナルを受け取れるようにする。
    変更通知オブジェクトがシグナル状態でないときは FindNextPrinterChangeNotification 関数を呼び出してはならない。待機関数が

    WAIT_TIMEOUT を返すときは、変更オブジェクトがシグナル状態にはない。FindNextPrinterChangeNotification 関数は、待機関数

    がタイムアウトしないで成功した場合にのみ呼び出す。
    プリンタまたはプリントサーバーへの変更の監視を続けるには、待機関数の 1 つを呼び出した後、FindNextPrinterChangeNotification 関

    数で変更内容を調べて通知オブジェクトをリセットするというサイクルを繰り返す。
    FindNextPrinterChangeNotification 関数では 1 回の通知で、同じプリンタ情報フィールドに対して 2 回以上の変更が行われている場合

    がある。その場合、ppPrinterNotifyInfo の PRINTER_NOTIFY_INFO_DATA 構造体ではそのフィールドに対するすべての変更ではな

    く、最新の変更に関する情報だけが通知されるのが普通である。ただし、ジョブやプリンタ情報フィールドによっては、同じフィールドに関して

    複数の PRINTER_NOTIFY_INFO_DATA 構造体が配列に格納されることがある。その場合はフィールドに関する最後の構造体に現在

    のデータが入り、その前の構造体に途中のデータが入る。
    変更通知オブジェクトが不要になったら、FindClosePrinterChangeNotification 関数を使って閉じる。