Ich muss den Standarddruckernamen erhalten. Ich werde C # verwenden, aber ich vermute, dass dies eher eine Rahmenfrage ist und nicht sprachspezifisch.
81
Der einfachste Weg, den ich gefunden habe, ist das Erstellen eines neuen PrinterSettings
Objekts. Es beginnt mit allen Standardwerten, sodass Sie die Eigenschaft Name überprüfen können , 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 möglicherweise die statische PrinterSettings.InstalledPrinters
Methode verwenden, um eine Liste aller Druckernamen abzurufen , dann die PrinterName- Eigenschaft festlegen und den IsDefaultPrinter überprüfen . Ich habe es nicht versucht, aber die Dokumentation scheint darauf hinzudeuten, dass es nicht funktioniert. Anscheinend ist IsDefaultPrinter nur wahr, wenn PrinterName nicht explizit festgelegt ist.
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; }
quelle
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 computerbezogenen Daten interessiert sind, können Sie diese wahrscheinlich mit WMI abrufen. WQL (die WMI-Version von SQL) ist auch einer seiner Vorteile.
quelle
Ich verwende in diesem Fall immer den System.Printing.LocalPrintServer, mit dem auch ermittelt werden kann, ob der Drucker lokal, im Netzwerk oder per Fax ist.
string defaultPrinter; using(var printServer = new LocalPrintServer()) { defaultPrinter = printServer.DefaultPrintQueue.FullName); }
oder mit einer statischen Methode GetDefaultPrintQueue
LocalPrintServer.GetDefaultPrintQueue().FullName
quelle
Versuchen Sie auch dieses Beispiel
PrinterSettings printerName = new PrinterSettings(); string defaultPrinter; defaultPrinter = printerName.PrinterName;
quelle
Das sollte funktionieren:
using System.Drawing.Printing;
PrinterSettings settings = new PrinterSettings(); string defaultPrinterName = settings.PrinterName;
quelle
PrintDialog
Objekts.PrinterName
Feld leer. Dadurch gibt das Windows-Objekt den Standarddruckernamen zurückCode:
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
quelle