Как получить список всех принтеров на компьютере - PullRequest
89 голосов
/ 01 марта 2010

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

Как мне это сделать в C #, WinForms?

Ответы [ 5 ]

173 голосов
/ 01 марта 2010

Попробуйте это:

foreach (string printer in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
{
    MessageBox.Show(printer);
}
48 голосов
/ 08 июля 2014

Если вам нужно больше информации, чем просто имя принтера, вы можете использовать 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);
}
22 голосов
/ 01 марта 2010

Посмотрите на статическое свойство System.Drawing.Printing.PrinterSettings.InstalledPrinters .

Это список имен всех установленных принтеров в системе.

8 голосов
/ 22 июля 2015

Получение списка сетевых и локальных принтеров в 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

1 голос
/ 25 ноября 2017
    public List<string>  InstalledPrinters
    {
        get
        {
            return (from PrintQueue printer in new LocalPrintServer().GetPrintQueues(new[] { EnumeratedPrintQueueTypes.Local,
                EnumeratedPrintQueueTypes.Connections }).ToList()
                    select printer.Name).ToList(); 
        } 
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...