共用方式為


裝置維護

重要

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

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

Windows 8.1和更新版本的 Windows 中引進了裝置維護功能。

此功能使用雙向通訊 (Bidi) 可讓您從 UWP 裝置應用程式或印表機擴充功能將裝置維護命令傳送到列印子系統。 例如,您可以將命令傳送至列印裝置,以清除筆跡 Nozzle。

埠監視器會與廠商提供的 Bidi 延伸模組檔案搭配運作,將這些 Bidi 要求轉譯成裝置和通訊協定特定的命令,然後將這些要求傳輸到列印裝置。 裝置維護工作是藉由將 Bidi「設定」查詢傳送至列印裝置來執行,而來自裝置的 Bidi 回應會指出作業是否成功或失敗。

可協助實作這項功能的新異步介面會採用字串參數形式和回呼物件形式的 XML 數據。

因為介面是異步的,因此呼叫端不需要等候回應。 當 Bidi 作業完成時,會叫用回呼物件。

新的介面

下列介面已在 Windows 中引進(程式代碼命名為 “Blue”),以實作裝置維護功能。

IPrinterBidiSetRequestCallback

IPrinterExtensionAsyncOperation

IPrinterQueue2

起始裝置維護會話

若要起始裝置維護會話,您必須先建立命令字串做為 XML 數據。 然後,您必須建立將在異步 Bidi 作業完成之後叫用的回呼對象的實例。

作業完成之後,會在 IPrinterBidiSetRequestCallback::Completed 方法上叫用回呼物件,並提供作業的 HRESULT 值。 然後,您可以剖析此 HRESULT 值,並執行任何其他必要的工作。

下列 C# 代碼段概述如何從 UWP 裝置應用程式發出裝置維護工作。

//
// Declare a global constant that will be used
// to determine whether method calls were successful
//
const int S_OK = 0;
 
class BidiSendAsyncDemo
{
    //
    // Create a queue object and also
    // create the command string
    //
    void PerformDeviceMaintenance(
        IPrinterQueue2 queue,
        string bidiRequestInXml
        )
    {
        BidiSetResultCallback callBack = new BidiSetResultCallback();

        IPrinterExtensionAsyncOperation asyncOperation =
          queue.SendBidiSetRequestAsync(bidiRequestInXml, callBack);
    }
}

/// <summary>
/// This class represents the callback object
/// </summary>
public class BidiSetResultCallback :
    IPrinterBidiSetRequestCallback
{
    void Completed(
        string bidiResponse,
        int hr
        )
    {
        if (S_OK == hr)
        {
            // parse and interpret 'bidiResponse'
        }
    }
} 

透過三個進入點中的任何一個叫用應用程式之後,UWP 裝置應用程式支援裝置維護。

IPrinterBidiSetRequestCallback

IPrinterExtensionAsyncOperation

IPrinterQueue2