Supporto dei driver per l'interfaccia utente personalizzata
Importante
La piattaforma di stampa moderna è il mezzo preferito di Windows per comunicare con le stampanti. Ti consigliamo di usare il driver di classe IPP di Microsoft, insieme a Print Support Apps (PSA), per personalizzare l'esperienza di stampa in Windows 10 e 11 per lo sviluppo di dispositivi per stampanti.
Per altre informazioni, vedere Piattaforma di stampa moderna e guida alla progettazione dell'app di supporto per la stampa.
Il modello di driver di stampa v4 è stato sviluppato con il supporto predefinito per la personalizzazione dell'interfaccia utente usando estensioni della stampante o app per dispositivi UWP per la stampa.
Altre considerazioni sulla progettazione della personalizzazione dell'interfaccia utente sono descritte nelle sezioni seguenti.
Preferenze di stampa
Tutti i driver di stampa v4 funzionano con le preferenze di stampa, tuttavia, è importante mantenere i limiti tra i livelli di configurazione e interfaccia utente per garantire la massima coerenza in tutti gli scenari. Poiché potrebbero non esserci estensioni della stampante o app per dispositivi UWP installate o che potrebbero essere state installate automaticamente, i driver di stampa v4 devono garantire che i driver di stampa siano funzionali senza un'esperienza personalizzata delle preferenze della stampante. In particolare, ciò significa che il supporto PrintTicket e PrintCapabilities deve essere completo e completo nell'implementazione dei vincoli GPD/PPD + JavaScript nel driver.
La convalida dei vincoli nell'estensione della stampante o nell'app per dispositivi UWP può essere utile in termini di offrire un'esperienza interattiva altamente informativa, ma non deve sostituire la convalida del driver, considerata autorevole.
Le estensioni della stampante e le app per dispositivi UWP devono usare il metodo IPrinterQueue::SendBidiQuery invece di effettuare chiamate di rete dirette a una risorsa di rete. Se è necessario contattare una risorsa di rete, deve essere eseguita su un altro thread o in modo asincrono per evitare che l'interfaccia utente sia bloccata. I dati devono essere memorizzati nella cache dopo essere stati recuperati per velocizzare le chiamate future.
Notifiche stampanti
Le notifiche della stampante sono guidate da Bidi e dal file XML DriverEvent. Per gestire meglio la durata della batteria e ridurre al minimo le interruzioni, tuttavia, le notifiche verranno visualizzate solo quando un utente sta stampando.
Mentre le preferenze di stampa sono contestuali all'app che sta stampando, le notifiche della stampante non sono. Il grafico di flusso seguente illustra l'albero delle decisioni usato da Windows per determinare il comportamento delle notifiche della stampante. Se disponibile, le app per dispositivi UWP hanno la precedenza sulle estensioni della stampante.
È importante tenere presente che, se si tenta di usare un'interfaccia utente personalizzata per visualizzare una notifica nell'ambiente Windows 8 chiamando GetForegroundWindow, la finestra di notifica non verrà visualizzata. Questo perché il sistema operativo tenta di assegnare una priorità più alta al thread che crea una finestra in primo piano usando GetForegroundWindow e questo non è consentito per le finestre di dialogo nell'ambiente Windows 8. Se vuoi usare un'interfaccia utente personalizzata per visualizzare una notifica nell'ambiente Windows 8, devi farlo chiamando GetDesktopWindow.
Creazione di eventi driver. I driver di stampa V4 usano un file XML DriverEvent per descrivere le query Bidi e i trigger che devono causare la generazione di un evento driver. È importante notare che gli eventi driver supportano solo stringhe standard. Per altre informazioni sulle stringhe standard, vedere Risorse stringa di file di risorse predefinite di AsyncUI. Nell'implementazione corrente, verrà creato e pubblicato un messaggio AsyncUIBalloon usando il protocollo MS-PAN. Questa implementazione potrebbe cambiare in futuro per migliorare le prestazioni, quindi è fondamentale sviluppare il driver di stampa v4 in modo che non assuma dipendenze dal protocollo sottostante.
Il diagramma seguente illustra l'utilizzo del protocollo.
Esempio XML dell'evento driver. Il frammento di codice XML seguente specifica un evento driver. L'evento verifica che l'inchiostro giallo sia inferiore al 21% della capacità totale segnalata da Bidi. In questo caso, viene creato un messaggio AsyncUIBalloon con la stringa a cui fa riferimento resourceID 132. In altre parole, il messaggio indica che "'%1' è basso su toner/input penna". Dove Resource 2002 ("Giallo"), verrebbe sostituito con %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>
Schema eventi driver. Lo schema DriverEvent è disponibile in Windows Driver Kit come \Include\um\PrinterDriverEvents.xsd.
Convalida XML dell'evento driver. Se si descrive correttamente il file XML DriverEvent nel manifesto del driver, il file XML viene convalidato automaticamente dallo strumento INFGate.