Partilhar via


Suporte de driver para interface do usuário personalizada

Importante

A moderna plataforma de impressão é o meio preferido do Windows para comunicar com as impressoras. Recomendamos que utilize o controlador de classe da caixa de entrada IPP da Microsoft, juntamente com as Aplicações de Suporte de Impressão (PSA), para personalizar a experiência de impressão no Windows 10 e 11 para o desenvolvimento de dispositivos de impressora.

Para obter mais informações, consulte Guia de design do aplicativo de suporte de impressão v1 e v2.

O modelo de driver de impressão v4 foi desenvolvido com suporte integrado para personalização da interface do usuário usando extensões de impressora ou aplicativos de dispositivo UWP para impressão.

Mais considerações de design de personalização da interface do usuário são descritas nas seções a seguir.

Todos os drivers de impressão v4 funcionam com preferências de impressão, no entanto, é importante manter os limites entre as camadas de configuração e interface do usuário para garantir a máxima consistência em todos os cenários. Como pode não haver extensões de impressora ou aplicativos de dispositivo UWP instalados ou eles podem ter sido instalados automaticamente, os drivers de impressão v4 precisam garantir que os drivers de impressão estejam funcionais sem uma experiência personalizada de preferências de impressora. Em particular, isso significa que o suporte a PrintTicket e PrintCapabilities deve ser completo e abrangente na implementação de restrições GPD/PPD + JavaScript no driver.

Alguma validação de restrição na extensão da impressora ou no aplicativo de dispositivo UWP pode ser útil em termos de fornecer uma experiência altamente informativa e interativa, mas não deve substituir a validação do driver, que é considerada autoritativa.

As extensões de impressora e os aplicativos de dispositivo UWP devem usar o método IPrinterQueue::SendBidiQuery em vez de fazer chamadas diretas de rede para um recurso de rede. Se um recurso de rede precisar ser contatado, isso deverá ser feito em outro thread ou de forma assíncrona para evitar que a interface do usuário trave. Os dados devem ser armazenados em cache depois de recuperados para fazer chamadas futuras mais rapidamente.

Notificações da impressora

As notificações da impressora são conduzidas pelo Bidi e pelo arquivo XML DriverEvent. No entanto, para gerir melhor a autonomia da bateria e minimizar as interrupções, as notificações só serão apresentadas quando um utilizador estiver a imprimir.

Embora as preferências de impressão sejam contextuais para o aplicativo que está imprimindo, as notificações da impressora não são. O fluxograma a seguir explica a árvore de decisão que o Windows usa para determinar o comportamento das notificações da impressora. Se disponíveis, os aplicativos de dispositivo UWP têm precedência sobre as extensões de impressora.

fluxograma de comportamento de notificação da impressora.

É importante estar ciente do fato de que, se você tentar usar uma interface do usuário personalizada para mostrar uma notificação no ambiente do Windows 8 chamando GetForegroundWindow, a janela de notificação não será exibida. Isso ocorre porque o sistema operacional tenta atribuir uma prioridade maior ao thread que cria uma janela de primeiro plano usando GetForegroundWindow, e isso não é permitido para caixas de diálogo no ambiente do Windows 8. Se você quiser usar uma interface do usuário personalizada para exibir uma notificação no ambiente do Windows 8, deverá fazê-lo chamando GetDesktopWindow.

Criando eventos de controlador. Os drivers de impressão V4 usam um arquivo XML DriverEvent para descrever consultas Bidi e os gatilhos que devem fazer com que um evento de driver seja gerado. E é importante notar que os eventos de driver suportam apenas strings padrão. Para obter mais informações sobre cadeias de caracteres padrão, consulte AsyncUI Default Resource File String Resources. Na implementação atual, isso fará com que uma mensagem de AsyncUIBalloon seja criada e publicada usando o protocolo MS-PAN. Essa implementação pode mudar no futuro para melhorar o desempenho, por isso é crucial desenvolver seu driver de impressão v4 para que ele não dependa do protocolo subjacente.

O diagrama a seguir mostra a utilização do protocolo.

aplicação do protocolo em eventos de controlador.

Exemplo XML de Evento de Controlador. O trecho de código XML a seguir especifica um evento de driver. O evento verifica se a quantidade de tinta amarela está abaixo de 21% da capacidade total, conforme relatado por Bidi. Se isso ocorrer, uma mensagem AsyncUIBalloon será criada com a cadeia de caracteres referenciada por resourceID 132. Em outras palavras, a mensagem diria que "'%1' é pobre em toner/tinta." onde Resource 2002 ("Amarelo"), seria substituído 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 do Driver. O esquema DriverEvent está disponível no Kit de Driver do Windows como \Include\um\PrinterDriverEvents.xsd.

Validação XML de Evento de Controlador. Contanto que você descreva seu XML DriverEvent corretamente no manifesto do driver, o arquivo XML é validado automaticamente pela ferramenta INFGate.

AsyncUIBalloon

Cadeia de Caracteres do Arquivo de Recursos Padrão AsyncUI

IPrinterQueue::SendBidiQuery

MS-PAN protocolo