112 votes

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

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

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

223voto

Jojo Sardez Points 4727

Essayez ça :

foreach (string printer in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
{
    MessageBox.Show(printer);
}

17 votes

Je n'ai jamais pensé à chercher cela dans System.Drawing !

63voto

Christian Moser Points 204

Si vous avez besoin de plus d'informations que le simple nom de l'imprimante, vous pouvez utiliser la fonction System.Management 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);
}

25voto

Rune Grimstad Points 17775

Regardez les statiques System.Drawing.Printing.PrinterSettings.InstalledPrinters (Imprimantes installées) propriété.

Il s'agit d'une liste des noms de toutes les imprimantes installées sur le système.

0 votes

Merci pour le lien MSDN !

9voto

Hernan Alonso Points 81

Vous pouvez également utiliser la classe LocalPrintServer. Voir : Serveur d'impression local (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 les docs : Les classes de l'espace de noms System.Printing ne peuvent pas être utilisées dans un service Windows ou une application ou un service ASP.NET.

0 votes

Pouvez-vous ajouter une explication pour accompagner le code ?

0 votes

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, l'utilisation de la requête à win32_Printer est beaucoup plus lente que l'appel suivant

0 votes

C'est la meilleure réponse pour obtenir toutes les informations.

8voto

Code Scratcher Points 343

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

Cette méthode utilise l'instrumentation de gestion Windows ou l'interface WMI. Il s'agit d'une technologie utilisée pour obtenir des informations sur divers systèmes (matériel) 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 source et la démo de l'application

Démonstration de l'application qui répertorie les imprimantes réseau et locales

enter image description here

0 votes

Votre démo est aussi en ASP.NET ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X