Как получить список всех принтеров на компьютере

Мне нужно получить список всех принтеров, которые подключаются к компьютеру?

Как я могу это сделать в С#, WinForms?

Ответ 1

Попробуйте следующее:

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

Ответ 2

Если вам нужно больше информации, чем просто имя принтера, вы можете использовать API System.Management для запроса к ним:

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

Ответ 4

Получить список сетевых и локальных принтеров в ASP.NET

Этот метод использует инструментарий управления Windows или интерфейс WMI. Это технология, используемая для получения информации о различных системах (аппаратных средствах), работающих в операционной системе 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());
            }
        }

Нажмите здесь, чтобы загрузить демоверсию исходного кода и приложения

Демонстрация приложения с указанием сетевого и локального принтера

enter image description here

Ответ 5

Вы также можете использовать класс LocalPrintServer. См.: 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(); 
        } 
    }

Как указано в документации: Классы в пространстве имен System.Printing не поддерживаются для использования в службе Windows или приложении или службе ASP.NET.