支持打印机更改通知

应用程序可以通过调用后台处理程序的 FindFirstPrinterChangeNotification、FindNextPrinterChangeNotificationFindClosePrinterChangeNotification 函数来请求打印队列事件的出现通知。 如果认为应用程序编写者希望请求部分打印提供程序支持的打印队列的事件通知,则必须在提供程序中支持事件通知,如下所示:

  • 提供 FindFirstPrinterChangeNotification 函数。

    后台处理程序调用此函数,为打印提供程序提供以下信息:

    • 一组标志,指示应用程序为其请求通知的打印机事件类型。

    • 正在为其请求通知的打印队列的句柄。

    • 发生事件时应用程序请求提供的信息类型的列表。

      函数必须返回一个标志值,该值指示是否应轮询提供程序以确定是否已发生更改。 每当发生更改时,未轮询的提供程序会向客户端发送信号。 发生更改时,必须轮询的提供程序不会向客户端发送信号。 后台处理程序会定期向客户端发出信号,无论是否发生了更改。

      在提供程序级别,此函数具有不同于 Win32 级别的参数。

  • 跟踪应用程序在调用 FindFirstPrinterChangeNotification 时指定的所有打印队列事件。

    有关应用程序可以请求的通知类型的列表,以及可用于描述事件的信息类型列表,请参阅 Win32 FindFirstPrinterChangeNotification 函数。 应用程序可能请求通知的事件类型包括添加或删除打印作业或表单。 应用程序可能请求的信息类型包括作业或表单参数。

    未轮询的打印提供程序必须在发生更改时调用 PartialReplyPrinterChangeNotificationReplyPrinterChangeNotification ,以便为后台处理程序提供描述更改的信息。 必须在某个时间调用 ReplyPrinterChangeNotification 函数,因为它会导致后台处理程序向应用程序发出信号,而 PartialReplyPrinterChangeNotification 函数则不会。 当应用程序收到来自 ReplyPrinterChangeNotification 的信号时,它应该调用 FindNextPrinterChangeNotification。 后一个函数为应用程序提供后台处理程序以前从打印提供程序收到的事件信息。

    轮询的打印提供程序应仅跟踪更改。 后台处理程序定期向应用程序发出信号。 当应用程序收到信号时,它应调用后台处理程序的 FindNextPrinterChangeNotification 函数。 对于轮询的提供程序,此函数调用提供程序的 RefreshPrinterChangeNotification 函数。

  • 提供 RefreshPrinterChangeNotification 函数。

    对于指定的打印队列,此函数必须返回所有受监视打印队列选项的当前状态。 当应用程序调用设置了 PRINTER_NOTIFY_OPTIONS_REFRESH 标志的 FindNextPrinterChangeNotification 时,后台处理程序会调用此函数。

    如果以前调用 FindNextPrinterChangeNotification 返回PRINTER_NOTIFY_INFO结构并设置了PRINTER_NOTIFY_INFO_DISCARDED标志,则应用程序应设置此标志。 轮询和非极化提供程序都必须支持 RefreshPrinterChangeNotification

  • 提供 FindClosePrinterChangeNotification 函数。