Suporte de driver para interface do usuário personalizada
Importante
A plataforma de impressão moderna é o meio preferencial do Windows para se comunicar com as impressoras. Recomendamos que você use o driver de classe de caixa de entrada IPP da Microsoft juntamente com PSA (Aplicativos de Suporte à Impressão) 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 Plataformade impressão moderna e o Guia de design do aplicativo de suporte de impressão.
O modelo de driver de impressão v4 foi desenvolvido com suporte integrado para a personalização da interface do usuário, utilizando extensões de impressora ou aplicativos UWP de dispositivos para impressão.
Considerações adicionais de design para a personalização da interface do usuário são descritas nas seções a seguir.
Preferências de impressão
Todos os drivers de impressão v4 funcionam com preferências de impressão, porém, é importante manter os limites entre as camadas de configuração e interface do usuário para garantir máxima consistência em todos os cenários. Como pode não haver extensões de impressora ou aplicativos UWP de dispositivos 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. Particularmente, 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ções na extensão da impressora ou no aplicativo UWP de dispositivo pode ser útil em termos de fornecer uma experiência altamente informativa e interativa, no entanto, isso não deve substituir a validação do driver, que é considerada autoritativa.
As extensões de impressora e os aplicativos UWP de dispositivo devem usar o método IPrinterQueue::SendBidiQuery em vez de fazer chamadas de rede diretas para um recurso de rede. Se for necessário contatar um recurso de rede, isso deverá ser feito em outro thread ou de forma assíncrona para evitar que a interface do usuário seja interrompida. Os dados devem ser armazenados em cache após serem recuperados para tornar as chamadas futuras mais rápidas.
Notificações de impressora
As notificações da impressora são gerenciadas pelo Bidi e pelo arquivo XML DriverEvent. Entretanto, para gerenciar melhor a duração da bateria e minimizar interrupções, as notificações só serão exibidas quando um usuário estiver imprimindo.
Enquanto as preferências de impressão são contextuais ao aplicativo que está imprimindo, as notificações da impressora não são. O fluxograma a seguir explica a árvore de decisões que o Windows usa para determinar o comportamento das notificações de impressora. Se disponíveis, os aplicativos UWP de dispositivo têm precedência sobre as extensões de impressora.
É importante saber que, se você tentar usar uma interface do usuário personalizada para exibir uma notificação no ambiente do Windows 8 chamando GetForegroundWindow, a janela de notificação não será exibida. Isso acontece porque o sistema operacional tenta atribuir uma prioridade mais alta ao thread que cria uma janela em primeiro plano usando GetForegroundWindow, o que não é permitido para caixas de diálogos no ambiente do Windows 8. Se quiser usar uma interface do usuário personalizada para exibir uma notificação no ambiente do Windows 8, será necessário fazer isso chamando GetDesktopWindow.
Criação de eventos de driver. Os drivers de impressão V4 usam um arquivo XML DriverEvent para descrever consultas Bidi e os gatilhos que devem causar o acionamento de um evento de driver. É importante notar que os eventos de driver são compatíveis somente com cadeias de caracteres padrão. Para mais informações sobre cadeias de caracteres padrão, consulte Recursos de cadeia de caracteres de arquivo de recurso padrão AsyncUI. Na implementação atual, isso fará com que uma mensagem AsyncUIBalloon seja criada e publicada usando o protocolo MS-PAN. Essa implementação pode mudar no futuro para melhorar o desempenho, por isso é essencial desenvolver o driver de impressão v4 de maneira que não dependa do protocolo subjacente.
O diagrama a seguir mostra o uso do protocolo.
Exemplo de XML de evento de driver. O snippet de código XML a seguir especifica um evento de driver. O evento verifica se a tinta amarela está abaixo de 21% da capacidade total, conforme reportado pelo Bidi. Se isso acontecer, uma mensagem AsyncUIBalloon será criada com a cadeia de caracteres referenciada por resourceID 132. Ou seja, a mensagem diria que "'%1' está com pouco 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 evento do driver. O esquema DriverEvent está disponível no Windows Driver Kit como \Include\um\PrinterDriverEvents.xsd.
Validação do XML de evento de driver. Contanto que você descreva o XML DriverEvent corretamente no manifesto do driver, o arquivo XML será validado automaticamente pela ferramenta INFGate.
Artigos relacionados
Recursos de cadeia de caracteres de arquivo de recursos padrão AsyncUI