Wie Druckerinfo in .NET erhalten?
-
08-07-2019 - |
Frage
In dem Standardprintdialog gibt es vier Werte mit einem ausgewählten Drucker zugeordnet ist. Status, Typ, Verfügbarkeit und Kommentar
Wenn ich einen Druckernamen wissen, wie kann ich diese Werte in C # bekommen 2.0?
Lösung
Wie Dowski vorgeschlagen, könnten Sie WMI verwenden, um erhalten Druckereigenschaften. Der folgende Code zeigt alle Eigenschaften für einen bestimmten Druckernamen. Darunter finden Sie:. Printer, Kommentar, Ort, Driver, Portnamen, 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);
}
}
Andere Tipps
Das sollte Arbeit.
using System.Drawing.Printing;
...
PrinterSettings ps = new PrinterSettings();
ps.PrinterName = "The printer name"; // Load the appropriate printer's setting
Danach wird die verschiedenen Eigenschaften von Printer gelesen werden.
Beachten Sie, dass ps.isValid()
können sehen, ob der Drucker tatsächlich vorhanden ist.
Edit: Ein weiterer Kommentar. Microsoft empfiehlt, dass Sie eine Printdocument und seine Printer ändern, anstatt einen Printer direkt zu schaffen.
Lesen Sie PrinterSettings.InstalledPrinters
Bitte beachten Sie, dass der Artikel, dass Dowski und Panos wurde reffering auf ( MSDN Win32_Printer ) kann ein wenig irreführend sein
.Ich beziehe mich den ersten Wert der meisten der Arrays. einige beginnen mit 1 und einige beginnen mit 0. zum Beispiel " ExtendedPrinterStatus " erster Wert in Tabelle 1, daher sollte das Array so etwas wie diese:
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"
};
und auf der anderen Seite, " Error " erster Wert in der Tabelle ist 0, daher Ihr Array sollte wie folgt sein:
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 " ist veraltet, aber können Sie " Printer ".
Nur als Referenz, hier ist eine Liste aller verfügbaren Eigenschaften für einen Drucker Managementobject.
usage: printer.Properties["PropName"].Value
Es ist schon eine lange Zeit, da ich in einer Windows-Umgebung gearbeitet haben, aber ich würde vorschlagen, dass Sie unter mit WMI .
Ich weiß, es ist ein altes Posting, aber heutzutage die einfache / schnelle Option ist die erweiterte Druckdienste durch den WPF Rahmen (verwendbar von nicht-WPF-Anwendungen).
nutzenhttp://msdn.microsoft .com / de-de / library / System.Printing (v = vs.110) aspx
Ein Beispiel des Status der Druckerwarteschlange und erster Job ..
abrufenvar queue = new LocalPrintServer().GetPrintQueue("Printer Name");
var queueStatus = queue.QueueStatus;
var jobStatus = queue.GetPrintJobInfoCollection().FirstOrDefault().JobStatus
Als Alternative zu WMI Sie schnell genaue Ergebnisse durch Antippen um Winspool.drv (zB Windows API) bekommen - Sie können alle Details erhalten an den Schnittstellen, Strukturen und Konstanten aus pinvoke.net, oder ich habe setzen der Code zusammen unter http://delradiesdev.blogspot.com /2012/02/accessing-printer-status-using-winspool.html