Dans le PrintDialog standard, quatre valeurs sont associées à une imprimante sélectionnée: État, Type, Où et Commentaire.
Si je connais le nom d'une imprimante, comment puis-je obtenir ces valeurs en C # 2.0?
Comme suggéré par dowski , vous pouvez utiliser WMI pour obtenir les propriétés de l'imprimante. Le code suivant affiche toutes les propriétés d'un nom d'imprimante donné. Parmi eux, vous trouverez: PrinterStatus, Comment, Location, DriverName, PortName, 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);
}
}
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 divers propriétés de PrinterSettings peuvent être lus.
Notez que ps.isValid()
peut voir si l'imprimante existe réellement.
Edit: Un commentaire supplémentaire. Microsoft vous recommande d'utiliser un PrintDocument et de modifier ses PrinterSettings plutôt que de créer un PrinterSettings directement.
Regardez PrinterSettings.InstalledPrinters
Veuillez noter que l'article qui dowski et Panos renvoyait à ( 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 certains commencent par 0. par exemple, " ExtendedPrinterStatus" la première valeur du tableau est 1, par conséquent, votre tableau doit 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 dans la table est 0, par conséquent, votre tableau devrait 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, ici est une liste de toutes les propriétés disponibles pour un ManagementObject d'imprimante.
usage: printer.Properties["PropName"].Value
Cela fait longtemps que je n'ai pas travaillé dans un environnement Windows, mais je vous suggère de regarder en utilisant WMI .
Je sais que c'est une ancienne publication, mais de nos jours, l'option plus facile/plus rapide consiste à utiliser les services d'impression améliorés offerts par le cadre WPF (utilisables par les applications non-WPF).
http://msdn.Microsoft.com/en-us/library/System.Printing (v = vs.110) .aspx
Un exemple pour récupérer l'état de la file d'attente de l'imprimante et du premier travail.
var queue = new LocalPrintServer().GetPrintQueue("Printer Name");
var queueStatus = queue.QueueStatus;
var jobStatus = queue.GetPrintJobInfoCollection().FirstOrDefault().JobStatus
Comme alternative à WMI, vous pouvez obtenir des résultats rapides et précis en appuyant sur WinSpool.drv (c'est-à-dire l'API Windows) - vous pouvez obtenir tous les détails sur les interfaces, les structures et les constantes de pinvoke.net, ou j'ai assemblé le code sur http://delradiesdev.blogspot.com/2012/02/accessing-printer-status-using-winspool.html