Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Important
Les métadonnées de l’appareil sont déconseillées et seront supprimées dans une version ultérieure de Windows. Pour plus d’informations sur le remplacement de cette fonctionnalité, consultez Métadonnées du conteneur de package de pilotes.
Dans Windows 8.1, les applications d’appareil UWP peuvent effectuer une maintenance de l’imprimante, comme l’alignement des têtes d’impression et des buses de nettoyage. Cet article utilise la version C# de l’exemple de gestion des travaux d’impression et de maintenance d’imprimante pour montrer comment la communication bidirectionnelle (Bidi) peut être utilisée pour effectuer cette maintenance des appareils. Pour en savoir plus sur les applications d’appareil UWP en général, consultez Meet UWP device apps.
La version C# de l’exemple de gestion des travaux d’impression et de maintenance d’imprimante illustre la maintenance de l’imprimante avec le fichier DeviceMaintenance.xaml.cs dans le projet DeviceAppForPrinters2 . To work with Bidi, the sample uses the printer extension library in the PrinterExtensionLibrary project. La bibliothèque d’extensions d’imprimante offre un moyen pratique d’accéder aux interfaces d’extension d’imprimante du pilote d’impression v4. Pour plus d’informations, consultez la vue d’ensemble de la bibliothèque d’extensions d’imprimante.
Note
Les exemples de code présentés dans cet article sont basés sur la version C# de l’exemple de gestion des travaux d’impression et de maintenance de l’imprimante . Cet exemple est également disponible en JavaScript et en C++. Étant donné que 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 afficher les dernières versions du code.
Printer maintenance
Windows 8.1 introduces new printer extension interfaces in the v4 printer driver that you can use for implementing device maintenance: IPrinterBidiSetRequestCallback, IPrinterExtensionAsyncOperation , and IPrinterQueue2. Ces interfaces permettent d’envoyer de manière asynchrone des demandes Bidi au moniteur de port afin qu’elles puissent être traduites en commandes spécifiques au périphérique et au protocole, puis envoyées à l’imprimante. Pour plus d’informations, consultez Maintenance des appareils (pilote d’imprimante v4).
Tip
Les applications C# et JavaScript ne peuvent pas utiliser directement les API COM. Si vous écrivez une application d’appareil UWP C# ou JavaScript, utilisez la bibliothèque d’extensions d’imprimante pour accéder à ces interfaces (comme illustré dans cet article).
Prerequisites
Avant de commencer :
Vérifiez que votre imprimante est installée à l’aide d’un pilote d’impression v4. Pour plus d’informations, consultez Développement de pilotes d’impression v4.
Configurez votre PC de développement. See Getting started for info about downloading the tools and creating a developer account.
Associez votre application au Windows Store. Pour plus d’informations sur cela, consultez Créer une application d’appareil UWP .
Créez des métadonnées d’appareil pour votre imprimante qui l’associe à votre application. Pour plus d’informations, consultez Créer des métadonnées d’appareil.
Générez l’interface utilisateur pour la page principale de votre application. Toutes les applications d’appareil UWP peuvent être lancées à partir de l’écran de démarrage, où elles s’affichent en plein écran. Utilisez l’expérience de démarrage pour mettre en évidence vos produits ou services d’une manière qui correspond à la personnalisation et aux fonctionnalités spécifiques de vos appareils. Il n’existe aucune restriction spéciale sur le type de contrôles d’interface utilisateur qu’il peut utiliser. Pour commencer à concevoir l’expérience en plein écran, consultez les principes de conception du Microsoft Store.
If you're writing your app with C# or JavaScript, add the PrinterExtensionLibrary project to your UWP device app solution. Vous trouverez ce projet dans l’exemple de gestion des travaux d’impression et de maintenance des imprimantes .
Note
Étant donné que C++ peut accéder directement à COM, les applications C++ ne nécessitent pas de bibliothèque distincte pour fonctionner avec le contexte d’appareil d’imprimante COM.
Étape 1 : Préparer la demande Bidi
Les interfaces de maintenance des appareils nécessitent que vos demandes Bidi soient des données XML sous la forme d’une chaîne. Vous pouvez construire vos demandes Bidi où qu’elles soient logiques dans votre application. Par exemple, vous pouvez enregistrer les requêtes Bidi sous forme de constantes de chaîne ou les créer dynamiquement en fonction de l’entrée utilisateur. L’exemple de gestion des travaux d’impression et de maintenance de l’imprimante se produit pour construire une requête par défaut dans OnNavigatedTo la méthode. For more info about Bidi, see Bidirectional Communications.
This example is from the OnNavigatedTo method of the DeviceMaintenance.xaml.cs file.
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 : Rechercher l’imprimante
Avant que votre application puisse envoyer des commandes à l’imprimante, elle doit d’abord localiser l’imprimante. Pour ce faire, l’exemple de gestion des travaux d’impression et de maintenance d’imprimante inclut une classe nommée PrinterEnumeration (dans le fichier PrinterEnumeration.cs ). Cette classe recherche toutes les imprimantes associées à votre application via des métadonnées d’appareil et retourne une liste d’objets PrinterInfo , qui contient les noms et les ID d’appareil pour chaque imprimante.
This example is from the EnumeratePrinters_Click method of the DeviceMaintenance.xaml.cs file. Il montre comment l’exemple utilise la PrinterEnumeration classe pour obtenir la 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);
}
}
Tip
For more info about the PrinterEnumeration and PrinterInfo classes, see the PrinterEnumeration.cs file.
Étape 3 : Envoyer une demande Bidi
Pour envoyer la demande Bidi, les interfaces de maintenance des appareils nécessitent une chaîne Bidi et un rappel. Dans la méthode, l’exemple SendBidiRequest_Click utilise d’abord un PrinterInfo objet pour créer un objet de contexte d’extension d’imprimante nommé context. Ensuite, un PrinterBidiSetRequestCallback objet est créé et un gestionnaire d’événements est ajouté pour gérer l’événement du OnBidiResponseReceived rappel. Enfin, la méthode du contexte d’extension SendBidiSetRequestAsync d’imprimante est utilisée pour envoyer la chaîne Bidi et le rappel.
This example is from the SendBidiRequest_Click method of the DeviceMaintenance.xaml.cs file.
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);
// 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 terminée, l’objet de rappel, de type PrinterBidiSetRequestCallback, est appelé. Ce rappel s’occupe de la gestion des erreurs à partir de la réponse HRESULT, puis déclenche l’événement OnBidiResponseReceived , en envoyant la réponse Bidi via les paramètres d’événement.
This example shows the PrinterBidiSetRequestCallback class definition in the DeviceMaintenance.xaml.cs file.
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 OnBidiResponseReceived méthode, où elle Dispatcher est utilisée pour afficher les résultats sur le thread d’interface utilisateur.
This example is from the OnBidiResponseReceived method of the DeviceMaintenance.xaml.cs file.
internal async void OnBidiResponseReceived(object sender, string bidiResponse)
{
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
BidiResponseOutput.Text = bidiResponse;
});
}
Testing
Avant de pouvoir tester votre application d’appareil UWP, elle doit être liée à votre imprimante à l’aide de métadonnées d’appareil.
Vous avez besoin d’une copie du package de métadonnées d’appareil pour votre imprimante pour y ajouter les informations de l’application d’appareil. Si vous n’avez pas de métadonnées d’appareil, vous pouvez le générer à l’aide de l’Assistant Création de métadonnées d’appareil, comme décrit dans l’article Créer des métadonnées d’appareil pour votre application d’appareil UWP.
Note
Pour utiliser l’Assistant Création de métadonnées d’appareil, vous devez installer Microsoft Visual Studio Professional, Microsoft Visual Studio Ultimate ou le KIT de développement logiciel (SDK) autonome pour Windows 8.1, avant de suivre les étapes décrites dans cet article. L’installation de Microsoft Visual Studio Express pour Windows installe une version du Kit de développement logiciel (SDK) qui n’inclut pas l’Assistant.
Les étapes suivantes créent votre application et installent les métadonnées de l’appareil.
Activez la signature de test.
Démarrez l’Assistant Création de métadonnées d’appareil à partir de %ProgramFiles(x86)%\Windows Kits\8.1\bin\x86, en double-cliquant sur DeviceMetadataWizard.exe
From the Tools menu, select Enable Test Signing.
Redémarrer l’ordinateur
Générez la solution en ouvrant le fichier de solution (.sln). Appuyez sur F7 ou accédez à Build-Build> Solution à partir du menu supérieur une fois l’exemple chargé.
Déconnectez et désinstallez l’imprimante. Cette étape est requise pour que Windows lise les métadonnées de l’appareil mises à jour la prochaine fois que l’appareil est détecté.
Modifiez et enregistrez les métadonnées de l’appareil. Pour lier l’application d’appareil à votre appareil, vous devez associer l’application d’appareil à votre appareil. Si les métadonnées de votre appareil ne sont pas encore créées, consultez Créer des métadonnées d’appareil pour votre application d’appareil UWP.
Si l’Assistant Création de métadonnées d’appareil n’est pas encore ouvert, démarrez-le à partir de%ProgramFiles(x86)%\Windows Kits\8.1\bin\x86, en double-cliquant sur DeviceMetadataWizard.exe.
Sélectionnez Modifier les métadonnées de l’appareil. Cette option vous permet de modifier votre package de métadonnées d’appareil existant.
In the Open dialog box, locate the device metadata package associated with your UWP device app. (It has a devicemetadata-ms file extension.)
Dans la page Spécifier les informations de l’application d’appareil UWP , entrez les informations d’application du Microsoft Store dans la zone d’application d’appareil UWP . Sélectionnez Importer le fichier manifeste de l’application UWP pour entrer automatiquement le nom du package, le nom du serveur de publication et l’ID d’application UWP.
If your app is registering for printer notifications, fill out the Notification handlers box. In Event ID, enter the name of the print event handler. In Event Asset, enter the name of the file where that code resides.
When you're done, select Next until you get to the Finish page.
Dans la page Vérifier le package de métadonnées de l’appareil , vérifiez que tous les paramètres sont corrects et activez la case à cocher Copier le package de métadonnées de l’appareil dans le magasin de métadonnées sur l’ordinateur local . Then select Save.
Reconnectez votre imprimante afin que Windows lit les métadonnées d’appareil mises à jour lorsque l’appareil est connecté.