Comment obtenir la liste de toutes les imprimantes dans l'ordinateur

99

J'ai besoin d'obtenir la liste de toutes les imprimantes qui se connectent à l'ordinateur?

Comment puis-je le faire en C #, WinForms?

Or
la source

Réponses:

197

Essaye ça:

foreach (string printer in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
{
    MessageBox.Show(printer);
}
Jojo Sardez
la source
9
Jamais pensé à rechercher cela dans System.Drawing!
Olivier Jacot-Descombes
57

Si vous avez besoin de plus d'informations que le nom de l'imprimante, vous pouvez utiliser l' System.ManagementAPI pour les interroger:

var printerQuery = new ManagementObjectSearcher("SELECT * from Win32_Printer");
foreach (var printer in printerQuery.Get())
{
    var name = printer.GetPropertyValue("Name");
    var status = printer.GetPropertyValue("Status");
    var isDefault = printer.GetPropertyValue("Default");
    var isNetworkPrinter = printer.GetPropertyValue("Network");

    Console.WriteLine("{0} (Status: {1}, Default: {2}, Network: {3}", 
                name, status, isDefault, isNetworkPrinter);
}
Christian Moser
la source
8

Obtenir la liste des imprimantes réseau et locales dans ASP.NET

Cette méthode utilise Windows Management Instrumentation ou l'interface WMI. C'est une technologie utilisée pour obtenir des informations sur divers systèmes (matériels) fonctionnant sur un système d'exploitation Windows.

private void GetAllPrinterList()
        {
            ManagementScope objScope = new ManagementScope(ManagementPath.DefaultPath); //For the local Access
            objScope.Connect();

            SelectQuery selectQuery = new SelectQuery();
            selectQuery.QueryString = "Select * from win32_Printer";
            ManagementObjectSearcher MOS = new ManagementObjectSearcher(objScope, selectQuery);
            ManagementObjectCollection MOC = MOS.Get();
            foreach (ManagementObject mo in MOC)
            {
                lstPrinterList.Items.Add(mo["Name"].ToString());
            }
        }

Cliquez ici pour télécharger la démo de la source et de l'application

Démo de l'application répertoriant le réseau et l'imprimante locale

entrez la description de l'image ici

Code Scratcher
la source
est votre démo dans ASP.NET aussi?
AaA
5

Vous pouvez également utiliser la classe LocalPrintServer. Voir: System.Printing.LocalPrintServer

    public List<string>  InstalledPrinters
    {
        get
        {
            return (from PrintQueue printer in new LocalPrintServer().GetPrintQueues(new[] { EnumeratedPrintQueueTypes.Local,
                EnumeratedPrintQueueTypes.Connections }).ToList()
                    select printer.Name).ToList(); 
        } 
    }

Comme indiqué dans la documentation: les classes de l'espace de noms System.Printing ne sont pas prises en charge pour une utilisation dans un service Windows ou une application ou un service ASP.NET.

Hernan Alonso
la source
Pouvez-vous ajouter une explication pour accompagner le code?
jhpratt
C'est une réponse très intéressante. Si vous n'avez besoin que des noms, la réponse acceptée est correcte. Si vous avez besoin d'autres données, utiliser la requête pour win32_Printer est beaucoup plus lent que de faire cet appel
Noman_1
0

Si vous travaillez avec MVC C #, c'est la manière de traiter les imprimantes et les ports série pour les listes déroulantes.

using System.Collections.Generic;
using System.Linq;
using System.IO.Ports;
using System.Drawing.Printing;

    public class Miclass
    {
        private void AllViews()
        {
            List<PortClass> ports = new List<PortClass>();
            List<Printersclass> Printersfor = new List<Printersclass>();
            string[] portnames = SerialPort.GetPortNames();
            /*PORTS*/
            for (int i = 0; i < portnames.Count(); i++)
            {
                ports.Add(new PortClass() { Name = portnames[i].Trim(), Desc = portnames[i].Trim() });
            }
            /*PRINTER*/
            for (int i = 0; i < PrinterSettings.InstalledPrinters.Count; i++)
            {
                Printersfor.Add(new Printersclass() { Name = PrinterSettings.InstalledPrinters[i].Trim(), Desc = PrinterSettings.InstalledPrinters[i].Trim() });
            }
        }
    }
    public class PortClass
    {
        public string Name { get; set; }
        public string Desc { get; set; }

        public override string ToString()
        {
            return string.Format("{0} ({1})", Name, Desc);
        }
    }
    public class Printersclass
    {
        public string Name { get; set; }
        public string Desc { get; set; }

        public override string ToString()
        {
            return string.Format("{0} ({1})", Name, Desc);
        }
    }
RUBEN
la source