共用方式為


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

列印後台處理程式裝載元件將用來回呼應用程式之物件的指標。 這絕對不應該是 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您應該使用 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
程式庫 WinSpool.lib
Dll Spoolss.dll

另請參閱

用戶端模擬

列印多工緩衝處理器 API 函式

列印