Share via


RegisterForPrintAsyncNotifications 関数 (prnasnot.h)

プリンター ドライバー、印刷プロセッサ、ポート モニターなど、印刷スプーラーでホストされる印刷コンポーネントからの通知をアプリケーションで登録できるようにします。

構文

HRESULT RegisterForPrintAsyncNotifications(
  [in]  PCWSTR                            pszName,
  [in]  PrintAsyncNotificationType        *pNotificationType,
  [in]  PrintAsyncNotifyUserFilter        eUserFilter,
  [in]  PrintAsyncNotifyConversationStyle eConversationStyle,
  [in]  IPrintAsyncNotifyCallback         *pCallback,
  [out] HANDLE                            *phNotify
);

パラメーター

[in] pszName

プリント サーバーまたは印刷キューの名前へのポインター。

[in] pNotificationType

アプリケーションが受信する必要がある通知の種類のデータ スキーマの GUID へのポインター。

[in] eUserFilter

通知を送信するかどうかを指定する値:

  • 印刷スプーラーホスト型プラグイン送信者と同じユーザーとして実行されているアプリケーションのみ。
  • より広範なリッスン アプリケーションのセット。

[in] eConversationStyle

通信が双方向か一方向かを指定する値。

[in] pCallback

Print Spooler でホストされるコンポーネントがアプリケーションのコールバックに使用するオブジェクトへのポインター。 これは NULL にしないでください。

[out] phNotify

登録を表す構造体へのポインター。

戻り値

HRESULT 重大度 説明
S_OK SUCCESS 関数は正常に終了しました。
ALREADY_REGISTERED ERROR 登録オブジェクトは既に登録されています。
LOCAL_ONLY_REGISTRATION SUCCESS ローカル通知の登録に成功しました。 リモート通知の登録が行われませんでした。
MAX_REGISTRATION_COUNT_EXCEEDED ERROR 登録の最大数に達しました。 これ以上の登録は許可されません。
REMOTE_ONLY_REGISTRATION SUCCESS リモート通知の登録に成功しました。 ローカル通知の登録が行われませんでした。
 

戻り値は COM エラー コードです。 この関数は正常に操作を完了しても、S_OK以外の HRESULT を返す可能性があるため、SUCCEEDED または FAILED マクロを使用して呼び出しの成功を確認する必要があります。 関数によって返された特定の HRESULT を取得するには、HRESULT_CODE マクロを使用します。

次のコード例は、これらのマクロを使用して戻り値を評価する方法を示しています。

if (SUCCEEDED(hr)) {
  // Call succeeded, check HRESULT value returned
  switch (HRESULT_CODE(hr)){
    case S_OK:
      // Some action 
      break;
      case LOCAL_ONLY_REGISTRATION:
      // Some action 
      break;
    case REMOTE_ONLY_REGISTRATION:
      // Some action 
      break;
    default:
      // Default action 
      break;
  }
} else {
  // Call failed, check HRESULT value returned
  switch (HRESULT_CODE(hr)){
    case ALREADY_REGISTERED:
      // Some action 
      break;
    case MAX_REGISTRATION_COUNT_EXCEEDED:
      // Some action 
      break;
    default:
      // Default action 
      break;
  }
}

COM エラー コードの詳細については、「エラー処理」を参照してください。

その他の戻り値については、「 PrintAsyncNotifyError 」を参照してください。

注釈

メモ これはブロック関数または同期関数であり、すぐには返されない場合があります。 この関数が返す速度は、ネットワーク状態、プリント サーバーの構成、プリンター ドライバーの実装などの実行時の要因によって異なります。これは、アプリケーションを記述するときに予測が困難な要因です。 ユーザー インターフェイスとの対話を管理するスレッドからこの関数を呼び出すと、アプリケーションが応答しなくなる可能性があります。
 
一方向チャネルを介して通知を停止するために、リッスン しているアプリケーションは RegisterForPrintAsyncNotifications によって返される pRegistrationHandler 値を UnRegisterForPrintAsyncNotifications に渡します。 双方向チャネルの場合は、 UnRegisterForPrintAsyncNotifications を呼び出して、その呼び出しの後に作成された新しいチャネルの通知をブロックします。 既存の双方向チャネルで通知をブロックするには、リッスンしているアプリケーションが IPrintAsyncNotifyChannel::CloseChannel を使用してチャネルを閉じる必要があります。

RegisterForPrintAsyncNotifications 呼び出しの結果、pCallback オブジェクトに対して IUnknown::AddRef メソッドが呼び出されます。 UnRegisterForPrintAsyncNotifications を呼び出すと、pCallback オブジェクトが解放されます。 チャネルが作成され、チャネルが閉じられたときにデクリメントされると、 pCallback オブジェクトの参照カウントもインクリメントされます。

pSchema パラメーターは、スプーラーが受け入れ、リスナー クライアントをフィルター処理するために使用する GUID ポインターです。 スプーラー非同期通知メカニズムのクライアントは、独自の通知の種類を定義できます。 スプーラーは送信される通知の種類を認識しませんが、通知の種類に基づいてリスナー クライアントをフィルター処理します。 pSchema が参照する通知スキーマは、IPrintAsyncNotifyDataObject を公開する通知オブジェクトによって使用されるスキーマです。 スプーラー通知パイプのクライアントは、独自のデータ スキーマを定義し、任意のデータ型を前後に送信でき、 pSchema によって参照される GUID はそのデータ スキーマに固有です。

要件

要件
サポートされている最小のクライアント Windows Vista [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2008 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー prnasnot.h
Library WinSpool.lib
[DLL] Spoolss.dll

こちらもご覧ください

クライアントの権限借用

印刷スプーラー API 関数

印刷