应用程序可以通过调用后台处理程序的 FindFirstPrinterChangeNotification、 FindNextPrinterChangeNotification 和 FindClosePrinterChangeNotification 函数来请求打印队列事件的出现通知。 如果您认为应用程序编写者希望请求由您的部分打印提供程序支持的打印队列的事件通知,那么您必须在您的提供程序中支持事件通知,具体如下:
提供 FindFirstPrinterChangeNotification 函数。
假脱机程序调用此函数以向打印提供程序提供以下信息:
一组标志,指示应用程序请求通知的打印机事件类型。
要为其请求通知的打印队列的句柄。
应用程序请求在事件发生时提供的信息类型列表。
该函数必须返回一个标志值,该值指示是否应轮询提供程序以确定是否发生了更改。 每当发生更改时,非轮询提供程序就会向客户端发送信号。 必须轮询的提供程序不会在发生更改时向客户端发送信号。 相反,后台处理器会在固定时间间隔向客户端发出信号,无论是否发生了更改。
在提供程序级别,此函数具有不同于 Win32 级别的参数。
跟踪应用程序在调用 FindFirstPrinterChangeNotification 时指定的所有打印队列事件。
有关应用程序可以请求的通知类型的列表,以及可用于描述事件的信息类型的列表,请参阅 Win32 FindFirstPrinterChangeNotification 函数。 应用程序可能请求通知的事件类型包括添加或删除打印作业或表单。 应用程序可能请求的信息类型包括作业或表单参数。
未轮询的打印提供程序必须在发生更改时调用 PartialReplyPrinterChangeNotification 或 ReplyPrinterChangeNotification,以便向后台打印程序提供描述更改的信息。 必须在某个时间点调用 ReplyPrinterChangeNotification 函数,因为它会导致后台处理程序向应用程序发出信号,而 PartialReplyPrinterChangeNotification 函数则不发出信号。 当应用程序从 ReplyPrinterChangeNotification 收到信号时,它应该调用 FindNextPrinterChangeNotification。 后一个函数向应用程序提供以前从打印提供程序收到的后台处理程序的事件信息。
轮询的打印提供程序应只跟踪更改。 后台处理程序定期向应用程序发出信号。 当应用程序收到信号时,它应该调用后台处理程序的 FindNextPrinterChangeNotification 函数。 对于轮询提供程序,此函数调用提供程序的 RefreshPrinterChangeNotification 函数。
提供 RefreshPrinterChangeNotification 函数。
对于指定的打印队列,此函数必须返回所有受监视的打印队列选项的当前状态。 当应用程序使用PRINTER_NOTIFY_OPTIONS_REFRESH标志集调用 FindNextPrinterChangeNotification 时,后台处理程序将调用此函数。
如果对 FindNextPrinterChangeNotification 的上一次调用返回带有PRINTER_NOTIFY_INFO_DISCARDED标志的PRINTER_NOTIFY_INFO结构,则应用程序应设置此标志。 轮询和非轮询提供程序必须支持 RefreshPrinterChangeNotification。
提供 FindClosePrinterChangeNotification 函数。