プリンター変更通知をサポート
アプリケーションは、スプーラーの FindFirstPrinterChangeNotification、FindNextPrinterChangeNotification、FindClosePrinterChangeNotification 関数を呼び出すことによって、印刷キューイベントの発生の通知を要求できます。 アプリケーションの開発者が、部分印刷プロバイダーでサポートされている印刷キューのイベント通知を要求する可能性があると考える場合、提供されるプロバイダーで以下のようにイベント通知をサポートする必要があります:
FindFirstPrinterChangeNotification 関数を提供します。
スプーラーはこの関数を呼び出して、印刷プロバイダーに次の情報を提供します:
アプリケーションが通知を要求したプリンター イベントの種類を示すフラグのセット。
通知が要求されている印刷キューへのハンドル。
イベントが発生したときにアプリケーションが提供を要求した情報の種類の一覧。
この関数は、変更の発生の有無を判断するためにプロバイダーをポーリングするかどうかを示すフラグ値を返す必要があります。 ポーリングされていないプロバイダーは、変更が発生するたびにクライアントにシグナルを送信します。 ポーリングする必要があるプロバイダーは、変更が発生してもクライアントにシグナルを送信しません。 代わりに、スプーラーは、変更が発生したかどうかに関係なく、一定の間隔でクライアントに通知します。
プロバイダー レベルでは、この関数の引数は Win32 レベルとは異なります。
アプリケーションが FindFirstPrinterChangeNotification を呼び出したときに指定したすべての印刷キュー イベントを追跡します。
アプリケーションが要求できる通知の種類の一覧と、イベントの説明に使用できる情報の種類の一覧については、Win32 FindFirstPrinterChangeNotification 関数を参照してください。 アプリケーションが通知を要求する可能性があるイベントの種類には、印刷ジョブまたはフォームの追加または削除が含まれます。 アプリケーションが要求する可能性がある情報の種類には、ジョブまたはフォーム パラメーターが含まれます。
ポーリングされない印刷プロバイダーは、変更が発生したときに PartialReplyPrinterChangeNotification または ReplyPrinterChangeNotification を呼び出して、変更を説明する情報をスプーラーに提供する必要があります。 ReplyPrinterChangeNotification 関数は、スプーラーがアプリケーションに通知するようになるのに対し、PartialReplyPrinterChangeNotification 関数では通知されないため、ある時点で呼び出す必要があります。 アプリケーションが ReplyPrinterChangeNotification からシグナルを受信した場合、FindNextPrinterChangeNotification を呼び出すことが想定されています。 この後者の関数は、スプーラーが印刷プロバイダーから以前に受信したイベント情報をアプリケーションに提供します。
ポーリングされる印刷プロバイダーは、変更を追跡するだけです。 スプーラーは、アプリケーションに一定の間隔で通知します。 アプリケーションはシグナルの受信時に、スプーラーの FindNextPrinterChangeNotification 関数を呼び出すことになっています。 ポーリングされたプロバイダーの場合、この関数はプロバイダーの RefreshPrinterChangeNotification 関数を呼び出します。
RefreshPrinterChangeNotification 関数を提供します。
この関数は、指定された印刷キューについて、監視されているすべての印刷キュー オプションの現在の状態を返す必要があります。 アプリケーションが FindNextPrinterChangeNotification を呼び出し、PRINTER_NOTIFY_OPTIONS_REFRESH フラグを設定すると、スプーラーはこの関数を呼び出します。
アプリケーションは、FindNextPrinterChangeNotification の前回の呼び出しが、PRINTER_NOTIFY_INFO_DISCARDED フラグが設定されたPRINTER_NOTIFY_INFO 構造体を返す場合、このフラグを設定する必要があります。 ポーリング済みプロバイダーと非ポーリング プロバイダーの両方が RefreshPrinterChangeNotification をサポートしている必要があります。
FindClosePrinterChangeNotification 関数を提供します。