Comment effectuer la maintenance d’une imprimante dans une application UWP pour périphérique
Dans Windows 8.1, les applications de périphériques UWP peuvent effectuer la maintenance de l’imprimante, comme l’alignement des têtes d’impression et le nettoyage des buses. Ce sujet se base sur la version C# de l’exemple de gestion des travaux d’impression et de maintenance de l’imprimante pour démontrer comment la communication bidirectionnelle (Bidi) peut être utilisée pour effectuer une telle maintenance du périphérique. Pour en savoir plus sur les applications d’appareils UWP en général, veuillez consulter la rubrique Découverte des applications d’appareils UWP.
La version C# de l’exemple Gestion des travaux d’impression et maintenance de l’imprimante démontre la maintenance de l’imprimante avec le fichier DeviceMaintenance.xaml.cs dans le projet DeviceAppForPrinters2. Pour travailler avec Bidi, l’exemple utilise la bibliothèque d’extension d’imprimante dans le projet PrinterExtensionLibrary. La bibliothèque d’extension d’imprimante offre un moyen pratique d’accéder aux interfaces d’extension d’imprimante du pilote d’impression v4. Pour plus d’informations, veuillez consulter l’aperçu de la bibliothèque d’extension d’imprimante.
Remarque
Les exemples de code présentés dans ce sujet sont basés sur la version C# de l’exemple Gestion des travaux d’impression et maintenance de l’imprimante. Cet exemple est également disponible en JavaScript et C++. Notez que comme C++ peut accéder directement à COM, la version C++ de l’exemple n’inclut pas de projets de bibliothèque de code. Téléchargez les exemples pour voir les dernières versions du code.
Maintenance d’une imprimante
Windows 8.1 introduit de nouvelles interfaces d’extension d’imprimante dans le pilote d’impression v4 que vous pouvez utiliser pour implémenter la maintenance du périphérique : IPrinterBidiSetRequestCallback, IPrinterExtensionAsyncOperation et IPrinterQueue2. Ces interfaces permettent d’envoyer de manière asynchrone des requêtes Bidi au moniteur de port afin qu’elles soient traduites en commandes spécifiques au périphérique et au protocole, puis envoyées à l’imprimante. Pour plus d’informations, veuillez consulter la section Maintenance de l’appareil (pilote d’impression v4).
Conseil
Les applications C# et JavaScript ne peuvent pas travailler directement avec les API COM. Si vous écrivez une application UWP pour périphérique en C# ou JavaScript, utilisez la bibliothèque d’extension d’imprimante pour accéder à ces interfaces (comme indiqué dans ce sujet).
Prérequis
Avant de commencer :
Assurez-vous que votre imprimante est installée avec un pilote d’impression v4. Pour plus d’informations, veuillez consulter la section Développement de pilotes d’impression v4.
Préparez votre PC de développement. Veuillez consulter la section Bien démarrer pour obtenir des informations sur le téléchargement des outils et la création d’un compte développeur.
Associez votre application au magasin. Consultez la section Créer une application UWP pour périphérique pour obtenir des informations à ce sujet.
Créez des métadonnées de périphérique pour votre imprimante qui l’associent à votre application. Veuillez consulter la section Créer des métadonnées de périphérique pour plus d’informations à ce sujet.
Construisez l’interface utilisateur pour la page principale de votre application. Toutes les applications UWP pour périphériques peuvent être lancées à partir de Start, où elles seront affichées en plein écran. Utilisez l’expérience Start pour mettre en valeur votre produit ou services d’une manière qui correspond à la marque spécifique et aux caractéristiques de vos appareils. Il n’y a pas de restrictions spéciales sur le type de contrôles UI qu’elle peut utiliser. Pour bien démarrer avec la conception de l’expérience plein écran, consultez les principes de conception de Microsoft Store.
Si vous écrivez votre application en C# ou JavaScript, ajoutez le projet PrinterExtensionLibrary à la solution de votre application UWP pour périphérique. Vous pouvez trouver ce projet dans l’exemple Gestion des travaux d’impression et maintenance de l’imprimante.
Remarque
Comme C++ peut accéder directement à COM, les applications C++ n’ont pas besoin d’une bibliothèque séparée pour travailler avec le contexte de périphérique d’imprimante basé sur COM.
Étape 1 : Préparer la requête Bidi
Les interfaces de maintenance de l’appareil nécessitent que vos requêtes Bidi soient des données XML sous forme de chaîne de caractères. Vous pouvez construire vos requêtes Bidi là où cela a du sens dans votre application. Par exemple, vous pouvez sauvegarder les requêtes Bidi comme constantes de chaînes ou les créer dynamiquement en fonction des entrées des utilisateurs. L’exemple Gestion des travaux d’impression et maintenance de l’imprimante construit une requête par défaut dans la méthode OnNavigatedTo
. Pour plus d’informations sur Bidi, veuillez consulter la rubrique Communications bidirectionnelles.
Cet exemple provient de la méthode OnNavigatedTo
du fichier DeviceMaintenance.xaml.cs.
string defaultBidiQuery =
"<bidi:Set xmlns:bidi=\"http://schemas.microsoft.com/windows/2005/03/printing/bidi\">\r\n" +
" <Query schema='\\Printer.Maintenance:CleanHead'>\r\n" +
" <BIDI_BOOL>false</BIDI_BOOL>\r\n" +
" </Query>\r\n" +
"</bidi:Set>";
Étape 2 : Trouver l’imprimante
Avant que votre application puisse envoyer des commandes à l’imprimante, elle doit d’abord localiser l’imprimante. Pour ce faire, l’exemple Gestion des travaux d’impression et maintenance de l’imprimante inclut une classe nommée PrinterEnumeration
(dans le fichier PrinterEnumeration.cs). Cette classe trouve toutes les imprimantes qui sont associées à votre application via des métadonnées de périphérique et retourne une liste d’objets PrinterInfo
, qui contient les noms et les ID de périphérique pour chaque imprimante.
Cet exemple provient de la méthode EnumeratePrinters_Click
du fichier DeviceMaintenance.xaml.cs. Il montre comment l’exemple utilise la classe PrinterEnumeration
pour obtenir une liste des imprimantes associées.
private async void EnumeratePrinters_Click(object sender, RoutedEventArgs e)
{
try
{
rootPage.NotifyUser("Enumerating printers. Please wait", NotifyType.StatusMessage);
// Retrieve the running app's package family name, and enumerate associated printers.
string currentPackageFamilyName = Windows.ApplicationModel.Package.Current.Id.FamilyName;
// Enumerate associated printers.
PrinterEnumeration pe = new PrinterEnumeration(currentPackageFamilyName);
List<PrinterInfo> associatedPrinters = await pe.EnumeratePrintersAsync();
// Update the data binding source on the combo box that displays the list of printers.
PrinterComboBox.ItemsSource = associatedPrinters;
if (associatedPrinters.Count > 0)
{
PrinterComboBox.SelectedIndex = 0;
rootPage.NotifyUser(associatedPrinters.Count + " printers enumerated", NotifyType.StatusMessage);
}
else
{
rootPage.NotifyUser(DisplayStrings.NoPrintersEnumerated, NotifyType.ErrorMessage);
}
}
catch (Exception exception)
{
rootPage.NotifyUser("Caught an exception: " + exception.Message, NotifyType.ErrorMessage);
}
}
Conseil
Pour plus d’informations sur les classes PrinterEnumeration
et PrinterInfo
, voir le fichier PrinterEnumeration.cs.
Étape 3 : Envoyer la requête Bidi
Pour envoyer la requête Bidi, les interfaces de maintenance de l’appareil nécessitent une chaîne Bidi et un callback. Dans la méthode SendBidiRequest_Click
, l’exemple utilise d’abord un objet PrinterInfo
pour créer un objet de contexte d’extension d’imprimante nommé context
. Ensuite, un objet PrinterBidiSetRequestCallback
est créé et un gestionnaire d’événements est ajouté pour gérer l’événement OnBidiResponseReceived
du callback. Finalement, la méthode SendBidiSetRequestAsync
du contexte d’extension d’imprimante est utilisée pour envoyer la chaîne Bidi et le callback.
Cet exemple provient de la méthode SendBidiRequest_Click
du fichier DeviceMaintenance.xaml.cs.
private void SendBidiRequest_Click(object sender, RoutedEventArgs e)
{
try
{
PrinterInfo queue = (PrinterInfo)PrinterComboBox.SelectedItem;
// Retrieve a COM IPrinterExtensionContext object, using the static WinRT factory.
// Then instantiate one "PrinterExtensionContext" object that allows operations on the COM object.
Object comContext = Windows.Devices.Printers.Extensions.PrintExtensionContext.FromDeviceId(queue.DeviceId);
PrinterExtensionContext context = new PrinterExtensionContext(comContext);
// Create an instance of the callback object, and perform an asynchronous 'bidi set' operation.
PrinterBidiSetRequestCallback callback = new PrinterBidiSetRequestCallback();
// Add an event handler to the callback object's OnBidiResponseReceived event.
// The event handler will be invoked once the Bidi response is received.
callback.OnBidiResponseReceived += OnBidiResponseReceived;
// Send the Bidi "Set" query asynchronously.
IPrinterExtensionAsyncOperation operationContext
= context.Queue.SendBidiSetRequestAsync(BidiQueryInput.Text, callback);
// Note: The 'operationContext' object can be used to cancel the operation if required.
}
catch (Exception exception)
{
rootPage.NotifyUser("Caught an exception: " + exception.Message, NotifyType.ErrorMessage);
}
}
Étape 4 : Recevoir la réponse Bidi
Lorsque l’opération Bidi « set » est complétée, l’objet de callback, de type PrinterBidiSetRequestCallback
, est invoqué. Ce callback prend en charge la gestion des erreurs à partir de la réponse HRESULT, puis déclenche l’événement OnBidiResponseReceived
, envoyant la réponse Bidi à travers les paramètres de l’événement.
Cet exemple montre la définition de la classe PrinterBidiSetRequestCallback
dans le fichier DeviceMaintenance.xaml.cs.
internal class PrinterBidiSetRequestCallback : IPrinterBidiSetRequestCallback
{
/// <summary>
/// This method is invoked when the asynchronous Bidi "Set" operation is completed.
/// </summary>
public void Completed(string response, int statusHResult)
{
string result;
if (statusHResult == (int)HRESULT.S_OK)
{
result = "The response is \r\n" + response;
}
else
{
result = "The HRESULT received is: 0x" + statusHResult.ToString("X") + "\r\n" +
"No Bidi response was received";
}
// Invoke the event handlers when the Bidi response is received.
OnBidiResponseReceived(null, result);
}
/// <summary>
/// This event will be invoked when the Bidi 'set' response is received.
/// </summary>
public event EventHandler<string> OnBidiResponseReceived;
}
La réponse Bidi est ensuite envoyée à la méthode OnBidiResponseReceived
, où le Dispatcher
est utilisé pour afficher les résultats sur le fil de l’interface utilisateur.
Cet exemple provient de la méthode OnBidiResponseReceived
du fichier DeviceMaintenance.xaml.cs.
internal async void OnBidiResponseReceived(object sender, string bidiResponse)
{
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
BidiResponseOutput.Text = bidiResponse;
});
}
Test
Avant de pouvoir tester votre application UWP pour périphérique, elle doit être liée à votre imprimante à l’aide de métadonnées de périphérique.
Vous avez besoin d’une copie du package de métadonnées de périphérique pour votre imprimante, pour y ajouter les informations de l’application de périphérique. Si vous n’avez pas de métadonnées de périphérique, vous pouvez les construire en utilisant l’Assistant de création de métadonnées de périphérique comme décrit dans le sujet Créer des métadonnées de périphérique pour votre application UWP pour périphérique.
Remarque
Pour utiliser l’Assistant de création de métadonnées de périphérique, vous devez installer Microsoft Visual Studio Professional, Microsoft Visual Studio Ultimate, ou le SDK autonome pour Windows 8.1, avant de compléter la procédure de cette rubrique. L’installation de Microsoft Visual Studio Express pour Windows installe une version du SDK qui n’inclut pas l’assistant.
Les étapes suivantes construisent votre application et installent les métadonnées de périphérique.
Activez la signature de test.
Lancez l’Assistant de création de métadonnées de périphérique depuis %ProgramFiles(x86)%\Windows Kits\8.1\bin\x86, en double-cliquant sur DeviceMetadataWizard.exe
Depuis le menu Outils, sélectionnez Activer la signature de test.
Redémarrez l’ordinateur
Construisez la solution en ouvrant le fichier de solution (.sln). Appuyez sur F7 ou allez dans Construire->Construire la solution depuis le menu supérieur après que l’exemple ait été chargé.
Déconnectez et désinstallez l’imprimante. Cette étape est nécessaire pour que Windows lise les métadonnées de périphérique mises à jour la prochaine fois que le périphérique est détecté.
Éditez et sauvegardez les métadonnées de périphérique. Pour lier l’application de périphérique à votre périphérique, vous devez associer l’application de périphérique à votre périphérique. Remarque : Si vous n’avez pas encore créé vos métadonnées de périphérique, consultez Créer des métadonnées de périphérique pour votre application UWP pour périphérique.
Si l’Assistant de création de métadonnées de périphérique n’est pas encore ouvert, lancez-le depuis %ProgramFiles(x86)%\Windows Kits\8.1\bin\x86, en double-cliquant sur DeviceMetadataWizard.exe.
Cliquez sur Éditer les métadonnées de périphérique. Cela vous permettra d’éditer votre package de métadonnées de périphérique existant.
Dans la boîte de dialogue Ouvrir, localisez le package de métadonnées de périphérique associé à votre application UWP pour périphérique. (Il a une extension de fichier devicemetadata-ms).
Sur la page Spécifier les informations de l’application UWP pour périphérique, saisissez les informations de l’application Microsoft Store dans la boîte Application UWP pour périphérique. Cliquez sur Importer le fichier manifeste de l’application UWP pour entrer automatiquement le Nom du package, le Nom de l’éditeur, et l’ID de l’application UWP.
Si votre application s’inscrit pour des notifications d’imprimante, remplissez la boîte Gestionnaires de notifications. Dans ID de l’événement, saisissez le nom du gestionnaire d’événements d’impression. Dans Actif de l’événement, saisissez le nom du fichier où ce code réside.
Lorsque vous avez terminé, cliquez sur Suivant jusqu’à ce que vous arriviez à la page Terminer.
Sur la page Revoir le package de métadonnées de périphérique, assurez-vous que tous les paramètres sont corrects et sélectionnez la case à cocher Copier le package de métadonnées de périphérique dans le magasin de métadonnées sur l’ordinateur local. Ensuite, cliquez sur Enregistrer.
Reconnectez votre imprimante pour que Windows lise les métadonnées de périphérique mises à jour lorsque le périphérique est connecté.
Rubriques connexes
Maintenance de périphérique (pilote d’imprimante v4)
Développement de pilotes d’impression v4
Communications bidirectionnelles
Bien démarrer avec les applications UWP
Créer une application UWP pour périphérique (guide pas à pas)