设备维护

重要

建议使用 Microsoft 的 IPP 收件箱类驱动程序以及打印支持应用 (PSA) ,自定义 Windows 10 和 11 中的打印体验,以便进行打印机设备开发。

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

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

此功能使用双向通信 (Bidi) ,使你能够将设备维护命令从 UWP 设备应用或打印机扩展发送到打印子系统。 例如,可以向打印设备发送命令以清洁墨迹喷头。

端口监视器与供应商提供的 Bidi 扩展文件结合使用,将这些 Bidi 请求转换为特定于设备和协议的命令,然后将其传输到打印设备。 通过向打印设备发送 Bidi“Set”查询来执行设备维护任务,来自设备的 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