Я думаю, что SNMP - правильный подход. В большинстве принтеров реализован стандартный принтер MIB и RFC 1213 MIB , поэтому любое свойство, которое вы можете получить, будет независимым от модели. Например, если вы ищете серийный номер, ваше свойство, вероятно, prtGeneralSerialNumber 1.3.6.1.2.1.43.5.1.1.17
Для других свойств вам нужно будет искать в определенных MIB, например, в HP Laserjet MIB , у вас есть много таких вещей, как использование печатных носителей, печатные носители -симплекс-счет, количество печатных носителей-дуплекс, среднее использование тонера, количество использованных сканированных носителей, общее количество цветных страниц .....
Для использования SNMP наиболее расширенной библиотекой является Net-SNMP , но она использует API C, и я не рекомендую ее использовать в тяжелых многопоточных приложениях или при использовании SNMPv3. Существуют и другие библиотеки, такие как текст ссылки , которые выглядят очень многообещающе, но большинство надежных библиотек там коммерческие и не очень дешевые.
Все вышеперечисленное довольно легко реализовать, если принтер подключен к сети, теперь, если принтер подключен через USB или PPI , вам нужно получить доступ к прокси-агенту HP SNMP, вы можете найти Великий пост здесь .
В нем говорится, что в основном это небольшое программное обеспечение Windows, которое поддерживает стандартную службу Windows SNMP и предоставляет данные SNMP на принтере HP по умолчанию, подключенном к компьютеру через USB или параллельный кабель . Я не знаю, работает ли он с другими брендами, но похоже, что он использует стандартный протокол DOT4 через USB для эмуляции типичной связи TCP / IP. Если есть какой-либо стандартный способ подключения ко всем этим принтерам, этот вариант является наиболее перспективным.
Еще один метод, который я могу придумать, - это взломать отдельные драйверы каждой модели, чтобы увидеть, предоставляют ли они такую информацию (что, безусловно, делают), и сделать соответствующие обращения к ним, чтобы получить ее, но в этой задаче я думаю, что вы на свой собственный.
EDIT
Под взломом драйвера я подразумеваю реверс-инжиниринг, вероятно, инструментов каждого драйвера. Например, если у принтера есть утилита, показывающая состояние тонера, попытайтесь понять, как он работает, я бы начал использовать Зависит , чтобы открыть исполняемый файл и посмотреть, какие библиотеки он использует и какие методы они публикуют, если Вы найдете такой метод, как GetTonerStatus, в DLL, который стоит попробовать.
альтернативный текст http://www.dependencywalker.com/snapshot.png
Если инструмент написан на .Net, это намного проще, потому что у вас может быть доступ к исходному коду путем его декомпиляции (я не знаю о юридических проблемах этого метода). Используйте отражатель , чтобы сделать это, и вы увидите это ясно.
альтернативный текст http://corypeters.net/wp-content/uploads/netReflector.gif
Существует великая книга, которая освещает эти аспекты и называется Реверс: Секреты обратного инжиниринга
Как уже говорилось ранее, это долгий путь, но, вероятно, единственный, который позволяет достичь того, что вы хотите сделать, вы можете пересмотреть жизнеспособность проекта после небольшого изучения упомянутых мною тем.