Comment obtenir des informations sur les imprimantes en .NET?
-
08-07-2019 - |
Question
Dans le PrintDialog standard, une imprimante sélectionnée est associée à quatre valeurs: Statut, Type, Où et Commentaire.
Si je connais le nom d'une imprimante, comment puis-je obtenir ces valeurs en C # 2.0?
La solution
Comme suggéré par , vous pouvez utiliser WMI pour obtenir les propriétés de l'imprimante. Le code suivant affiche toutes les propriétés pour un nom d'imprimante donné. Parmi eux, vous trouverez: PrinterStatus, Comment, Emplacement, Nom du pilote, Nom du port, etc.
using System.Management;
...
string printerName = "YourPrinterName";
string query = string.Format("SELECT * from Win32_Printer WHERE Name LIKE '%{0}'", printerName);
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query))
using (ManagementObjectCollection coll = searcher.Get())
{
try
{
foreach (ManagementObject printer in coll)
{
foreach (PropertyData property in printer.Properties)
{
Console.WriteLine(string.Format("{0}: {1}", property.Name, property.Value));
}
}
}
catch (ManagementException ex)
{
Console.WriteLine(ex.Message);
}
}
Autres conseils
Cela devrait fonctionner.
using System.Drawing.Printing;
...
PrinterSettings ps = new PrinterSettings();
ps.PrinterName = "The printer name"; // Load the appropriate printer's setting
Après cela, les différents les propriétés de PrinterSettings peuvent être lues.
Notez que ps.isValid ()
peut voir si l’imprimante existe réellement.
Modifier: un commentaire supplémentaire. Microsoft vous recommande d’utiliser un PrintDocument et modifier ses paramètres PrinterSettings plutôt que de créer directement un paramètre PrinterSettings.
Consultez PrinterSettings.InstalledPrinters
Veuillez noter que les articles auxquels Dowski et Panos parlaient ( MSDN Win32_Printer ) peut être un peu trompeur.
Je fais référence à la première valeur de la plupart des tableaux. certains commencent par 1 et d'autres par 0. par exemple, " ExtendedPrinterStatus " la première valeur dans la table est 1, votre tableau devrait donc ressembler à ceci:
string[] arrExtendedPrinterStatus = {
"","Other", "Unknown", "Idle", "Printing", "Warming Up",
"Stopped Printing", "Offline", "Paused", "Error", "Busy",
"Not Available", "Waiting", "Processing", "Initialization",
"Power Save", "Pending Deletion", "I/O Active", "Manual Feed"
};
et d’autre part, " ErrorState " La première valeur de la table est 0, votre tableau doit donc ressembler à ceci:
string[] arrErrorState = {
"Unknown", "Other", "No Error", "Low Paper", "No Paper", "Low Toner",
"No Toner", "Door Open", "Jammed", "Offline", "Service Requested",
"Output Bin Full"
};
BTW, " PrinterState " est obsolète, mais vous pouvez utiliser " PrinterStatus ".
Juste pour référence, Voici la liste de toutes les propriétés disponibles pour un objet de gestion Imprimante.
usage: printer.Properties["PropName"].Value
Cela fait longtemps que je ne travaille pas dans un environnement Windows, mais je vous conseillerais de consulter à l'aide de WMI .
Je sais que c'est une vieille publication, mais de nos jours, l'option la plus simple et la plus rapide consiste à utiliser les services d'impression améliorés offerts par l'infrastructure WPF (utilisable par les applications non-WPF).
http://msdn.microsoft .com / fr-us / library / System.Printing (v = vs.110) .aspx
Exemple permettant de récupérer l'état de la file d'attente d'impression et du premier travail.
var queue = new LocalPrintServer().GetPrintQueue("Printer Name");
var queueStatus = queue.QueueStatus;
var jobStatus = queue.GetPrintJobInfoCollection().FirstOrDefault().JobStatus
Au lieu de WMI, vous pouvez obtenir des résultats rapides et précis en sélectionnant WinSpool.drv (API Windows). Vous pouvez obtenir tous les détails sur les interfaces, les structures et les paramètres; constantes de pinvoke.net, ou j’ai rassemblé le code à http://delradiesdev.blogspot.com/2012/02/accessing-printer-status-using-winspool.html