设备维护

重要

新式打印平台是 Windows 与打印机通信的首选方式。 建议使用 Microsoft 的 IPP 收件箱类驱动程序以及打印支持应用 (PSA) 来自定义 Windows 10 和 11 中的打印体验,以便进行打印机设备开发。

有关详细信息,请参阅新式打印平台打印支持应用设计指南

Windows 8.1 及更高版本的 Windows 引入了设备维护功能。

此功能使用双向通信 (Bidi),允许从 UWP 设备应用程序或打印机扩展向打印子系统发送设备维护命令。 例如,可以向打印设备发送清洁墨粉喷嘴的命令。

端口监视器会与供应商提供的 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