Necesito obtener el nombre de la impresora predeterminada. Usaré C #, pero sospecho que se trata más de una cuestión de marco y no es un lenguaje específico.
81
La forma más fácil que encontré es crear un nuevo PrinterSettings
objeto. Comienza con todos los valores predeterminados, por lo que puede verificar su propiedad Nombre para obtener el nombre de la impresora predeterminada.
PrinterSettings
está 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 PrinterSettings.InstalledPrinters
método estático para obtener una lista de todos los nombres de impresora, luego establecer la propiedad PrinterName y verificar IsDefaultPrinter . No he probado esto, pero la documentación parece sugerir que no funcionará. Aparentemente, IsDefaultPrinter solo es verdadero cuando PrinterName no se establece explícitamente.
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; }
fuente
Si solo quiere el nombre de la impresora, no hay 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 información relacionada con la computadora, es probable que pueda obtenerla con WMI. WQL (la versión WMI de SQL) también es una de sus ventajas.
fuente
Siempre utilizo 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
fuente
Prueba también este ejemplo
PrinterSettings printerName = new PrinterSettings(); string defaultPrinter; defaultPrinter = printerName.PrinterName;
fuente
Esto debería funcionar:
using System.Drawing.Printing;
PrinterSettings settings = new PrinterSettings(); string defaultPrinterName = settings.PrinterName;
fuente
PrintDialog
objeto.PrinterName
espacio en blanco. esto hará que el objeto de Windows devuelva el nombre predeterminado de la impresoraCó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
fuente