裝置維護

重要

建議您使用 Microsoft 的 IPP 收件匣類別驅動程式以及 PRINT Support Apps () ,自定義印表機裝置開發 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