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


Поддержка драйвера для настраиваемого пользовательского интерфейса

Внимание

Современная платформа печати — это предпочтительный способ взаимодействия с принтерами 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.

AsyncUIBalloon

Ресурсы строки файла ресурсов по умолчанию AsyncUI

IPrinterQueue::SendBidiQuery

Протокол MS-PAN