print dialog c# ejemplos
¿Cómo obtener información de la impresora en.NET? (8)
Como sugirió dowski , podría usar WMI para obtener las propiedades de la impresora. El siguiente código muestra todas las propiedades para un nombre de impresora determinado. Entre ellos encontrará: PrinterStatus, Comment, Location, DriverName, PortName, etc.
using System.Management;
...
string printerName = "YourPrinterName";
string query = string.Format("SELECT * from Win32_Printer WHERE Name LIKE ''%{0}''", printerName);
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query))
using (ManagementObjectCollection coll = searcher.Get())
{
try
{
foreach (ManagementObject printer in coll)
{
foreach (PropertyData property in printer.Properties)
{
Console.WriteLine(string.Format("{0}: {1}", property.Name, property.Value));
}
}
}
catch (ManagementException ex)
{
Console.WriteLine(ex.Message);
}
}
En PrintDialog estándar hay cuatro valores asociados con una impresora seleccionada: Estado, Tipo, Dónde y Comentario.
Si conozco el nombre de una impresora, ¿cómo puedo obtener estos valores en C # 2.0?
Como alternativa a WMI puede obtener resultados rápidos y precisos al tocar en WinSpool.drv (es decir, la API de Windows); puede obtener todos los detalles sobre las interfaces, estructuras y constantes de pinvoke.net, o bien, he incluido el código en http://delradiesdev.blogspot.com/2012/02/accessing-printer-status-using-winspool.html
Esto debería funcionar
using System.Drawing.Printing;
...
PrinterSettings ps = new PrinterSettings();
ps.PrinterName = "The printer name"; // Load the appropriate printer''s setting
Después de eso, se pueden leer las diversas properties de PrinterSettings.
Tenga en cuenta que ps.isValid()
puede ver si la impresora realmente existe.
Editar: Un comentario adicional. Microsoft recomienda utilizar un PrintDocument y modificar sus PrinterSettings en lugar de crear PrinterSettings directamente.
Ha pasado mucho tiempo desde que trabajé en un entorno de Windows, pero sugiero que considere usar WMI .
Sé que es una publicación antigua, pero hoy en día la opción más fácil / más rápida es utilizar los servicios de impresión mejorados que ofrece el marco WPF (utilizable por aplicaciones que no son de WPF).
http://msdn.microsoft.com/en-us/library/System.Printing(v=vs.110).aspx
Un ejemplo para recuperar el estado de la cola de la impresora y el primer trabajo.
var queue = new LocalPrintServer().GetPrintQueue("Printer Name");
var queueStatus = queue.QueueStatus;
var jobStatus = queue.GetPrintJobInfoCollection().FirstOrDefault().JobStatus
Solo como referencia, here hay una lista de todas las propiedades disponibles para una impresora ManagementObject.
usage: printer.Properties["PropName"].Value
Tenga en cuenta que el artículo que dowski y Panos estaban refiriendo a ( MSDN Win32_Printer ) puede ser un poco engañoso.
Me refiero al primer valor de la mayoría de las matrices. algunos comienzan con 1 y algunos comienzan con 0. Por ejemplo, el primer valor de " ExtendedPrinterStatus " en la tabla es 1, por lo tanto, su matriz debería ser algo como esto:
string[] arrExtendedPrinterStatus = {
"","Other", "Unknown", "Idle", "Printing", "Warming Up",
"Stopped Printing", "Offline", "Paused", "Error", "Busy",
"Not Available", "Waiting", "Processing", "Initialization",
"Power Save", "Pending Deletion", "I/O Active", "Manual Feed"
};
y, por otro lado, el primer valor de " ErrorState " en la tabla es 0, por lo tanto, su matriz debería ser algo como esto:
string[] arrErrorState = {
"Unknown", "Other", "No Error", "Low Paper", "No Paper", "Low Toner",
"No Toner", "Door Open", "Jammed", "Offline", "Service Requested",
"Output Bin Full"
};
Por cierto, " PrinterState " está obsoleto, pero puede usar " PrinterStatus ".