Bilgisayardaki tüm yazıcıların listesi nasıl alınır


100

Bilgisayara bağlanan tüm yazıcıların listesini almam gerekiyor mu?

Bunu C #, WinForms'da nasıl yapabilirim?

Yanıtlar:


199

Bunu dene:

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

9
Bunu System.Drawing'de aramayı hiç düşünmedim!
Olivier Jacot-Descombes

57

Yazıcının adından daha fazla bilgiye ihtiyacınız varsa, System.Managementbunları sorgulamak için API'yi kullanabilirsiniz :

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


8

ASP.NET'te Ağ ve Yerel Yazıcı Listesini Alın

Bu yöntem, Windows Yönetim Araçları veya WMI arabirimini kullanır. Windows İşletim Sisteminde çalışan çeşitli sistemler (donanım) hakkında bilgi almak için kullanılan bir teknolojidir.

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

Kaynak ve uygulama demosunu indirmek için burayı tıklayın

Ağ ve yerel yazıcıyı listeleyen uygulama demosu

görüntü açıklamasını buraya girin


Demonuz da ASP.NET'te mi?
AaA

6

LocalPrintServer sınıfını da kullanabilirsiniz. Bakınız: 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(); 
        } 
    }

Dokümanlarda belirtildiği gibi: System.Printing ad alanındaki sınıflar, bir Windows hizmeti veya ASP.NET uygulaması veya hizmeti içinde kullanım için desteklenmez.


Koda uyacak bir açıklama ekleyebilir misiniz?
jhpratt

Bu çok ilginç bir cevap. Yalnızca isimlere ihtiyacınız varsa, kabul edilen cevap doğrudur. Başka verilere ihtiyacınız varsa, win32_Printer için sorguyu kullanmak bu aramayı yapmaktan çok daha yavaştır
Noman_1

0

MVC C # ile çalışıyorsanız, yazıcılar ve açılır pencereler için seri bağlantı noktaları ile başa çıkmanın yolu budur.

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);
        }
    }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.