V4 ドライバー UI アーキテクチャ

重要

プリンターデバイス開発におけるWindows 10および11での印刷体験をカスタマイズするために、MicrosoftのIPPインボックスクラスドライバーとPrint Support Apps (PSA)の使用を推奨します。

詳細については、プリントサポートアプリデザインガイド.

v4 プリンター ドライバー アーキテクチャ概要の設計目標は、Microsoft Store アプリのユーザー インターフェイスに組み込みのサポートを提供することでした。

採用されているアプリケーション ベースの UI パラダイムは、この明確な例です。 UWP デバイス アプリは、Microsoft Store アプリ UI でサポートされている全画面表示エクスペリエンスをユーザーに提供します。 印刷用の UWP デバイス アプリは、印刷設定の拡張性と、v4 印刷ドライバーをサポートするプリンターのプリンター通知を提供します。 印刷用の UWP デバイス アプリでは、新しいスタート画面で印刷デバイスを表示することもできます。

プリンター拡張機能アプリは、ユーザーが Windows デスクトップで既存のアプリケーションを実行するときに、印刷設定とプリンター通知をサポートします。 これらのアプリケーションの UI は非常に異なり、1 つはタッチ用に調整され、もう 1 つはマウスとキーボードのユーザー向けに最適化されていますが、ビジネス ロジックと v4 印刷ドライバーへの接続は、UI に関係なく同様です。

次の図は、GitHub で提供されている v4 印刷ドライバーとプリンター拡張サンプル用の Microsoft Store デバイス アプリのアーキテクチャの概要を示しています。

overview of custom ui architecture.

前の図に示すように、モデル/ビュー/コントローラー ベースのアーキテクチャを使用すると、C# で記述されたモデル レイヤーでアプリでコードを共有できます。

PrinterExtensionLibrary の拡張

さまざまなサンプルに付属する PrinterExtensionLibrary プロジェクトは、新しいクラスを使用するか、指定されたクラスのセットを拡張することによって拡張できます。 Microsoft はサンプル コードを定期的に更新するため、パートナーは提供されたソース ファイルに対して行うコード変更の数を最小限に抑える必要があります。 提供されているクラスのセットを拡張しているパートナーの場合は、既存のクラスを "部分的" としてマークし、新しい関数またはオーバーライドを別のソース ファイルに追加することをお勧めします。

UWP アプリとデスクトップ アプリの間でコンパイル済みバイナリを共有する

Microsoft Store デバイス アプリとプリンター拡張機能のサンプルに付属している PrinterExtensionLibrary プロジェクトは、同じソース コードを利用しますが、プロジェクトごとに個別にビルドしなくてもプロジェクト間で移植できるようにコードをビルドすることが重要な場合があります。 PrinterExtensionLibrary プロジェクトのコードを移植可能にするには、プロジェクトをポータブル クラス ライブラリに変換する必要があります。 変換を行うには、次の手順を実行します。

  1. Microsoft Visual Studio で、[ファイル>新しい>Project] をクリックし、[インストールされているテンプレートの検索] ボックスで 「ポータブル」 を検索します。

  2. [ポータブル クラス ライブラリ Visual C#] を選択し、[名前] テキスト ボックスにプロジェクトの名前を指定して、[OK] をクリックします。

  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>

印刷 UI シナリオ用の API

印刷用のプリンター拡張機能と UWP デバイス アプリをサポートするために、v4 印刷ドライバー モデルの一部として API が開発されました。 大まかに言えば、印刷設定シナリオでは、PrintTicket、PrintCapabilities、新しいプロパティ バッグを使用して、すべての情報を取得して格納します。 プリンター通知は双方向通信 (Bidi) スキーマに基づく新しいイベント システムによって駆動され、この新しいシステムではクライアントとサーバーの間で AsyncUI プロトコルが使用されます。 この API のデータ中心の性質は、1 つのアプリケーションが多くのデバイスを簡単にサポートできることを意味します。

プリンター拡張機能は、要求されたデータが使用できない場合に適切に低下するような方法で構築する必要があります。 たとえば、特定の PrintCapabilities 機能が使用できない場合や、いずれかのプロパティ バッグ内のプロパティが使用できない場合は、アプリの残りの部分が機能しないようにする必要があります。 プロパティ バッグまたはプロパティ バッグ内の特定のプロパティにアクセスする場合、アプリは、スローされた例外によってアプリがクラッシュしないように、try-catch 構文を使用する必要があります。 詳細については、「プリンター拡張インターフェイス」を参照してください。

プリンター拡張インターフェイス

v4 GitHub でのドライバー印刷サンプル