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


Функция DrvPrinterEvent (winddiui.h)

Функция DrvPrinterEvent в интерфейсе принтера вызывается диспетчером очереди печати печати при обработке событий, относящихся к принтеру, для которых может потребоваться действие драйвера принтера.

Синтаксис

BOOL DrvPrinterEvent(
  [in] LPWSTR pPrinterName,
       int    DriverEvent,
       DWORD  Flags,
       LPARAM lParam
);

Параметры

[in] pPrinterName

Предоставленный вызывающим элементом указатель на строку имени принтера, завершаемую null. Строковый формат может быть \Machine\PrinterName для указания удаленного принтера или PrinterName для указания локального принтера.

DriverEvent

Код события, предоставленный вызывающим, идентифицирует событие. Определяются следующие коды событий:

Код события Определение
PRINTER_EVENT_ADD_CONNECTION Диспетчер очереди очереди только что завершил обработку вызова функции AddPrinterConnection , которая позволяет пользователю клиента подключаться к ранее созданному удаленному принтеру.
PRINTER_EVENT_ATTRIBUTES_CHANGED Биты атрибутов для принтера изменились. В ответ на вызов приложения функции SetPrinter модуль очереди очереди вызывает функцию DrvPrinterEvent драйвера принтера, передав код события в вызове. При использовании этого кода события параметр lParam указывает на структуру PRINTER_EVENT_ATTRIBUTES_INFO , описывающую старый и новый атрибуты.
PRINTER_EVENT_CACHE_DELETE Диспетчер очереди очереди удаляет кэш файлов клиента.
PRINTER_EVENT_CACHE_REFRESH Диспетчер очереди очереди обновляет кэшированные файлы клиента.
PRINTER_EVENT_CONFIGURATION_CHANGE Зарезервировано.
PRINTER_EVENT_CONFIGURATION_UPDATE Конфигурация принтера изменилась. При использовании этого кода события параметр lParam указывает на строку Юникода, содержащую уведомление, отформатированное в соответствии со схемой уведомлений Bidi.
PRINTER_EVENT_DELETE_CONNECTION Диспетчер очереди очереди только что завершил обработку вызова функции DeletePrinterConnection , которая позволяет пользователю клиента удалить подключение к принтеру.
PRINTER_EVENT_DELETE Диспетчер очереди печати только что завершил обработку вызова функции DeletePrinter , которая позволяет администратору удалить экземпляр принтера.
PRINTER_EVENT_INITIALIZE Диспетчер очереди печати только что завершил обработку вызова функции AddPrinter , которая позволяет администратору сделать принтер доступным на сервере, или функции SetPrinter , которая позволяет администратору изменять состояние принтера. В подключении отрисовки на стороне клиента клиентский компьютер только что добавил принтер GUID. Событие PRINTER_EVENT_INITIALIZE задает значение параметра lParam NULL для вызовов DrvPrinterEvent в Windows Vista и более ранних выпусках. Для Windows 7 и более поздних версий параметр lParam является дескриптором маркера пользователя. Драйверы печати могут использовать возвращенный дескриптор маркера для запроса данных пользователя или олицетворения пользователя.

Flags

Битовый флаг, предоставленный вызывающим абонентом, определяется следующим образом:

Значение Определение
PRINTER_EVENT_FLAG_NO_UI Если этот параметр задан, функция не должна отображать пользовательский интерфейс. Во время установки процессора печати, монитора печати или драйвера принтера пользовательский интерфейс разрешен только с помощью директивы VendorSetup . Дополнительные сведения см. в разделах Записи INF-файла принтера и Настраиваемые операции настройки принтера .

Внимание!

Директива VendorSetup является устаревшей и не должна использоваться новыми драйверами версии 3 или 4, которые вы разрабатываете. Эти сведения о VendorSetup предоставляются только для справки или для обслуживания существующих драйверов версии 3, которые уже используют эту директиву INF.

lParam

Не используется, если параметр DriverEvent не имеет значение PRINTER_EVENT_ATTRIBUTES_CHANGED. В этом случае lParam содержит адрес структуры PRINTER_EVENT_ATTRIBUTES_INFO. (См. предыдущее описание параметра DriverEvent .) Для всех остальных значений параметра DriverEvent параметр lParam имеет значение NULL.

Возвращаемое значение

Если операция выполнена успешно, функция должна возвращать значение TRUE; В противном случае он должен возвращать значение FALSE. Однако в настоящее время единственным случаем проверки возвращаемого значения функции является вызов DrvPrinterEvent во время обработки функции AddPrinter , при этом DriverEvent имеет значение PRINTER_EVENT_INITIALIZE. Если в этом случае DrvPrinterEvent возвращает значение FALSE , модуль очереди печати не создает принтер и вместо этого вызывает сбой AddPrinter .

Комментарии

Все библиотеки DLL интерфейса принтера должны предоставлять функцию DrvPrinterEvent , а функция должна поддерживать код события PRINTER_EVENT_INITIALIZE. Поддержка всех других кодов событий необязательна.

Параметры реестра, сохраненные при обработке события PRINTER_EVENT_INITIALIZE, должны храниться в разделе HKEY_LOCAL_MACHINE путем вызова SetPrinterData. Для кодов событий PRINTER_EVENT_INITIALIZE и PRINTER_EVENT_DELETE очередь очереди проверяет, имеет ли вызывающий объект права администратора, и вызывает DrvPrinterEvent при олицетворении вызывающего объекта.

В отличие от этого, если вам нужно сохранить параметры в реестре при обработке события PRINTER_EVENT_ADD_CONNECTION, библиотека DLL интерфейса принтера должна записать их в раздел HKEY_CURRENT_USER, чтобы они хранились для каждого пользователя. Затем, если пользователь с перемещаемым профилем входит в другую систему, подключение следует за пользователем. Функция DrvPrinterEvent вызывается только тогда, когда пользователь сначала устанавливает подключение, а не когда пользователь впоследствии входит в другие системы с помощью перемещаемого профиля.

Для кодов событий PRINTER_EVENT_ADD_CONNECTION и PRINTER_EVENT_DELETE_CONNECTION контекст выполнения функции DrvPrinterEvent является вызывающим приложением (обычно это папка печати), и функция может отображать пользовательский интерфейс. Для всех остальных кодов событий контекстом выполнения является очередь печати печати, и пользовательский интерфейс не отображается.

Примером драйвера, который может отображать пользовательский интерфейс при подключении, является драйвер FAX, который может предложить пользователю ввести имя и номер телефона пользователя (отправитель FAX) и сохранить данные до удаления подключения.

Примером типа файла, который может храниться в кэше клиента, является большой файл метрик шрифтов, содержащий слишком много сведений для записи в реестр. Если код события функции DrvPrinterEvent PRINTER_EVENT_CACHE_REFRESH, библиотека DLL интерфейса принтера может перезагрузить файл с сервера, чтобы обеспечить актуальность кэша.

Требования

Требование Значение
Целевая платформа Персональный компьютер
Верхняя часть winddiui.h (включая Winddiui.h)