Поддержка драйвера для настраиваемого пользовательского интерфейса
Внимание
Современная платформа печати — это предпочтительный способ взаимодействия с принтерами Windows. Рекомендуется использовать драйвер класса "Входящие" Microsoft IPP вместе с приложениями поддержки печати (PSA), чтобы настроить возможности печати в Windows 10 и 11 для разработки устройств принтера.
Дополнительные сведения см. в статье "Современная платформа печати" и руководство по проектированию приложений поддержки печати.
Модель драйвера печати версии 4 была разработана со встроенной поддержкой настройки пользовательского интерфейса с помощью расширений принтера или приложений устройств UWP для печати.
Дополнительные рекомендации по настройке пользовательского интерфейса описаны в следующих разделах.
Параметры печати
Однако все драйверы печати версии 4 работают с параметрами печати, важно поддерживать границы между уровнями конфигурации и пользовательского интерфейса, чтобы обеспечить максимальную согласованность во всех сценариях. Так как не может быть никаких расширений принтера или приложений устройств UWP, или они могут быть установлены автоматически, драйверы печати версии 4 должны убедиться, что драйверы печати работают без настройки принтера. В частности, это означает, что поддержка PrintTicket и PrintCapabilities должна быть завершена и комплексна в реализации ограничений GPD/PPD + JavaScript в драйвере.
Некоторые проверки ограничений в расширении принтера или приложении устройства UWP могут оказаться полезными с точки зрения предоставления высокоинформативного интерактивного интерфейса, но он не должен заменить проверку драйвера, которая считается авторитетной.
Расширения принтера и приложения устройств UWP должны использовать метод IPrinterQueue::SendBidiQuery вместо того, чтобы выполнять прямые сетевые вызовы к сетевому ресурсу. Если сетевой ресурс необходимо связаться, его следует сделать в другом потоке или асинхронно, чтобы предотвратить зависание пользовательского интерфейса. Данные следует кэшировать после получения, чтобы сделать будущие вызовы быстрее.
Уведомления о принтерах
Уведомления принтера управляются Биди и XML-файлом DriverEvent. Чтобы лучше управлять жизненным циклом батареи и свести к минимуму прерывания, уведомления будут отображаться только при печати пользователя.
Хотя параметры печати контекстно относятся к приложению, которое печатается, уведомления принтера не являются. На следующей блок-диаграмме объясняется дерево принятия решений, которое Windows использует для определения поведения уведомлений принтера. При наличии приложения устройств UWP имеют приоритет над расширениями принтера.
Важно учитывать тот факт, что если вы пытаетесь использовать пользовательский интерфейс для отображения уведомления в среде Windows 8 путем вызова GetForegroundWindow, окно уведомлений не будет отображаться. Это связано с тем, что операционная система пытается назначить более высокий приоритет потоку, который создает окно переднего плана с помощью GetForegroundWindow, и это не допускается для диалоговых окон в среде Windows 8. Если вы хотите использовать пользовательский интерфейс для отображения уведомления в среде Windows 8, необходимо сделать это, вызвав GetDesktopWindow.
Создание событий драйвера. Драйверы печати версии 4 используют XML-файл DriverEvent для описания запросов Bidi и триггеров, которые должны вызывать событие драйвера. Важно отметить, что события драйвера поддерживают только стандартные строки. Дополнительные сведения о стандартных строках см. в статье AsyncUI Default Resource File String Resources Resources. В текущей реализации это приведет к созданию и публикации сообщения AsyncUIBalloon с помощью протокола MS-PAN. Эта реализация может измениться в будущем, чтобы повысить производительность, поэтому важно разработать драйвер печати версии 4, чтобы он не принимает зависимости от базового протокола.
На следующей схеме показано использование протокола.
Пример XML события драйвера. В следующем фрагменте кода XML указывается одно событие драйвера. Событие проверяет наличие желтого рукописного ввода менее 21% от общей емкости, как сообщает Биди. В этом случае создается сообщение AsyncUIBalloon со строкой, на которую ссылается resourceID 132. Другими словами, в сообщении будет указано, что "%1" низко на тонере или рукописном вводе", где ресурс 2002 ("желтый"), будет заменен на %1.
<de:DriverEvents xmlns:de="https://schemas.microsoft.com/windows/2011/08/printing/driverevents" schemaVersion="4.0">
<DriverEvent eventId="{A04CF0FC-1CEB-4C62-B967-6F0AE5C5F81E}">
<Transport>USB</Transport>
<Transport>WSD</Transport>
<Query>\Printer.Consumables</Query>
<Trigger result="\Printer.Consumables.Yellow:Level" comparison="LessThan" value="21">
<StandardMessage resourceId="132">
<StringParameter index="1" resourceId="2002" />
</StandardMessage>
</Trigger>
</DriverEvent>
</de:DriverEvents>
Схема событий драйвера. Схема DriverEvent доступна в комплекте драйверов Windows как \Include\um\PrinterDriverEvents.xsd.
Проверка XML-кода события драйвера. Если вы правильно описываете XML DriverEvent в манифесте драйвера, XML-файл автоматически проверяется средством INFGate.