Freigeben über


Gerätewartung

Wichtig

Die moderne Druckplattform ist die bevorzugte Methode von Windows für die Kommunikation mit Druckern. Wir empfehlen die Verwendung des Microsoft IPP-Treibers für die Posteingangsklasse zusammen mit Print Support Apps (PSA), um das Druckverhalten in Windows 10 und 11 für die Entwicklung von Druckergeräten anzupassen.

Weitere Informationen finden Sie unter Moderne Druckplattform und im Designhandbuch für die Drucksupport-App.

Ein Feature zur Gerätewartung wurde in Windows 8.1 und höheren Versionen von Windows eingeführt.

Dieses Feature verwendet bidirektionale Kommunikation (Bidi), damit Sie Gerätewartungsbefehle aus einer UWP-Geräte-App oder einer Druckererweiterung an das Drucksubsystem senden können. Sie könnten beispielsweise Befehle an Ihr Druckgerät senden, um die Tintendüsen zu reinigen.

Der Portmonitor arbeitet mit den vom Anbieter bereitgestellten Bidi-Erweiterungsdateien zusammen, um diese Bidi-Anfragen in geräte- und protokollspezifische Befehle zu übersetzen und sie dann an das Druckgerät zu übertragen. Eine Gerätewartungsaufgabe wird ausgeführt, indem Bidi "Set"-Abfragen an das Druckgerät gesendet werden, und die Bidi-Antwort vom Gerät gibt an, ob der Vorgang erfolgreich war oder fehlgeschlagen ist.

Die neue asynchrone Schnittstelle, mit der dieses Feature implementiert werden kann, übernimmt XML-Daten in Form eines Zeichenfolgenparameters und eines Rückrufobjekts.

Da die Schnittstelle asynchron ist, muss der Aufrufer nicht auf eine Antwort warten. Wenn der Bidi-Vorgang abgeschlossen ist, wird das Rückrufobjekt aufgerufen.

Die neuen Schnittstellen

Die folgenden Schnittstellen wurden in Windows (Code mit dem Namen "Blue") eingeführt, um das Gerätewartungsfeature zu implementieren.

IPrinterBidiSetRequestCallback

IPrinterExtensionAsyncOperation

IPrinterQueue2

Einleiten einer Gerätewartungssitzung

Um eine Gerätewartungssitzung zu initiieren, müssen Sie zuerst die Befehlszeichenfolge als XML-Daten erstellen. Anschließend müssen Sie eine Instanz des Rückrufobjekts erstellen, die aufgerufen wird, nachdem der asynchrone Bidi-Vorgang abgeschlossen wurde.

Nach Abschluss des Vorgangs wird das Rückrufobjekt für die Methode IPrinterBidiSetRequestCallback::Completed aufgerufen und stellt den HRESULT-Wert des Vorgangs bereit. Anschließend können Sie diesen HRESULT-Wert analysieren und alle anderen erforderlichen Aufgaben ausführen.

Der folgende C#-Codeausschnitt beschreibt, wie Sie eine Gerätewartungsaufgabe aus einer UWP-Geräte-App ausstellen.

//
// 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'
        }
    }
} 

Die Gerätewartung wird in UWP-Geräte-Apps unterstützt, nachdem die App über einen der drei Einstiegspunkte aufgerufen wurde.

IPrinterBidiSetRequestCallback

IPrinterExtensionAsyncOperation

IPrinterQueue2