勇芳软件工作室.汉化:  Printing > Print Spooler API > Asynchronous Printing Notification > Asynchronous Printing Notification Functions >

RegisterForPrintAsyncNotifications

Previous pageReturn to chapter overviewNext page

描述

 

允许应用程序注册打印后台打印程序托管的打印组件(如打印机驱动程序,打印处理器和端口监视器)的通知。

 

C++ 语法

 

HRESULT RegisterForPrintAsyncNotifications(

__in  LPCWSTR pName,

__in  PrintAsyncNotificationType *pSchema,

__in  PrintAsyncNotifyUserFilter filter,

__in  PrintAsyncNotifyConversationStyle directionality,

__in  IPrintAsyncNotifyCallback *pCallback,

__out HANDLE *pRegistrationHandler

);

 

PowerBASIC 语法

 

FUNCTION RegisterForPrintAsyncNotifications ( _

BYVAL pName AS DWORD, _

BYREF pSchema AS GUID, _

BYVAL filter AS DWORD, _

BYVAL directionality AS DWORD, _

BYVAL pCallback AS IPrintAsyncNotifyCallback, _

BYREF pRegistrationHandler AS DWORD _

) AS LONG

 

参数

 

pName

 

[in]指向打印服务器或打印队列名称的指针。

 

pSchema

 

[in]指向应用程序必须接收的通知类型的数据模式GUID的指针。

 

filter

 

[in]指定是否将通知发送到的值:

 

·只有作为与打印假脱机程序托管的插件发件人相同的用户运行的应用程序。
·更广泛的听力应用程序。

 

directionality

 

[in]指定通信是双向的还是单向的值。

 

pCallback

 

[in]指向Print Spooler托管组件将用于回调应用程序的对象的指针。这不应该是NULL。

 

pRegistrationHandler

 

[out]指向表示注册的结构的指针。

 

返回值

 

HRESULT: S_OK

严重: SUCCESS

含义:功能已成功完成。

 

HRESULT: ALREADY_REGISTERED

严重: ERROR

含义:注册对象已被注册。

 

HRESULT: LOCAL_ONLY_REGISTRATION

严重: SUCCESS

含义:本地通知的注册成功。远程通知的注册没有。

 

HRESULT: MAX_REGISTRATION_COUNT_EXCEEDED

严重: ERROR

含义:已达到最大注册数。不允许更多的注册。

 

HRESULT: REMOTE_ONLY_REGISTRATION

严重: SUCCESS

含义:远程通知注册成功。注册本地通知不是。

 

返回值是COM错误代码。因为此函数可能会成功完成操作,而是返回除S_OK之外的HRESULT,则应使用SUCCEEDED或FAILED宏来确定调用的成功。要获取函数返回的具体HRESULT,请使用HRESULT_CODE宏。以下代码示例显示了如何使用这些宏。

 

C++

 

if (SUCCEEDED(hr)){

//call was successful

}

 

if (FAILED(hr)) {

// call failed

}

 

if (FAILED(hr)) {

// call failed

switch (HRESULT_CODE(hr)){

   case CHANNEL_CLOSED_BY_ANOTHER_LISTENER:

     // some action

     break;

   case CHANNEL_CLOSED_BY_SAME_LISTENER:

     // some action

     break;

   default:

     //default action

     break;

}

} else {

//call succeeded

}

 

PowerBASIC

 

IF SUCCEEDED(hr) THEN

  ' // call was successful

END IF

 

IF FAILED(hr) THEN

  ' // call failed

END IF

 

IF FAILED(hr) THEN

  ' // call failed

  SELECT CASE HRESULT_CODE(hr)

     CASE %CHANNEL_CLOSED_BY_ANOTHER_LISTENER

        ' // some action

     CASE %CHANNEL_CLOSED_BY_SAME_LISTENER

        ' // some action

     CASE ELSE

        ' //default action

  END SELECT

ELSE

  ' //call succeeded

END IF

 

有关其他可能的返回值,请参阅PrintAsyncNotifyError.

 

备注

 

要通过单向通道停止通知,监听应用程序将RegisterForPrintAsyncNotifications返回的pRegistrationHandler值传递给UnRegisterForPrintAsyncNotifications.对于双向频道,请调用UnRegisterForPrintAsyncNotifications以阻止在该呼叫之后创建的任何新频道中的通知。要阻止现有双向通道的通知,监听应用程序必须使用IPrintAsyncNotifyChannel.CloseChannel关闭通道。

 

作为RegisterForPrintAsyncNotifications调用的结果,pCallback对象被调用IUnknown.AddRef.调用UnRegisterForPrintAsyncNotifications将释放pCallback对象。当通道创建时,引用计数pCallback对象也将递增,当通道关闭时,它将递减。

 

pSchema是后台处理程序接受并用于过滤侦听器客户端的GUID指针。后台处理程序异步通知机制的任何客户端都可以定义自己的通知类型。即使假脱机程序不知道发送的通知类型,它仍会根据通知类型过滤监听器客户端。pSchema引用的通知模式是公开IPrintAsyncNotifyDataObject的通知对象使用的模式。假脱机程序通知管道的客户端可以定义自己的数据模式,并且可以来回发送任何数据类型,并且pSchema引用的GUID对于该数据模式是唯一的。

 

引用文件 #INCLUDE Once

 

Prnasnot.inc