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 成功 函数已成功完成。
ALREADY_REGISTERED ERROR 已注册对象。
LOCAL_ONLY_REGISTRATION 成功 注册本地通知已成功。 未注册远程通知。
MAX_REGISTRATION_COUNT_EXCEEDED ERROR 已达到最大注册数。 不允许进行更多的注册。
REMOTE_ONLY_REGISTRATION 成功 远程通知注册成功。 未注册本地通知。
 

返回值为 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 函数

打印