Partager via


Prise en charge des pilotes pour l’interface utilisateur personnalisée

Important

La plateforme d’impression moderne est le moyen privilégié de Windows pour communiquer avec les imprimantes. Nous vous recommandons d’utiliser le pilote de classe IPP en boîte de Microsoft, ainsi que les applications de support d’impression (PSA), pour personnaliser l’expérience d’impression dans Windows 10 et 11 pour le développement de périphériques d’impression.

Pour plus d’informations, veuillez consulter la section Plateforme d’impression moderne et le Guide de conception des applications de support d’impression.

Le modèle de pilote d’impression v4 a été développé avec un support intégré pour la personnalisation de l’interface utilisateur à l’aide d’extensions d’imprimante ou d’applications UWP pour les périphériques d’impression.

D’autres considérations de conception pour la personnalisation de l’interface utilisateur sont décrites dans les sections suivantes.

Tous les pilotes d’impression v4 fonctionnent avec des préférences d’impression, mais il est important de maintenir les limites entre les couches de configuration et d’interface utilisateur afin de garantir une cohérence maximale dans tous les scénarios. Comme il se peut qu’aucune extension d’imprimante ou application UWP ne soit installée, ou qu’elles aient été installées automatiquement, les pilotes d’impression v4 doivent s’assurer que les pilotes d’impression sont fonctionnels sans une expérience personnalisée des préférences d’imprimante. En particulier, cela signifie que la prise en charge de PrintTicket et de PrintCapabilities doit être complète et exhaustive dans l’implémentation des contraintes GPD/PPD + JavaScript dans le pilote.

Une certaine validation des contraintes dans l’extension d’imprimante ou l’application UWP pourrait être utile pour offrir une expérience interactive hautement informative, mais cela ne doit pas remplacer la validation du pilote, qui est considérée comme faisant autorité.

Les extensions d’imprimante et les applications UWP doivent utiliser la méthode IPrinterQueue::SendBidiQuery au lieu d’effectuer des appels réseau directs à une ressource réseau. Si une ressource réseau doit être contactée, cela doit être fait sur un autre thread ou de manière asynchrone afin d’éviter que l’interface utilisateur ne se bloque. Les données doivent être mises en cache après leur récupération pour accélérer les appels futurs.

Notifications d’imprimante

Les notifications d’imprimante sont déclenchées par Bidi et par le fichier XML DriverEvent. Cependant, afin de mieux gérer la durée de vie de la batterie et de minimiser les interruptions, les notifications ne s’afficheront que lorsqu’un utilisateur imprime.

Bien que les préférences d’impression soient contextuelles à l’application qui imprime, les notifications d’imprimante ne le sont pas. Le diagramme de flux suivant explique l’arborescence décisionnelle que Windows utilise pour déterminer le comportement des notifications d’imprimante. Si disponibles, les applications UWP prennent le pas sur les extensions d’imprimante.

diagramme de flux du comportement des notifications d’imprimante.

Il est important de noter que, si vous essayez d’utiliser une interface utilisateur personnalisée pour afficher une notification dans l’environnement Windows 8 en appelant GetForegroundWindow, la fenêtre de notification ne s’affichera pas. Cela s’explique par le fait que le système d’exploitation tente d’attribuer une priorité plus élevée au thread qui crée une fenêtre au premier plan à l’aide de GetForegroundWindow, et cela n’est pas autorisé pour les boîtes de dialogue dans l’environnement Windows 8. Si vous souhaitez utiliser une interface utilisateur personnalisée pour afficher une notification dans l’environnement Windows 8, vous devez le faire en appelant GetDesktopWindow.

Création d’événements de pilote. Les pilotes d’impression v4 utilisent un fichier XML DriverEvent pour décrire les requêtes Bidi et les déclencheurs qui doivent provoquer un événement de pilote. Il est important de noter que les événements de pilote ne prennent en charge que les chaînes standard. Pour plus d’informations sur les chaînes standard, veuillez consulter la section Ressources de chaîne du fichier de ressources par défaut AsyncUI. Dans l’implémentation actuelle, cela entraînera la création et la publication d’un message AsyncUIBalloon à l’aide du protocole MS-PAN. Cette implémentation pourrait changer à l’avenir pour améliorer les performances, il est donc crucial de développer votre pilote d’impression v4 de manière à ne pas dépendre du protocole sous-jacent.

Le diagramme suivant montre l’utilisation du protocole.

utilisation du protocole avec les événements de pilote.

Exemple XML d’événement de pilote. L’extrait de code XML suivant spécifie un événement de pilote. L’événement vérifie si l’encre jaune est inférieure à 21 % de la capacité totale, comme indiqué par Bidi. Si cela se produit, un message AsyncUIBalloon est créé avec la chaîne référencée par resourceID 132. En d’autres termes, le message indiquerait que « ’%1’ est à court de toner/encre. » où la ressource 2002 (« Jaune ») serait substituée à %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>

Schéma d’événement de pilote. Le schéma DriverEvent est disponible dans le Windows Driver Kit sous \Include\um\PrinterDriverEvents.xsd.

Validation du fichier XML d’événement de pilote. Tant que vous décrivez correctement votre fichier XML DriverEvent dans le manifeste du pilote, le fichier XML est automatiquement validé par l’outil INFGate.

AsyncUIBalloon

Ressources de chaîne du fichier de ressources par défaut AsyncUI

IPrinterQueue::SendBidiQuery

protocole MS-PAN