1

PrintQueue 或 PrintTicket 是否有任何属性或方法来确定所选打印机是虚拟打印机?例如,该进程应限制 M/S Xps Document Writer、Fax、Send To OneNote、PDF 打印机等。只有实际打印机应从 LocalPrintServer 中过滤掉并动态提供列表。

    using (var _LocalPrintServer = new LocalPrintServer())
    {
        foreach (PrintQueue _pq in _LocalPrintServer.GetPrintQueues())
        {
            // To Find some way to determine this _pq is NOT a virtual printer
        }
    }
4

1 回答 1

0

您将需要探测Win32_Printer类中的属性

System.Management.ObjectQuery oq = new System.Management.ObjectQuery("SELECT * FROM Win32_Printer");
ManagementObjectSearcher mos = new ManagementObjectSearcher(oq);
ManagementObjectCollection moc = mos.Get();
foreach( ManagementObject mo in moc )
{

    string name = mo["Name"].ToString();
    string language = mo["DefaultLanguage"].ToString();
    MessageBox.Show(String.Format("Printer: {0} -- Language: {1}", name, language);
}

也许您可以检查该languages字段是否有 postcipt 或 pcl(只是一个猜测),尽管您可能只需要检查所有打印机之间的差异即可找到一种松散的指示方式。

无论如何,我可以相当有信心没有办法准确检查您想要的内容,因为没有关于您的规格的称为虚拟打印机的字段。

于 2018-03-06T08:48:27.710 回答