PrintQueue或PrintTicket是否有任何属性或方法来确定所选的打印机是虚拟打印机?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PrintQueue或PrintTicket是否有任何属性或方法来确定所选的打印机是虚拟打印机?相关的知识,希望对你有一定的参考价值。

PrintQueue或PrintTicket是否有任何属性或方法来确定所选的打印机是虚拟打印机?例如,该过程应限制M / S Xps文档编写器,传真,发送到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
        }
    }
答案

您将需要探测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字段的postscript或pcl(只是一个猜测),虽然你可能只需要检查所有打印机之间的差异,找到一个松散的指示方式。

在任何情况下,我都相当自信没有办法确切地检查你想要什么,因为没有关于你的规格的虚拟打印机字段。

以上是关于PrintQueue或PrintTicket是否有任何属性或方法来确定所选的打印机是虚拟打印机?的主要内容,如果未能解决你的问题,请参考以下文章

将 PrintQueue 对象从一台计算机发送到另一台计算机?

System.Printing.PrintQueue QueueStatus 未更新

C# PrintQueue AddJob printingHandle 抛出空异常

'UInt32 System.Printing.PrintQueue.GetDpiX(System.Printing.ILegacyDevice)问题解决方法

设置打印纸张

如何确定安装打印机的服务器