登録して通知を受け取る
リッスンしているクライアントは、RegisterForPrintAsyncNotifications メソッドを呼び出して、通知を受信するために登録します。 リッスンしているクライアントは、アプリケーションである場合と、スプーラー内で実行されている場合があります。 Winspool.drv は、読み込まれた場所に関係なく、この機能を公開します。
Spoolss.lib は、ポート モニターが通知を登録できるように、この機能を公開します。 スプーラー内で実行され、Spoolss.lib にリンクされているコンポーネントは、RegisterForPrintAsyncNotifications を呼び出すことができます。 次の手順では、この関数の呼び出しで渡す必要がある情報について詳しく説明します。 この手順の最初のステップは最初のパラメーターに適用され、2 番目のステップは 2 番目のパラメーターに適用されます。
HRESULT
RegisterForPrintAsyncNotifications(
IN LPCWSTR,
IN PrintAsyncNotificationType*,
IN PrintAsyncNotifyUserFilter,
IN PrintAsyncNotifyConversationStyle,
IN IPrintAsyncNotifyCallback*,
OUT HANDLE*
);
通知に登録するには、次を指定します。
ローカル/リモート プリンターまたはサーバー名。
リスナーが関心を持っている通知の種類。
ユーザー フィルター。クライアントが通知の受信に関心を持っているユーザー、通知送信者と同じユーザー、またはすべてのユーザーを示します。
会話スタイル フィルター。 クライアントは、単方向または双方向の通信を指定できます。
通知がチャネルのもう一方の端から戻ったときに呼び出される IPrintAsyncNotifyCallback インターフェイス。 このパラメーターは NULL にはできません。
この関数が戻ると、6 番目のパラメーター (HANDLE* 型) は登録ハンドルを指します。 登録ハンドルは、クライアントが受け取る不透明な構造です。 登録は、登録呼び出しを行うスレッドのユーザー ID に関連付けられます。 スプーラーは、クライアント セッションのフィルターに加えて、チャネルのセッション フィルターとクライアントの登録セッションに基づいて、リッスンしているクライアントをフィルター処理します。
リッスンしているクライアントが通知を受信しなくなったことをスプーラーに通知するには、クライアントが UnRegisterForPrintAsyncNotifications を呼び出すときにこのハンドルを使用する必要があります。 一方向の通信の場合、サーバー側の保留中の通知はすべて無視されます。 双方向通信の場合、開いている双方向チャネルがあると、これらが閉じられるまで通信が続行されます。
HRESULT
UnRegisterForPrintAsyncNotifications(
IN HANDLE
);