Как получить список физических принтеров с помощью WMI? - PullRequest
3 голосов
/ 27 июля 2011

Я пытаюсь получить список аппаратных принтеров, подключенных к машине с Windows XP с помощью WMI. Мне бы хотелось, чтобы , а не - это то же самое, что получать список из Win32_Printers, поскольку мне бы хотелось получать только те принтеры, которые физически существуют в виде блоков, и избавляться от всего «шума принтера», такого как «Отправить в OneNote Драйвер »,« Драйвер общего факса Microsoft »,« Средство записи документов Microsoft XPS »и т. Д. *

Используя инструмент WMICodeCreator, я обнаружил, что не могу полагаться на истинность локальных / сетевых свойств (на данный момент мой сетевой принтер сообщает мне, что его сетевое свойство ложно ...), поэтому я бы хотел знаете, есть ли другой способ получить правильную информацию?

Бонусные баллы если я могу подключить USB-принтеры к компьютеру: свойство Win32_USBHub здесь не очень помогает, поскольку я не могу получить правильное описание «Поддержка печати»:)

Ответы [ 2 ]

1 голос
/ 02 марта 2018

Я знаю, что это действительно старая запись, но я столкнулся с теми же требованиями и решил, что опубликую свой конечный результат для следующего человека.

Dim oWMI, colPrinters, oItem, oPrinter
Set oWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colPrinters = oWMI.ExecQuery("Select * From Win32_Printer where PrintProcessor <> 'winprint'")

For Each oPrinter in colPrinters
    If oPrinter.Attributes And 64 Then
        Wscript.Echo oPrinter.Name
    End If
Next
0 голосов
/ 20 декабря 2012

Я думаю, что только физический принтер использует unidrv.dll

string query = "select * from Win32_PrinterDriver";
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
ManagementObjectCollection collection = searcher.Get();

foreach (ManagementObject obj in collection)
{
    Console.WriteLine(obj["Name"].ToString());
    Console.WriteLine(obj["DriverPath"].ToString());
    Console.WriteLine();
}
...