次の方法で共有


デバイス メンテナンス

重要

Windows でプリンターとの通信手段として推奨されるのは、最新の印刷プラットフォームです。 プリンターデバイス開発におけるWindows 10および11での印刷体験をカスタマイズするために、MicrosoftのIPPインボックスクラスドライバーとPrint Support Apps (PSA)の使用を推奨します。

詳細については、最新の印刷プラットフォームに関する記事および「印刷サポート アプリの設計ガイド」を参照してください 。

デバイス メインテナント機能は、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'
        }
    }
} 

デバイス メインテナントは、3 つのエントリ ポイントのいずれかを介してアプリが呼び出された後、UWP デバイス アプリでサポートされます。

IPrinterBidiSetRequestCallback

IPrinterExtensionAsyncOperation

IPrinterQueue2