Cómo obtener la lista de todas las impresoras en la computadora

Necesito obtener la lista de todas las impresoras que se conectan a la computadora?

¿Cómo puedo hacerlo en C #, WinForms?

Prueba esto:

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

Si necesita más información que solo el nombre de la impresora, puede usar la API System.Management para consultarlas:

 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); } 

Mire la propiedad estática System.Drawing.Printing.PrinterSettings.InstalledPrinters .

Es una lista de los nombres de todas las impresoras instaladas en el sistema.

Obtenga la lista de impresoras locales y de red en ASP.NET

Este método utiliza el Instrumental de administración de Windows o la interfaz WMI. Es una tecnología utilizada para obtener información sobre varios sistemas (hardware) que se ejecutan en un sistema operativo 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()); } } 

Haga clic aquí para descargar la demo de la fuente y la aplicación

Demo de la aplicación que enumera la red y la impresora local

enter image description here

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