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?

War es hilfreich?

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.

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).

nutzen

http://msdn.microsoft .com / de-de / library / System.Printing (v = vs.110) aspx

Ein Beispiel des Status der Druckerwarteschlange und erster Job ..

abrufen
var 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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top