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

use*_*498 11 .net c# wmi winapi

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

Jer*_*fin 5

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

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


HiT*_*ech 5

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

如果我对“虚拟打印机”的理解是正确的。您可以检查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);
        }
Run Code Online (Sandbox Code Playgroud)