it-swarm-eu.dev

Was ist der beste Weg, um den Standarddrucker in .NET zu bekommen

Ich muss den Standarddruckernamen abrufen. Ich werde C # verwenden, aber ich vermute, dass dies eher eine Rahmenfrage ist und nicht sprachspezifisch.

72
Kevin Gale

Der einfachste Weg, den ich gefunden habe, ist das Erstellen eines neuen PrinterSettings -Objekts. Es beginnt mit allen Standardwerten. Sie können also die Name -Eigenschaft überprüfen, um den Namen des Standarddruckers abzurufen.

PrinterSettings befindet sich in System.Drawing.dll im Namespace System.Drawing.Printing.

PrinterSettings settings = new PrinterSettings();
Console.WriteLine(settings.PrinterName);

Alternativ können Sie auch das statische PrinterSettings.InstalledPrinters-Methode, um eine Liste aller Druckernamen abzurufen. Setzen Sie dann die Eigenschaft PrinterName und aktivieren Sie IsDefaultPrinter. Ich habe das noch nicht ausprobiert, aber die Dokumentation scheint darauf hinzudeuten, dass es nicht funktionieren wird. Anscheinend ist IsDefaultPrinter nur wahr, wenn PrinterName nicht explizit festgelegt ist.

114
OwenP

Ein anderer Ansatz ist die Verwendung von WMI (Sie müssen einen Verweis auf die System.Management-Assembly hinzufügen):

public static string GetDefaultPrinterName()
{
    var query = new ObjectQuery("SELECT * FROM Win32_Printer");
    var searcher = new ManagementObjectSearcher(query);

    foreach (ManagementObject mo in searcher.Get())
    {
        if (((bool?) mo["Default"]) ?? false)
        {
            return mo["Name"] as string;
        }
    }

    return null;
}
28
Nathan Baulch

Wenn Sie nur den Druckernamen wollen, ist das überhaupt kein Vorteil. WMI kann jedoch eine ganze Reihe anderer Druckereigenschaften zurückgeben:

using System;
using System.Management;
namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            ObjectQuery query = new ObjectQuery(
                "Select * From Win32_Printer " +
                "Where Default = True");

            ManagementObjectSearcher searcher =
                new ManagementObjectSearcher(query);

            foreach (ManagementObject mo in searcher.Get())
            {
                Console.WriteLine(mo["Name"] + "\n");

                foreach (PropertyData p in mo.Properties)
                {
                    Console.WriteLine(p.Name );
                }
            }
        }
    }
}

und nicht nur Drucker. Wenn Sie an Computerdaten interessiert sind, können Sie diese wahrscheinlich über WMI abrufen. WQL (die WMI-Version von SQL) ist auch einer seiner Vorteile.

11
Uros Calakovic

Ich verwende in diesem Fall immer den System.Printing.LocalPrintServer, mit dem auch ermittelt werden kann, ob es sich um einen lokalen Drucker, einen Netzwerkdrucker oder einen Faxdrucker handelt.

string defaultPrinter;
using(var printServer = new LocalPrintServer()) {
  defaultPrinter = printServer.DefaultPrintQueue.FullName);
}

oder mit einer statischen Methode GetDefaultPrintQueue

LocalPrintServer.GetDefaultPrintQueue().FullName
9

Versuchen Sie auch dieses Beispiel

 PrinterSettings printerName = new PrinterSettings();

 string defaultPrinter;

 defaultPrinter = printerName.PrinterName;
1
Ramgy Borja
  • 1. Erstellen Sie eine Instanz des Objekts PrintDialog.
  • rufen Sie dann das Druckdialogobjekt auf und lassen Sie das PrinterName leer. Dadurch gibt das Windows-Objekt den Namen des Standarddruckers zurück
  • schreiben Sie dies in eine Zeichenfolge und verwenden Sie es als Druckernamen, wenn Sie die Druckprozedur aufrufen

Code:

Try

    Dim _printDialog As New System.Windows.Forms.PrintDialog

    xPrinterName = _printDialog.PrinterSettings.PrinterName '= "set as Default printer"

Catch ex As Exception
    System.Windows.Forms.MessageBox.Show("could not printed Label.", "Print Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
0
DieselDog

Das sollte funktionieren:

using System.Drawing.Printing;

PrinterSettings settings = new PrinterSettings(); string defaultPrinterName = settings.PrinterName;

0
Tahir