设备维护

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

此功能使用双向通信 (双向) ,以便从 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