如何使用WMI检索物理打印机列表?

时间:2011-07-27 08:55:27

标签: wmi printers network-printers

我正在尝试使用WMI获取连接到Windows XP计算机的硬件打印机列表。我想要的是与从Win32_Printers获取列表相同,因为我只想让物理上存在的打印机作为盒子,摆脱所有“打印机噪音”,如“发送到OneNote驱动程序“,”Microsoft共享传真驱动程序“,”Microsoft XPS文档编写器“等...

通过使用WMICodeCreator工具我发现我不能依赖本地/网络属性是真的(截至目前,我的网络打印机告诉我它的网络属性是假的......)所以我想知道是否有其他方法可以获得正确的信息?

奖励积分如果我可以将USB打印机连接到计算机:Win32_USBHub属性在这里没有真正的帮助,因为我无法获得“打印支持”的正确描述:)< / p>

2 个答案:

答案 0 :(得分:1)

我知道这是一个非常古老的帖子,但我遇到了相同的要求,并且认为我会发布我的最终结果给下一个人来。

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

答案 1 :(得分:0)

我认为只有物理打印机才能使用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();
}