.net

Cuál es la mejor manera de obtener la impresora predeterminada en.NET



(6)

Necesito obtener el nombre de impresora predeterminado. Usaré C #, pero sospecho que se trata más de una pregunta marco y no es específica del idioma.


Pruebe también este ejemplo

PrinterSettings printerName = new PrinterSettings(); string defaultPrinter; defaultPrinter = printerName.PrinterName;


Otro enfoque es usar WMI (deberá agregar una referencia al ensamblado System.Management):

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; }


Si solo quiere que el nombre de la impresora no tenga ninguna ventaja. Pero WMI es capaz de devolver un montón de otras propiedades de la impresora:

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 ); } } } } }

y no solo impresoras. Si está interesado en cualquier tipo de datos relacionados con la computadora, es probable que pueda obtenerlo con WMI. WQL (la versión WMI de SQL) es también una de sus ventajas.


La forma más fácil que encontré es crear un nuevo objeto PrinterSettings . Comienza con todos los valores predeterminados, por lo que puede verificar su propiedad Name para obtener el nombre de la impresora predeterminada.

PrinterSettings encuentra en System.Drawing.dll en el espacio de nombres System.Drawing.Printing .

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

Alternativamente, podría usar el método static PrinterSettings.InstalledPrinters para obtener una lista de todos los nombres de las impresoras, luego configure la propiedad PrinterName y verifique IsDefaultPrinter . No lo he intentado, pero la documentación parece sugerir que no funcionará. Aparentemente, IsDefaultPrinter solo es verdadero cuando PrinterName no está establecido explícitamente.


  • Primero crea una instancia del objeto PrintDialog .
  • luego llame al objeto de diálogo de impresión y deje el PrinterName blanco. esto hará que el objeto de Windows devuelva el nombre de la impresora definitiva
  • escriba esto en una cadena y úselo como nombre de la impresora cuando llame al procedimiento de impresión

Código:

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


Siempre uso en este caso el System.Printing.LocalPrintServer, que también permite obtener si la impresora es local, de red o de fax.

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

o usando un método estático GetDefaultPrintQueue

LocalPrintServer.GetDefaultPrintQueue().FullName