Как получить только реальные физические принтеры в .NET?
Коллекция System.Printing.LocalPrintServer().GetPrintQueues(), судя по дебагу, возвращает все доступные устройства вывода, включая сканеры.
Существует ли способ выбрать из этой коллекции только те устройства, которые физически выводят данные на бумагу?
Я изучил все опции PrintQueue, но пока не нашел свойства, по которому можно определить тип устройства. Пока в голову приходит только эвристический подход: составить список наименований дефолтных устройств (PrintQueue.Name) и не включать их в новую коллекцию. Но это не будет работать с теми же сканерами.
В том-то и дело, что нет, но может им это и не надо :)
Видимо, когда ты делаешь софт, заточенный для работы с определенным типом выводящих устройств, правильным выбором будет создать внутреннюю коллекцию таких устройств на уровне приложения и предлагать пользователю самостоятельно добавить туда нужные устройства...
romaro А в чём заключается заточенность софта под определённые устройства?
Если вам нужно работать с устройством на низком уровне, тогда всё равно вам высокоуровневые виндовые API не особо интересны, а если не нужно - тогда зачем эти искуственные ограничения?
Виртуальные принтеры они тем и удобны, что я могу распечатать в PDF в любом софте, который умеет печатать, и никто мне этого не запретит. Также например и с сетевыми дисками - если приложение просто читает файлы с диска, без особых требований к производительности/надёжности, ему ни к чему совать нос и выяснять, на каком носителе находится том с файлом.
Станислав Макаров, тут требование адаптера, который работает с драйвером принтера. Чтобы отправить задание в драйвер через dll адаптера, нужно указать имя самого драйвера. А драйвер при установке называет себя моделью принтера. Ну а моделей полсотни. Поэтому без помощи пользователя не обойтись. Просто не хотел выводить для него лишние устройства.