<Return[F]><Top>

FindFirstPrinterChangeNotification

Declare Function Api_FindFirstPrinterChangeNotification& Lib "winspool.drv" Alias "FindFirstPrinterChangeNotification" (ByVal hPrinter&, ByVal fdwFlags&, ByVal fdwOptions&, ByVal pPrinterNotifyOptions$)

Declare Function FindFirstPrinterChangeNotification Lib "winspool.drv" Alias "FindFirstPrinterChangeNotification" (ByVal hPrinter As Long, ByVal fdwFlags As Long, ByVal fdwOptions As Long, ByVal pPrinterNotifyOptions As String) As Long

変更通知オブジェクトを作成し、作成したオブジェクトを識別するハンドルを返す。このハンドルは、プリンタまたはプリンタサーバーへの変更を監視する待機関数の 1 つで使える。
FindFirstPrinterChangeNotification の呼び出しでは、監視する変更の種類を指定する。変更の監視条件とプリンタ情報フィールドの一方または両方で指定できる。
変更通知ハンドルに対する待機操作は、指定したプリンタまたはプリントサーバーで指定した変更の 1 つが行われたとき成功する。この関数が成功したら、FindNextPrinterChangeNotification 関数を使い、変更についての情報を取得し、次の待機操作で使うために変更通知オブジェクトをリセットする。

パラメータ
hPrinter
    監視したいプリンタまたはプリントサーバーを識別するハンドルを指定する。このハンドルは、OpenPrinter を使って取得する。
fdwFlags
    変更通知オブジェクトをシグナル状態にする条件を一連のビットフラグで指定する。ここで指定した条件の 1 つ以上が満たされると、変更通

    知が発生する。pPrinterNotifyOptions に NULL 以外を指定したときは、パラメータ fdwFlags を 0 に設定できる。
    次の 1 つ以上の変更通知定数をセットできる。

    値                                                                 

意味                                                                                                                 

    PRINTER_CHANGE_FORM

フォームへの変更があると通知する。この汎用フラグまたは次の 1 つ以上の専用フラグをセットできる。

PRINTER_CHANGE_ADD_FORM PRINTER_CHANGE_SET_FORM PRINTER_CHANGE_DELETE_FORM

    PRINTER_CHANGE_JOB

ジョブへの変更があると通知する。この汎用フラグまたは次の 1 つ以上の専用フラグをセットできる。
PRINTER_CHANGE_ADD_JOB PRINTER_CHANGE_SET_JOB

PRINTER_CHANGE_DELETE_JOB PRINTER_CHANGE_WRITE_JOB

    PRINTER_CHANGE_PORT

ポートへの変更があると通知する。この汎用フラグまたは次の 1 つ以上の専用フラグをセットできる。
PRINTER_CHANGE_ADD_PORT PRINTER_CHANGE_CONFIGURE_PORT PRINTER_CHANGE_DELETE_PORT

    PRINTER_CHANGE_PRINT_PROCESSOR

プリントプロセッサへの変更があると通知する。この汎用フラグまたは次の 1 つ以上の専用フラグをセットできる。
PRINTER_CHANGE_ADD_PRINT_PROCESSORPRINTER_CHANGE_DELETE_PRINT_PROCESSOR

    PRINTER_CHANGE_PRINTER

プリンタへの変更があると通知する。この汎用フラグまたは次の 1 つ以上の専用フラグをセットできる。
PRINTER_CHANGE_ADD_PRINTER PRINTER_CHANGE_SET_PRINTER PRINTER_CHANGE_DELETE_PRINTER PRINTER_CHANGE_FAILED_CONNECTION_PRINTER
PRINTER_CHANGE_PRINTER_DRIVER

    PRINTER_CHANGE_PRINTER_DRIVER

プリンタドライバへの変更があると通知する。この汎用フラグまたは次の 1 つ以上の専用フラグをセットできる。
PRINTER_CHANGE_ADD_PRINTER_DRIVER PRINTER_CHANGE_SET_PRINTER_DRIVER PRINTER_CHANGE_DELETE_PRINTER_DRIVER

    PRINTER_CHANGE_ALL

上記のいずれかの変更があると通知する。

fdwOptions
    予約済み。必ず 0 を指定する。
pPrinterNotifyOptions
    PRINTER_NOTIFY_OPTIONS 構造体へのポインタを指定する。この構造体のメンバ pTypes は、監視する個々のプリンタ情報フィールド

    を指定する 1 つ以上の PRINTER_NOTIFY_OPTIONS_TYPE 構造体の配列へのポインタである。1 つ以上の指定したフィールドに変更

    があると、変更通知が発生する。変更が行われると、FindNextPrinterChangeNotification 関数で新しいプリンタ情報を取得できる。

    fdwFlags に 0 以外の値を指定したときは、このパラメータに NULL を指定できる。

戻り値
    関数が成功すると、指定したプリンタまたはプリントサーバーに関連付けられた変更通知オブジェクトを識別するハンドルが返る。
    関数が失敗すると、INVALID_HANDLE_VALUE が返る。拡張エラー情報を取得するには、GetLastError 関数を使う。

解説
    プリンタまたはプリントサーバーを監視するには、FindFirstPrinterChangeNotification 関数を使って変更通知オブジェクトのハンドルを取得

    した後で待機関数の 1 つを使う。変更通知オブジェクトに対する待機操作は、変更通知オブジェクトがシグナル状態に入ると満たされる。

    fdwFlags または pPrinterNotifyOptions で指定した 1 つ以上の変更が監視対象のプリンタまたはプリントサーバで発生すると、システか

    らオブジェクトにシグナルが送られ、オブジェクトがシグナル状態に入る。
    FindFirstPrinterChangeNotification を呼び出すときは、fdwFlags を 0 以外にするか、pPrinterNotifyOptions を NULL 以外にする必

    要がある。両方を指定すると、両方に関する通知が行われる。
    プリンタ変更通知オブジェクトに対する待機操作が満たされたら、FindNextPrinterChangeNotification 関数を使って通知の原因を調る。

    FindNextPrinterChangeNotification は、fdwFlags で指定された条件に関して、変更があった 1 つ以上の条件を報告する。また、

    pPrinterNotifyOptions で指定されたプリンタ情報フィールドに関して、変更があった 1 つ以上のフィールドと、そのフィールドの新しい情報を

    報告する。FindNextPrinterChangeNotification はさらに変更通知オブジェクトを非シグナル状態にリセットし、そのオブジェクトを他の待機

    操作で使って同じプリンタまたはプリントサーバーの監視を続けられるようにする。
    変更通知オブジェクトがシグナル状態でないときは FindNextPrinterChangeNotification 関数を呼び出さない。待機関数が

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

    イムアウトしないで成功した場合にのみ呼び出す。
    変更通知オブジェクトが不要になったら、FindClosePrinterChangeNotification 関数を使って閉じる。