是否有可能将虚拟打印机与物理打印机区分开来?

我有WinXP中所有可用打印机的列表。 我需要代码(理想情况下是.NET)来过滤掉此列表中的所有虚拟打印机。 有可能吗? 我分析了Win32_Printer wmi类的所有属性,但看不到任何合适的属性。 请帮忙。

我认为这是不可能的,至少可以肯定。 虚拟打印机的重点是尽可能模仿真实打印机,因此您可以识别的任何差异基本上只是虚拟打印机中的错误。

也就是说,您可以根据PortName进行一些猜测。 PortName几个示例,包含IP地址或以“USB”开头的PortName可能是指物理连接。

我知道这是一个老问题,但这个答案可能对有同样问题的人有所帮助。

如果我对“虚拟打印机”的理解是正确的。 您可以检查WMI属性“PrintProcessor”并忽略“winprint”。 据我所知,这将忽略所有基于Windows 7软件的打印机选项。 以下是一些示例代码来演示。 返回打印机名称。

  using System.Management; try { ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_Printer"); foreach (ManagementObject obj in searcher.Get()) { if(obj != null) { if(obj["PrintProcessor"].ToString().ToUpper() != "WINPRINT") { Console.WriteLine(obj["Name"]); } } } } catch (ManagementException e) { MessageBox.Show("An error occurred while querying for WMI data: " + e.Message); }