Как программно получить все модели принтеров данного производителя в Windows?

Я пытаюсь перечислить модели принтеров данного производителя. Windows «Добавить принтер» каким-то образом может это сделать - т. Е. Когда производитель выбран в левом списке, список моделей принтеров отображается справа.

Я знаком с API EnumPrinters и EnumPrinterDrivers, но ни одна из связанных структур (PRINTER_INFO* и DRIVER_INFO*) не содержит моделей принтеров. DRIVER_INFO* действительно содержит название производителя, но я не знаю, где найти модели принтеров, которые поддерживает соответствующий драйвер.

Любые предложения и указатели на онлайн-документы будут оценены. Спасибо.


person bdristan    schedule 03.03.2017    source источник


Ответы (1)


EnumPrinterDrivers перечисляет только установленные драйверы принтеров. В диалоговом окне «Добавить принтер» отображаются доступные драйверы, включая еще не установленные встроенные драйверы.

Файлы встроенных драйверов находятся в Магазине драйверов< /а>. Например, если вы нажмете HP на левой панели, драйверы для HP 910 и 915 находятся в этой INF:

C:\Windows\System32\DriverStore\FileRepository\prnhp003.inf_amd64_4480210763997eb4\prnhp003.inf

Чтобы установить их, вы можете попробовать старый API установки или новый API установщика Windows.

Похоже, что общедоступного API для перечисления содержимого хранилища драйверов не существует, но инструмент командной строки DISM может. Он проанализирует все нужные папки и файлы INF (для входящих драйверов если вы укажете переключатель /all для /get-drivers), а затем вам просто нужно проанализировать вывод. Например.

Dism /online /get-drivers /all /format:list >drivers.txt

(Я предлагал DriverStore Explorer, но оказалось, что это всего лишь оболочка для Windows PnPUtil.exe, который не может перечислять входящие драйверы.)

person Nick Westgate    schedule 05.03.2017
comment
Спасибо за информацию. Теперь я могу видеть все встроенные модели драйверов/принтеров в файлах INF, расположенных в папках FileRepository\prn*. Хотелось бы, чтобы был API, который мог бы запрашивать эти файлы и возвращать список моделей принтеров, найденных в них. Я думаю, что смогу разобрать все файлы INF во всех папках prn*. Однако я не уверен, что все и только драйверы принтеров находятся в папках prn*. Знаете ли вы, есть ли какая-либо официальная документация по этому вопросу (например, соглашение об именах папок и т. д.)? Мне не нужно устанавливать драйвера. Мне просто нужен список моделей принтеров, сгруппированных по производителям. - person bdristan; 06.03.2017
comment
Я не могу найти общедоступный API, но отредактировал свой ответ, добавив несколько инструментов, которые могут перечислять хранилище драйверов. - person Nick Westgate; 06.03.2017