Mantenimiento del dispositivo

Importante

Se recomienda usar el controlador de clase de bandeja de entrada IPP de Microsoft, junto con las aplicaciones de soporte técnico de impresión (PSA), para personalizar la experiencia de impresión en Windows 10 y 11 para el desarrollo de dispositivos de impresora.

Para obtener más información, consulte la guía de diseño de aplicaciones de soporte técnico de impresión.

Se ha introducido una característica de mantenimiento de dispositivos en Windows 8.1 y versiones posteriores de Windows.

Esta característica usa la comunicación bidireccional (Bidi) para que puedas enviar comandos de mantenimiento de dispositivos desde una aplicación de dispositivo UWP o una extensión de impresora al subsistema de impresión. Por ejemplo, puede enviar comandos al dispositivo de impresión para limpiar las boquillas de entrada de lápiz.

El monitor de puerto funciona junto con los archivos de extensión Bidi proporcionados por el proveedor para traducir estas solicitudes de Bidi en comandos específicos del dispositivo y protocolo y, a continuación, transmitirlas al dispositivo de impresión. Una tarea de mantenimiento de dispositivos se realiza mediante el envío de consultas "Set" de Bidi al dispositivo de impresión y la respuesta Bidi del dispositivo indica si la operación se realizó correctamente o no.

La nueva interfaz asincrónica que ayuda a implementar esta característica toma datos XML en forma de parámetro de cadena y un objeto de devolución de llamada.

Dado que la interfaz es asincrónica, el autor de la llamada no tiene que esperar una respuesta. Cuando se completa la operación Bidi, se invoca el objeto de devolución de llamada.

Las nuevas interfaces

Las siguientes interfaces se han introducido en Windows (denominada "Azul") para implementar la característica de mantenimiento de dispositivos.

IPrinterBidiSetRequestCallback

IPrinterExtensionAsyncOperation

IPrinterQueue2

Iniciar una sesión de mantenimiento de dispositivos

Para iniciar una sesión de mantenimiento de dispositivos, primero debe crear la cadena de comandos como datos XML. A continuación, debe crear una instancia del objeto de devolución de llamada que se invocará una vez completada la operación bidi asincrónica.

Una vez completada la operación, se invoca el objeto de devolución de llamada en el método IPrinterBidiSetRequestCallback::Completed y que proporciona el valor HRESULT de la operación. Después, puede analizar este valor HRESULT y realizar cualquier otra tarea necesaria.

En el siguiente fragmento de código de C# se describe cómo emitir una tarea de mantenimiento de dispositivos desde una aplicación de dispositivo para 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'
        }
    }
} 

El mantenimiento de dispositivos se admite en aplicaciones de dispositivos para UWP después de invocar la aplicación a través de cualquiera de los tres puntos de entrada.

IPrinterBidiSetRequestCallback

IPrinterExtensionAsyncOperation

IPrinterQueue2