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