共用方式為


自訂UI的驅動程序支援

重要

新式列印平臺是 Windows 與印表機通訊的慣用方法。 我們建議您使用Microsoft的 IPP 收件匣類別驅動程式,以及列印支援應用程式 (PSA),自定義 Windows 10 和 11 中的列印體驗,以進行印表機裝置開發。

如需詳細資訊,請參閱 新式列印平臺列印支援應用程式設計指南

v4 印表驅動程式模型是使用印表機延伸模組或 UWP 裝置應用程式進行列印的 UI 自定義內建支援所開發。

下列各節將說明更多UI自定義設計考慮。

不過,所有 v4 列印驅動程式都使用列印喜好設定,請務必維護組態和 UI 層之間的界限,以確保所有案例之間的最大一致性。 由於可能未安裝任何印表機延伸模組或 UWP 裝置應用程式,或可能已經自動安裝,所以 v4 印表驅動程式必須確保印表驅動程式在沒有自定義印表機喜好設定體驗的情況下正常運作。 特別是,這表示驅動程式中的 GPD/PPD + JavaScript 條件約束實作中,PrintTicket 和 PrintCapabilities 支持應該完整且完整。

印表機擴充功能或 UWP 裝置應用程式中的一些限制式驗證對於提供高度資訊、互動式體驗很有説明,但不應取代驅動程式的驗證,這被視為權威。

印表機擴充功能和 UWP 裝置應用程式應該使用 IPrinterQueue::SendBidiQuery 方法,而不是對網路資源進行任何直接網路呼叫。 如果必須連絡網路資源,它應該在另一個線程上完成,或以異步方式防止UI停止回應。 在擷取數據之後,應該快取數據,讓未來的呼叫更快。

印表機通知

印表機通知是由 Bidi 和 DriverEvent XML 檔案所驅動。 為了更妥善地管理電池使用時間,並將中斷降到最低,通知只會在使用者列印時顯示。

雖然列印喜好設定與正在列印的應用程式相關,但印表機通知則不會。 下列流程圖說明 Windows 用來判斷印表機通知行為的判定樹。 如果有的話,UWP 裝置應用程式優先於印表機擴充功能。

印表機通知行為流程圖。

請務必注意,如果您嘗試使用自定義UI透過呼叫 GetForegroundWindow 在 Windows 8 環境中顯示通知,則不會顯示通知視窗。 這是因為操作系統會嘗試將較高優先順序指派給使用 GetForegroundWindow 建立前景視窗的線程,因此不允許在 Windows 8 環境中進行對話框。 如果您想要使用自定義UI在 Windows 8 環境中顯示通知,您必須呼叫 GetDesktopWindow 來執行此動作。

建立驅動程式事件。 V4 列印驅動程式會使用 DriverEvent XML 檔案來描述 Bidi 查詢,以及應該引發驅動程式事件的觸發程式。 請務必注意,驅動程式事件只支援標準字串。 如需標準字串的詳細資訊,請參閱 AsyncUI 預設資源檔字串資源。 在目前的實作中,這會導致使用 MS-PAN 通訊協定建立及發佈 AsyncUIBalloon 訊息。 此實作未來可能會變更以改善效能,因此開發 v4 列印驅動程式非常重要,使其不會依賴基礎通訊協定。

下圖顯示通訊協定使用率。

使用驅動程式事件的通訊協定使用率。

驅動程式事件 XML 範例。 下列 XML 代碼段會指定一個驅動程式事件。 事件會檢查黃色筆跡是否小於 Bidi 所報告的總容量的 21%。 如果發生這種情況,就會使用 resourceID 132 所參考的字串來建立 AsyncUIBalloon 訊息。 換句話說,訊息會指出“'%1' 對碳粉/筆跡而言很低。”其中 Resource 2002 (“Yellow”),會取代 %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,INFGate 工具就會自動驗證 XML 檔案。

AsyncUIBalloon

AsyncUI 預設資源檔字串資源

IPrinterQueue::SendBidiQuery

MS-PAN 通訊協定