Dela via


Enhetsunderhåll

Viktig

Den moderna utskriftsplattformen är Windows bästa sätt att kommunicera med skrivare. Vi rekommenderar att du använder Microsofts IPP-drivrutin för inkorgsklass tillsammans med Print Support Apps (PSA) för att anpassa utskriftsupplevelsen i Windows 10 och 11 för enhetsutveckling av skrivare.

Mer information finns i designguiden för utskriftssupportapp v1 och v2.

En funktion för enhetsunderhåll har introducerats i Windows 8.1 och senare versioner av Windows.

Den här funktionen använder dubbelriktad kommunikation (Bidi) så att du kan skicka enhetsunderhållskommandon inifrån en UWP-enhetsapp eller ett skrivartillägg till utskriftsundersystemet. Du kan till exempel skicka kommandon till utskriftsenheten för att rensa bläckmunstyckena.

Portövervakaren fungerar tillsammans med bidi-tilläggsfilerna som tillhandahålls av leverantören för att översätta dessa Bidi-begäranden till enhets- och protokollspecifika kommandon och sedan överföra dem till utskriftsenheten. En enhetsunderhållsuppgift utförs genom att skicka Bidi-frågor "Set" till utskriftsenheten, och Bidi-svaret från enheten anger om åtgärden lyckades eller misslyckades.

Det nya asynkrona gränssnittet som hjälper till att implementera den här funktionen tar in XML-data i form av en strängparameter och ett motringningsobjekt.

Eftersom gränssnittet är asynkront behöver anroparen inte vänta på ett svar. När Bidi-åtgärden har slutförts, anropas återkallningsobjektet.

De nya gränssnitten

Följande gränssnitt har introducerats i Windows (med kodnamnet "Blue") för att implementera funktionen för enhetsunderhåll.

IPrinterBidiSetRequestCallback

IPrinterExtensionAsyncOperation

IPrinterQueue2

Initierar en enhetsunderhållssession

Om du vill initiera en enhetsunderhållssession måste du först skapa kommandosträngen som XML-data. Sedan måste du skapa en instans av callback-objektet som anropas efter att den asynkrona Bidi-åtgärden har slutförts.

När åtgärden har slutförts anropas återanropsobjektet på metoden IPrinterBidiSetRequestCallback::Completed, vilket tillhandahåller HRESULT-värdet för resultatet av åtgärden. Du kan sedan parsa det här HRESULT-värdet och utföra andra nödvändiga uppgifter.

Följande C#-kodfragment beskriver hur du utfärdar en enhetsunderhållsaktivitet från en UWP-enhetsapp.

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

Enhetsunderhåll stöds i UWP-enhetsappar när appen anropas via någon av de tre startpunkterna.

IPrinterBidiSetRequestCallback

IPrinterExtensionAsyncOperation

IPrinterQueue2