Verificar disponibilidad de impresora – C#


Todas nuestras aplicaciones en algún punto tendrá que proporcionar mecanismos de impresión de los datos de salida que fueron procesados; aunque en la mayoría de los casos utilizamos herramientas como Crystal Reports o Reporting Services en ciertas ocasiones necesitaremos enviar impresión directamente sin pasar por ninguna API, por lo cual será necesario proporcionar mecanismos de validación que permitan verificar previamente si una impresora está activa.

El siguiente código muestra un listado de las impresoras instaladas en el sistema y brinda la posibilidad de verificar si está disponible, utilizando la clase:

System.Drawing.Printing.PrinterSettings.InstalledPrinters

 

Es necesario recorrer todos los ítems de la clase antes mencionada e ir agregando cada elemento al ListBox:

foreach (string prtn in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
{
      lbxImpresoras.Items.Add(prtn);
}

Posteriormente agregamos el código del botón que validará la disponibilidad, el cual retornará false o true:

        public bool EstaEnLineaLaImpresora(string printerName)
        {
            string str = "";
            bool online = false;

            ManagementScope scope = new ManagementScope(ManagementPath.DefaultPath);

            scope.Connect();

            //Consulta para obtener las impresoras, en la API Win32
            SelectQuery query = new SelectQuery("select * from Win32_Printer");

            ManagementClass m = new ManagementClass("Win32_Printer");

            ManagementObjectSearcher obj = new ManagementObjectSearcher(scope, query);

            //Obtenemos cada instancia del objeto ManagementObjectSearcher
            using (ManagementObjectCollection printers = m.GetInstances())
                foreach (ManagementObject printer in printers)
                {
                    if (printer != null)
                    {
                        //Obtenemos la primera impresora en el bucle
                        str = printer["Name"].ToString().ToLower();

                        if (str.Equals(printerName.ToLower()))
                        {
                            //Una vez encontrada verificamos el estado de ésta
                            if (printer["WorkOffline"].ToString().ToLower().Equals("true") || printer["PrinterStatus"].Equals(7))
                                //Fuera de línea
                                online = false;
                            else
                                //En línea
                                online = true;
                        }
                    }
                    else
                        throw new Exception("No fueron encontradas impresoras instaladas en el equipo");
                }
            return online;
        }

Si desean probar directamente el código pueden descargar el ejemplo completo en el siguiente enlace:

https://goo.gl/QoytnK

 

Suerte !!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *