Имеет ли PrintQueue или PrintTicket какое-либо свойство или метод для определения того, что выбранный принтер является виртуальным принтером?

Имеет ли PrintQueue или PrintTicket какое-либо свойство или метод для определения того, что выбранный принтер является виртуальным принтером? Например, процесс должен ограничивать M/S Xps Document Writer, факс, отправку в OneNote, PDF Printer и т. Д. Только локальные принтеры должны быть отфильтрованы из 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
        }
    }

1 ответ

Вам нужно будет исследовать свойства в 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 поле для postscipt или pcl (только предположение), хотя вам, возможно, придется просто проверить разницу между всеми вашими принтерами, чтобы найти слабо показательный способ.

В любом случае я могу быть совершенно уверен, что нет способа точно проверить, что вы хотите, так как нет поля, называемого виртуальным принтером, в соответствии с вашими требованиями.

Другие вопросы по тегам