Compatibilidad con controladores para la interfaz de usuario personalizada
Importante
La plataforma de impresión moderna es el medio preferido de Windows para comunicarse con impresoras. Se recomienda usar el controlador de clase de bandeja de entrada IPP de Microsoft, junto con 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 Plataforma de impresión moderna y la Guía de diseño de aplicaciones para compatibilidad con impresión.
El modelo de controlador de impresión v4 se desarrolló con compatibilidad integrada con la personalización de la interfaz de usuario mediante extensiones de impresora o aplicaciones de dispositivos para UWP para imprimir.
En las secciones siguientes se describen más consideraciones de diseño de personalización de la interfaz de usuario.
Preferencias de impresión
Sin embargo, todos los controladores de impresión v4 funcionan con preferencias de impresión; sin embargo, es importante mantener los límites entre las capas de configuración y de interfaz de usuario para garantizar la máxima coherencia en todos los escenarios. Puesto que es posible que no haya extensiones de impresora o aplicaciones de dispositivos para UWP instaladas o que se hayan instalado automáticamente, los controladores de impresión v4 deben asegurarse de que los controladores de impresión son funcionales sin una experiencia de preferencias de impresora personalizada. En concreto, esto significa que la compatibilidad con PrintTicket e PrintCapabilities debe ser completa y coherente en la implementación de restricciones GPD/PPD + JavaScript en el controlador.
Alguna validación de restricciones en la extensión de impresora o en la aplicación de dispositivo para UWP podría ser útil para proporcionar una experiencia interactiva y muy informativa, pero no debería sustituir a la validación del controlador, que se considera autorizada.
Las extensiones de impresora y las aplicaciones de dispositivos para UWP deben usar el método IPrinterQueue::SendBidiQuery en lugar de realizar llamadas de red directas a un recurso de red. Si se debe ponerse en contacto con un recurso de red, debe realizarse en otro subproceso o de forma asincrónica para evitar que la interfaz de usuario se bloquee. Los datos se deben almacenar en caché después de recuperarlos para que las llamadas futuras sean más rápidas.
Notificaciones de impresora
Las notificaciones de impresora están controladas por bidi y por el archivo XML DriverEvent. Para administrar mejor la duración de la batería y minimizar las interrupciones, sin embargo, las notificaciones solo se mostrarán cuando un usuario esté imprimiendo.
Mientras que las preferencias de impresión son contextuales a la aplicación que está imprimiendo, las notificaciones de la impresora no lo son. En el siguiente gráfico de flujo se explica el árbol de decisión que Windows usa para determinar el comportamiento de las notificaciones de impresora. Si están disponibles, las aplicaciones de dispositivos para UWP tienen prioridad sobre las extensiones de impresora.
Es importante tener en cuenta que, si intenta usar una interfaz de usuario personalizada para mostrar una notificación en el entorno de Windows 8 llamando a GetForegroundWindow, no se mostrará la ventana de notificación. Esto se debe a que el sistema operativo intenta asignar una prioridad más alta al subproceso que crea una ventana en primer plano mediante GetForegroundWindow y esto no se permite para los cuadros de diálogo en el entorno de Windows 8. Si quiere usar una interfaz de usuario personalizada para mostrar una notificación en el entorno de Windows 8, debe hacerlo llamando a GetDesktopWindow.
Creación de eventos de controlador. Los controladores de impresión V4 usan un archivo XML DriverEvent para describir las consultas bidi y los desencadenadores que deben provocar un evento de controlador. Y es importante tener en cuenta que los eventos de controlador solo admiten cadenas estándar. Para obtener más información sobre las cadenas estándar, consulte Recursos de cadena de archivos de recursos predeterminados de AsyncUI. En la implementación actual, esto hará que se cree y publique un mensaje AsyncUIBalloon mediante el protocolo MS-PAN. Esta implementación puede cambiar en el futuro para mejorar el rendimiento, por lo que es fundamental desarrollar el controlador de impresión v4 de modo que no tome dependencias en el protocolo subyacente.
En el diagrama siguiente se muestra el uso del protocolo.
Ejemplo XML de evento de controlador. El siguiente fragmento de código XML especifica un evento de controlador. El evento comprueba que el nivel de tinta amarilla sea inferior al 21 % de la capacidad total, según lo indicado por bidi. Si esto ocurre, se crea un mensaje AsyncUIBalloon con la cadena a la que hace referencia resourceID 132. En otras palabras, el mensaje indicaría que el nivel de tóner/tinta "'%1' es bajo", donde Recurso 2002 ("Amarillo"), se sustituiría por %1.
<de:DriverEvents xmlns:de="https://schemas.microsoft.com/windows/2011/08/printing/driverevents" schemaVersion="4.0">
<DriverEvent eventId="{A04CF0FC-1CEB-4C62-B967-6F0AE5C5F81E}">
<Transport>USB</Transport>
<Transport>WSD</Transport>
<Query>\Printer.Consumables</Query>
<Trigger result="\Printer.Consumables.Yellow:Level" comparison="LessThan" value="21">
<StandardMessage resourceId="132">
<StringParameter index="1" resourceId="2002" />
</StandardMessage>
</Trigger>
</DriverEvent>
</de:DriverEvents>
Esquema de eventos del controlador. El esquema DriverEvent está disponible en el Kit para controladores de Windows como \Include\mmm\PrinterDriverEvents.xsd.
Validación XML controlada por eventos. Siempre que describa el XML DriverEvent correctamente en el manifiesto del controlador, la herramienta INFGate valida automáticamente el archivo XML.
Artículos relacionados
Recursos de cadena de archivos de recursos predeterminados de AsyncUI