Necesito obtener el nombre predeterminado de la impresora. Usaré C#, pero sospecho que se trata más de una pregunta marco y no es específica del idioma.Cuál es la mejor manera de obtener la impresora predeterminada en .NET
Respuesta
La manera 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
se encuentra en System.Drawing.dll en el espacio de nombres System.Drawing.Printing
.
PrinterSettings settings = new PrinterSettings();
Console.WriteLine(settings.PrinterName);
Como alternativa, podría tal vez utilizar el método estático PrinterSettings.InstalledPrinters
para obtener una lista de todos los nombres de las impresoras, a continuación, establezca la propiedad NombreImpresoray comprobar el IsDefaultPrinter. No lo he intentado, pero la documentación parece sugerir que no funcionará. Aparentemente IsDefaultPrinter solo es verdadero cuando PrinterName no está explícitamente establecido.
Otro enfoque está utilizando WMI (que tendrá que añadir 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;
}
Uso de las nuevas PrinterSettings(). PrinterName a veces devuelve "La impresora predeterminada no está configurada" como el nombre de la impresora, incluso cuando se ha configurado la impresora predeterminada. La solución de WMI anterior de Nathan Baulch funcionó para mí en una situación como esa. – Peter
Si lo que desea es el nombre de la impresora ninguna ventaja en absoluto. 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 las 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.
- Primero crea una instancia del objeto
PrintDialog
. - luego llame al objeto de diálogo de impresión y deje en blanco
PrinterName
. esto hará que las ventanas se oponen a devolver el nombre de la impresora defualt - escribir esto en una cadena y utilizarlo como el nombre de la impresora cuando se llama 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
utilizo siempre en este caso 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 el uso de un método estático GetDefaultPrintQueue
LocalPrintServer.GetDefaultPrintQueue().FullName
Pruebe también este ejemplo
PrinterSettings printerName = new PrinterSettings();
string defaultPrinter;
defaultPrinter = printerName.PrinterName;
El código más rápido para mí. Gracias –
- 1. VBS - Obtener impresora predeterminada
- 2. ¿Cuál es la mejor manera de imprimir directamente en una impresora, como una impresora POS, a través de la web?
- 3. .Net Deep cloning: ¿cuál es la mejor manera de hacerlo?
- 4. ¿Cuál es la mejor manera de definir la generación personalizada de identificadores como predeterminada en Grails?
- 5. ¿Cómo determinar la impresora predeterminada usando WPF?
- 6. de Configuración de la impresora en .NET
- 7. ¿Cuál es la mejor manera de dibujar en la consola?
- 8. ¿Cuál es la mejor manera de comparar programas en Windows?
- 9. Cuál es la mejor manera de paginar resultados en php
- 10. ¿Cuál es la mejor manera de obtener la fecha y la hora en Clojure?
- 11. ¿Cómo obtener información de la impresora en .NET?
- 12. ¿Cuál es la mejor manera de consumir servicios web REST?
- 13. ¿La mejor manera de obtener una cita con .NET?
- 14. ¿Cuál es la mejor manera de ampliar la funcionalidad?
- 15. ¿Cuál es la mejor manera de obtener la URL actual en Spring MVC?
- 16. ¿Cuál es la mejor manera de afirmar la igualdad numpy.array?
- 17. ¿Cuál es la mejor manera de comenzar a utilizar MAPI?
- 18. ¿Cuál es la mejor manera de dividir dos objetos TimeSpan?
- 19. ¿Cuál es la mejor manera de comenzar a usar Asterisk?
- 20. ¿Cuál es la mejor manera de solucionar problemas de rendimiento?
- 21. ¿Cuál es la mejor manera de validar datos en mongo?
- 22. ¿Cuál es la mejor manera de mostrar HTML en Flex?
- 23. ¿Cuál es la mejor manera de implementar params en JavaScript?
- 24. ¿Cuál es la mejor manera de hacer bucles en JavaScript
- 25. ¿Cuál es la mejor manera de manejar excepciones en Perl?
- 26. ¿Cuál es la mejor manera de escribir comentarios en C?
- 27. ¿Cuál es la mejor manera de recortar() en javascript
- 28. Cuál es la mejor manera de actualizar entidades en nhibernate
- 29. ¿Cuál es la mejor manera de manejar FBO en OpenGL?
- 30. ¿Cuál es la mejor manera de hacer GUI en Clojure?
Tal vez vale la pena mencionar que las cadenas devueltas desde InstalledPrinters pueden tener una carcasa diferente a la NombreImpresora propiedad. Por ejemplo, esta prueba falló en mi sistema: Dim ps Como nueva PrinterSettings Dim foundDefault As Boolean = False Para cada impresora Como String En PrinterSettings.InstalledPrinters If printer = ps.PrinterName Then foundDefault = True End If Next Assert.IsTrue (foundDefault) – miasbeck
Aquí está la técnica de bucle, que funciona para mí. : foreach (nombre de cadena en PrinterSettings.InstalledPrinters) { PrinterSettings ps = new PrinterSettings(); ps.PrinterName = nombre; if (ps.IsDefaultPrinter) nombre de devolución; } return null; – BrokeMyLegBiking
Tenga en cuenta que este método no funciona si ejecuta su aplicación como un servicio de Windows. No he descubierto por qué. Me estoy ejecutando como un servicio local. –