Saltar al contenido

¿Existe una forma .NET de enumerar todas las impresoras de red disponibles?

Solución:

  • Obtenga la impresora predeterminada de LocalPrintServer.DefaultPrintQueue
  • Obtenga las impresoras instaladas (desde la perspectiva del usuario) de PrinterSettings.InstalledPrinters
  • Enumere a través de la lista:
  • Cualquier impresora que comience con \ es una impresora de red, así que consiga la cola con new PrintServer("\UNCPATH").GetPrintQueue("QueueName")
  • Cualquier impresora que no comience con \ es una impresora local, así que consígala con LocalPrintServer.GetQueue("Name")
  • Puede ver cuál es el predeterminado comparando FullName propiedad.

Nota: una impresora de red puede ser la impresora predeterminada de LocalPrintServer.DefaultPrintQueue, pero no aparecer en LocalPrintServer.GetPrintQueues()

    // get available printers
    LocalPrintServer printServer = new LocalPrintServer();
    PrintQueue defaultPrintQueue = printServer.DefaultPrintQueue;

    // get all printers installed (from the users perspective)he t
    var printerNames = PrinterSettings.InstalledPrinters;
    var availablePrinters = printerNames.Cast<string>().Select(printerName => 
    {
        var match = Regex.Match(printerName, @"(?<machine>\\.*?)\(?<queue>.*)");
        PrintQueue queue;
        if (match.Success)
        {
            queue = new PrintServer(match.Groups["machine"].Value).GetPrintQueue(match.Groups["queue"].Value);
        }
        else
        {
            queue = printServer.GetPrintQueue(printerName);
        }

        var capabilities = queue.GetPrintCapabilities();
        return new AvailablePrinterInfo()
        {
            Name = printerName,
            Default = queue.FullName == defaultPrintQueue.FullName,
            Duplex = capabilities.DuplexingCapability.Contains(Duplexing.TwoSidedLongEdge),
            Color = capabilities.OutputColorCapability.Contains(OutputColor.Color)
        };
    }).ToArray();

    DefaultPrinter = AvailablePrinters.SingleOrDefault(x => x.Default);

utilizando la nueva API System.Printing

using (var printServer = new PrintServer(string.Format(@"\{0}", PrinterServerName)))
{
    foreach (var queue in printServer.GetPrintQueues())
    {
        if (!queue.IsShared)
        {
            continue;
        }
        Debug.WriteLine(queue.Name);
     }
 }

encontré este código aquí

 private void btnGetPrinters_Click(object sender, EventArgs e)
        {
// Use the ObjectQuery to get the list of configured printers
            System.Management.ObjectQuery oquery =
                new System.Management.ObjectQuery("SELECT * FROM Win32_Printer");

            System.Management.ManagementObjectSearcher mosearcher =
                new System.Management.ManagementObjectSearcher(oquery);

            System.Management.ManagementObjectCollection moc = mosearcher.Get();

            foreach (ManagementObject mo in moc)
            {
                System.Management.PropertyDataCollection pdc = mo.Properties;
                foreach (System.Management.PropertyData pd in pdc)
                {
                    if ((bool)mo["Network"])
                    {
                        cmbPrinters.Items.Add(mo[pd.Name]);
                    }
                }
            }

        }

Actualizar:

“Esta función de API puede enumerar todos los recursos de red, incluidos servidores, estaciones de trabajo, impresoras, recursos compartidos, directorios remotos, etc.”

http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=741&lngWId=10

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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