Поделиться через


Поддержка уведомлений об изменении принтера

Приложения могут запрашивать уведомления о вхождениях событий очереди печати, вызывая функции FindFirstPrinterChangeNotification, FindNextPrinterChangeNotification и FindClosePrinterChangeNotification . Если вы считаете, что модули записи приложений захотят запрашивать уведомления о событиях для очередей печати, поддерживаемых поставщиком частичной печати, необходимо поддерживать уведомление о событиях в поставщике следующим образом:

  • Укажите функцию FindFirstPrinterChangeNotification .

    Диспетчер очереди очереди вызывает эту функцию, чтобы предоставить поставщику печати следующие сведения:

    • Набор флагов, указывающих типы событий принтера, для которых приложение запросило уведомление.

    • Дескриптор очереди печати, для которой запрашиваются уведомления.

    • Список типов сведений, запрошенных приложением для отправки при возникновении события.

      Функция должна возвращать значение флага, указывающее, следует ли опрашивать поставщика, чтобы определить, произошли ли изменения. Неопросимые поставщики отправляют клиенту сигналы при каждом изменении. Поставщик, который должен быть опрашивать, не отправляет сигналы клиенту при внесении изменений. Вместо этого диспетчер очереди сигнализирует клиенту через регулярные промежутки времени, независимо от того, произошли ли изменения.

      На уровне поставщика аргументы этой функции отличаются от аргументов на уровне Win32.

  • Отслеживайте все события очереди печати, указанные приложением при вызове FindFirstPrinterChangeNotification.

    Список типов уведомлений, которые может запрашивать приложение, и список типов сведений, которые можно использовать для описания события, см. в статье Функция Win32 FindFirstPrinterChangeNotification . Типы событий, для которых приложение может запрашивать уведомление, включают добавление или удаление задания печати или формы. Типы сведений, которые приложение может запрашивать, включают параметры задания или формы.

    Поставщики печати, которые не опрашивал, должны вызывать PartialReplyPrinterChangeNotification или ReplyPrinterChangeNotification при изменении, чтобы предоставить очереди очереди информацию, описывающую изменения. Функция ReplyPrinterChangeNotification должна быть вызвана в какой-то момент, так как она приводит к тому, что диспетчер очереди сигнализирует приложению, а функция PartialReplyPrinterChangeNotification — нет. Когда приложение получает сигнал от ReplyPrinterChangeNotification, оно должно вызвать FindNextPrinterChangeNotification. Эта последняя функция предоставляет приложению сведения о событии, которые диспетчер очереди очереди ранее получил от поставщика печати.

    Опрашивированные поставщики печати должны просто отслеживать изменения. Диспетчер очереди сигнализирует приложению через регулярные интервалы. Когда приложение получает сигнал, оно должно вызывать функцию FindNextPrinterChangeNotification очереди очереди. Для опрашиванных поставщиков эта функция вызывает функцию RefreshPrinterChangeNotification поставщика.

  • Укажите функцию RefreshPrinterChangeNotification .

    Эта функция должна возвращать текущее состояние всех параметров отслеживаемой очереди печати для указанной очереди печати. Диспетчер очереди очереди вызывает эту функцию, когда приложение вызывает FindNextPrinterChangeNotification с установленным флагом PRINTER_NOTIFY_OPTIONS_REFRESH.

    Приложения должны устанавливать этот флаг, если предыдущий вызов FindNextPrinterChangeNotification возвращает PRINTER_NOTIFY_INFO структуру с установленным флагом PRINTER_NOTIFY_INFO_DISCARDED. Как опрошенные, так и неоплаченные поставщики должны поддерживать RefreshPrinterChangeNotification.

  • Укажите функцию FindClosePrinterChangeNotification .