В другом посте (https://stackoverflow.com/a/30758129/6513653) relationed к этому, Скотт Чемберлен сказал: «Я не верю в .NET есть что-то, что можно сделать, вам нужно будет сделать собственный вызов ». После того, как попробовать все возможные ресурсы .NET, я думаю, что он прав. Итак, я начал исследовать, как диалог ADD PRINTER выполняет поиск. Используя Wireshark, я узнал, что ADD PRINTER отправляет по крайней мере два типа пакетов всем хостам в локальной сети: два запроса http/xml для порта 3911 и три запроса SNMP. Первый запрос SNMP - это получение следующего 1.3.6.1.2.1.43, которое является Printer-MIB. Второй - это получить 1.3.6.1.4.1.2699.1.2.1.2.1.1.3, который является pmPrinterIEEE1284DeviceId из PRINTER-PORT-MONITOR-MIB. Это больше всего интересует, потому что от ADD PRINTER берет имя принтера. Третий - это получить 1.3.6.1.2.1.1.1.0, который является sysDescr из системы SNMP MIB-2. Я действительно верю, что второго запроса SNMP достаточно, чтобы найти большинство сетевых принтеров в локальной сети, поэтому я сделал этот код. Он работает для Windows Form Application, и это зависит от SnmpSharpNet.
Редактировать: Я использую ARP Ping вместо обычного Ping для поиска активных хостов в сети.Ссылка на пример проекта: ListNetworks C# Project
ДоступенPrinterInfo в каком пространстве имен? Получение как Ошибка Тип или имя пространства имен «AvailablePrinterInfo» не удалось найти (вам не хватает директивы использования или ссылки на сборку – 2011-11-03 07:42:00