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


Архитектура пользовательского интерфейса драйвера версии 4

Внимание

Современная платформа печати — это предпочтительный способ взаимодействия с принтерами Windows. Рекомендуется использовать драйвер класса "Входящие" Microsoft IPP вместе с приложениями поддержки печати (PSA), чтобы настроить возможности печати в Windows 10 и 11 для разработки устройств принтера.

Для получения дополнительной информации см. руководство по проектированию приложений поддержки печати .

Высокоуровневая цель проектирования архитектуры драйвера версии 4 — обеспечить встроенную поддержку пользовательского интерфейса приложения Microsoft Store.

Парадигма пользовательского интерфейса на основе приложений, которая используется, является четким примером этого. Приложения устройств UWP предоставляют пользователям полноэкранный интерфейс, поддерживаемый в пользовательском интерфейсе приложения Microsoft Store. Приложения устройств UWP для печати обеспечивают расширяемость для параметров печати и уведомлений о принтерах для принтеров, поддерживающих драйвер печати версии 4. Приложения устройств UWP для печати также предоставляют видимость для устройства печати на новом начальном экране.

Приложения расширения принтера поддерживают параметры печати и уведомления о принтерах, когда пользователи запускают существующие приложения на рабочем столе Windows. Хотя интерфейсы UIs для этих приложений очень отличаются, при этом один предназначен для сенсорного ввода и другой, оптимизированный для пользователей мыши и клавиатуры, бизнес-логика и подключение к драйверам печати версии 4 по-прежнему могут быть похожими независимо от пользовательского интерфейса.

На следующей схеме показана высокоуровневая архитектура приложений устройств Microsoft Store.

обзор пользовательской архитектуры пользовательского интерфейса.

Как показано на приведенной выше схеме, архитектура модели/представления или контроллера позволяет приложениям совместно использовать код на уровне модели, написанном на C#.

Расширение PrinterExtensionLibrary

Проект PrinterExtensionLibrary, который поставляется в различных примерах, можно расширить с помощью новых классов или расширить предоставленный набор классов. Так как корпорация Майкрософт периодически обновляет пример кода, мы рекомендуем партнерам свести к минимуму количество изменений кода, внесенных в предоставленные исходные файлы. Для партнеров, расширяющих предоставленный набор классов, рекомендуется пометить существующие классы как частичные и добавить новые функции или переопределения в отдельный исходный файл.

Совместное использование скомпилированных двоичных файлов между приложениями UWP и классическими приложениями

Проект PrinterExtensionLibrary, который поставляется в примерах расширений устройств и принтеров в Microsoft Store, использует тот же исходный код, но он может быть ценным для сборки кода, чтобы он переносился между проектами, не создавая отдельно для каждого проекта. Чтобы сделать код для проекта PrinterExtensionLibrary переносимым, необходимо преобразовать проект в переносимую библиотеку классов. Выполните следующие действия, чтобы сделать преобразование.

  1. В Microsoft Visual Studio щелкните файл>нового>проекта и найдите "Переносимый" в поле "Установленные шаблоны поиска".

  2. Выберите "Переносимая библиотека классов" Visual C#, а затем укажите имя проекта в текстовом поле "Имя " и нажмите кнопку "ОК".

  3. Скопируйте исходный код из существующего проекта PrinterExtensionLibrary в новый проект.

  4. Щелкните правой кнопкой мыши проект переносимой библиотеки классов и выберите " Выгрузить". Затем откройте CSPROJ-файл и добавьте следующий раздел в файл непосредственно перед последним тегом в документе.

      <ItemGroup>
        <COMReference Include="PrinterExtensionLib">
          <Guid>{91CE54EE-C67C-4B46-A4FF-99416F27A8BF}</Guid>
          <VersionMajor>1</VersionMajor>
          <VersionMinor>0</VersionMinor>
          <Lcid>0</Lcid>
          <WrapperTool>tlbimp</WrapperTool>
          <Isolated>False</Isolated>
          <EmbedInteropTypes>True</EmbedInteropTypes>
        </COMReference>
      </ItemGroup>
    
  5. Если в результате com-ссылок отображаются предупреждения, добавьте следующее в <тег PropertyGroup> :

<ResolveComReferenceSilent>true</ResolveComReferenceSilent>

API для сценариев пользовательского интерфейса печати

API был разработан в рамках модели драйвера печати версии 4 для поддержки расширений принтера и приложений устройств UWP для печати. На высоком уровне сценарий параметров печати использует PrintTicket, PrintCapabilities и новые пакеты свойств для получения и хранения всей информации. Уведомления принтера управляются новой системой событий, основанной на схеме двунаправленной связи (Bidi), и эта новая система использует протокол AsyncUI между клиентом и сервером. Ориентированный на данные характер этого API означает, что одно приложение может легко поддерживать множество устройств.

Расширения принтера необходимо создать таким образом, чтобы они могли корректно ухудшаться, если запрошенные данные недоступны. Например, если определенная функция PrintCapabilities недоступна или если свойство в одном из пакетов свойств недоступно, это не должно препятствовать работе остальной части приложения. При доступе к пакетам свойств или определенным свойствам в контейнере свойств приложение должно использовать синтаксис try-catch, чтобы гарантировать, что все исключения, которые возникают, не приводят к сбою приложения. Дополнительные сведения см. в разделе "Интерфейсы расширения принтера".

Интерфейсы расширения принтера