カスタマイズされた UI のドライバー サポート

重要

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

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

v4 印刷ドライバー モデルは、プリンター拡張機能または印刷用の UWP デバイス アプリを使用した UI カスタマイズの組み込みサポートを使用して開発されました。

UI カスタマイズの設計に関するその他の考慮事項については、次のセクションで説明します。

すべての v4 印刷ドライバーは印刷設定で動作しますが、すべてのシナリオで最大限の一貫性を確保するために、構成レイヤーと UI レイヤーの間の境界をメインすることが重要です。 プリンター拡張機能や UWP デバイス アプリがインストールされていないか、自動的にインストールされている可能性があるため、v4 印刷ドライバーは、カスタマイズされたプリンター設定エクスペリエンスなしで印刷ドライバーが機能していることを確認する必要があります。 特に、これは、ドライバーでの GPD/PPD + JavaScript 制約の実装において、PrintTicket と PrintCapabilities のサポートが完全かつ包括的である必要があることを意味します。

プリンター拡張機能または UWP デバイス アプリの制約の検証は、非常に有益な対話型エクスペリエンスを提供するという点で役立つ場合がありますが、権限があると見なされるドライバーの検証を置き換えるべきではありません。

プリンター拡張機能と UWP デバイス アプリでは、ネットワーク リソースへの 直接ネットワーク呼び出しを行う代わりに、IPrinterQueue::SendBidiQuery メソッドを使用する必要があります。 ネットワーク リソースに接続する必要がある場合は、別のスレッドで行うか、UI がハングしないように非同期的に行う必要があります。 データは、後で呼び出しを高速化するために取得した後にキャッシュする必要があります。

プリンター通知

プリンター通知は、Bidi と DriverEvent XML ファイルによって実行されます。 ただし、バッテリの寿命をより適切に管理し、中断を最小限に抑えるために、通知はユーザーが印刷しているときにのみ表示されます。

印刷設定は印刷中のアプリに応じて設定されますが、プリンターの通知は表示されません。 次のフローチャートでは、Windows がプリンター通知の動作を決定するために使用するデシジョン ツリーについて説明します。 使用可能な場合、UWP デバイス アプリはプリンター拡張機能よりも優先されます。

printer notification behavior flowchart.

カスタム UI を使用して GetForegroundWindow を呼び出して Windows 8 環境で通知を表示しようとすると、通知ウィンドウが表示されないという事実に注意することが重要です。 これは、オペレーティング システムが GetForegroundWindow を使用してフォアグラウンド ウィンドウを作成するスレッドに高い優先度を割り当てようとするためです。これは、Windows 8 環境のダイアログでは許可されません。 カスタム UI を使用して Windows 8 環境に通知を表示する場合は、GetDesktopWindow を呼び出 して表示する必要があります。

ドライバー イベントの作成。 V4 印刷ドライバーは、DriverEvent XML ファイルを使用して、Bidi クエリと、ドライバー イベントが発生する原因となるトリガーを記述します。 また、ドライバー イベントでは標準文字列のみがサポートされることに注意してください。 標準文字列の詳細については、「AsyncUI の既定のリソース ファイル文字列リソース」を参照してください。 現在の実装では、これにより、AsyncUIBalloon メッセージが作成され、MS-PAN プロトコルを使用して発行されます。 この実装は、パフォーマンスを向上させるために将来変更される可能性があるため、基になるプロトコルに依存しないように v4 プリント ドライバーを開発することが重要です。

次の図は、プロトコルの使用率を示しています。

protocol utilization with driver events.

ドライバー イベント XML サンプル。 次の XML コード スニペットは、1 つのドライバー イベントを指定します。 このイベントチェック、Bidi によって報告された黄色のインクの合計容量の 21% 未満になります。 この場合、ResourceID 132 によって参照される文字列を使用して AsyncUIBalloon メッセージが作成されます。 つまり、Resource 2002 ("黄色") が %1 に置き換えられる "'%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 検証。 ドライバー マニフェストで DriverEvent XML を適切に記述する限り、XML ファイルは INFGate ツールによって自動的に検証されます。

AsyncUIBalloon

AsyncUI の既定のリソース ファイル文字列リソース

IPrinterQueue::SendBidiQuery

MS-PAN プロトコル