2012-03-20 1 views
5

Может случиться так, что я должен написать что-то слишком сложное для этого и что нет никакого обычного способа сделать это, но:Как я могу перечислить все доступные драйверы принтера, такие как Мастер добавления принтеров в C#?

Как я могу получить список всех доступных драйверов принтера, как и добавить принтер мастер делает, когда он отображает их изготовителем, а затем принтером? Я в основном нужен пользовательский диалог добавления принтера и без этого, я немного фаршированного;)

Как это: (игнорировать стрелку, заимствованные изображение)

enter image description here

Я хотел бы также необходим путь в файл .inf, обозначенного драйвера в списке

EDIT: немного предыстория:

Я пытаюсь добавить принтер с помощью вызова мастера добавления принтера (с повышенным privs) в сеансе служб терминалов, добавив, при до правильного порта TS, а затем попытаться сохранить информацию для этого принтера, чтобы при входе пользовательский принтер автоматически добавлялся в зависимости от сохраненных мной значений.

До сих пор я не смог найти способ получить информацию о драйвере (предпочтительно фактический путь к файлу .inf для этого драйвера принтера, а затем я могу использовать PrintUI для установки принтера) после добавления принтер.

Как таковой, я прибегаю к настраиваемому диалоговому окну, соответствующему драйверу принтера. Поскольку инструмент используется только при первоначальной установке принтера, и только администраторы, я не возражаю, если у вас есть вторичный диалог, когда вы выбираете драйвер во второй раз, чтобы я мог сохранить информацию.

EDIT: Ориентация на Windows Server 2008 R2 (Win32_PrinterDriver не появляется на работе)

+0

Попробуйте разобрать все файлы inf в '% windir% \ inf'. Удачи :-) – rekire

+0

@rekire У меня было впечатление, что драйверы находились в% windir% \ System32 \ DriverStore \ FileRepository? Это неправильно? –

+0

@ DanielA.White хорошо, я бы не нуждался в нем, если бы мог получить информацию в другом месте, в основном я добавляю принтер через printui.dll, PrintUIEntry/il, который отображает мастер, и мне нужно затем реплицировать его при входе в систему - m пытается записать, какой драйвер используется принтером, чтобы снова добавить его при входе в систему. –

ответ

2

Вы можете запросить WMI для этой информации. Номер Win32_PrinterDriver class подробно описывает доступные свойства. Вы можете использовать классы в System.Management Namespace для выполнения запросов.

SelectQuery selectQuery = new SelectQuery("Win32_PrinterDriver"); 
ManagementObjectSearcher searcher = new ManagementObjectSearcher(selectQuery); 

foreach (ManagementObject printerDriver in searcher.Get()) 
{ 
    // Your code here. 
} 

Вы можете получить доступ к свойствам путем индексации к ним, т.е. .

Также см. WMI Queries раздел на MSDN.

+1

Это, похоже, дает мне очень небольшое количество принтеров, однако этого вполне достаточно, чтобы добиться того, чего я хочу, поскольку это, вероятно, список драйверов, которые используются установленными принтерами, и в то время, когда я его буду использовать, это сработает. –

Смежные вопросы