如何使用 WMI 检索物理打印机列表?
Posted
技术标签:
【中文标题】如何使用 WMI 检索物理打印机列表?【英文标题】:How to retrieve a list of physical printers using WMI? 【发布时间】:2011-07-27 08:55:26 【问题描述】:我正在尝试使用 WMI 获取连接到 Windows XP 机器的硬件打印机列表。我想要的是 不 与从 Win32_Printers 获取列表相同,因为我只想获取物理上以盒子形式存在的打印机,摆脱所有“打印机噪音”,如“发送到OneNote 驱动程序”、“Microsoft 共享传真驱动程序”、“Microsoft XPS 文档编写器”等...
通过使用 WMICodeCreator 工具,我发现我不能依赖本地/网络属性为真(截至目前,我的网络打印机告诉我它的网络属性为假...)所以我想知道是否有其他方法可以获取正确的信息?
奖励积分如果我可以将 USB 打印机连接到计算机:Win32_USBHub 属性在这里没有真正帮助,因为我无法获得“打印支持”的正确描述:)
【问题讨论】:
也许正在寻找 Win32_Printer.MarkingTechnology 或 Win32_Printer.PortName? 不幸的是,答案是否定的,这不能直接完成 - 只有一些好的猜测会有所帮助。见***.com/questions/2327763/… 【参考方案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
【讨论】:
如果您要远程获取此信息,这将不起作用。【参考方案2】:我认为只有物理打印机使用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();
【讨论】:
这是不正确的。许多物理打印机使用unidrv
以外的驱动程序,许多虚拟打印机使用unidrv
。您无法根据打印机使用的驱动程序判断打印机是物理的还是虚拟的。以上是关于如何使用 WMI 检索物理打印机列表?的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有 WMI 的情况下使用 PowerShell 获取总物理内存大小?
如何在 Python 中不使用 WMI 获取 PhysicalDisk?