2013-06-06 10 views
2

Я пытаюсь найти все принтеры в сети. Но у меня всегда были принтеры, которые уже подключены к моему компьютеру. Когда я пытаюсь добавить принтеры в Панель управления \ Оборудование и звук \ Устройства и принтеры, я мог бы найти еще много принтеров, доступных в сети.Получить все принтеры в сети - не только локальные принтеры

Обратите внимание, что у меня нет сервера печати. Все принтеры основаны на IP.

Я использовал следующий код:

WqlObjectQuery wQuery = new WqlObjectQuery("SELECT * FROM Win32_Printer Where " + 
    "Local = FALSE"); 
ManagementObjectSearcher res = new ManagementObjectSearcher(wQuery); 
if ((res.Get().Count > 0)) 
{ 
    foreach (ManagementObject printer in res.Get()) 
    { 
     Console.WriteLine(printer["PortName"] + " : " + printer["DriverName"] + 
      " : " + printer["Status"]); 
    } 
} 
else { Console.WriteLine("No printers found"); } 

В запросе, если установить локальную истину я получить принтеры, установленные на компьютере.

Я также пробовал с подобными вопросами здесь, но все равно не повезло.

Любая помощь приветствуется.

+0

Привет, я верю, что это решение: [ссылка] (http://stackoverflow.com/a/40569268/6513653) – ViniCoder

ответ

2

WMI не может перечислять сетевые принтеры, может только список общих принтеров, зарегистрированных на локальном компьютере. Для выполнения этой задачи вы можете использовать функции WinApi WNetEnumResource, WNetOpenEnum и WNetCloseEnum. Некоторое время назад я написал образец этого использования .Net Попробуйте эту статью Enumerating All Network resources using Delphi Prism, код использует язык Oxygene, но может быть легко переведен на C#.

+0

Большое спасибо RRUZ. Мне пришлось потратить некоторое время, чтобы заставить это работать. Конечно, с изменениями в соответствии с моей потребностью. Наконец я мог. –

2

Насколько я знаю, то, что вы ищете, находится вне возможностей WMI.

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

В противном случае я бы предложил использовать инструмент сетевого сопоставления, например ZenMap, или инструмент сетевого мониторинга, такой как Spiceworks (www.spiceworks.com), чтобы отпечатать ваши устройства.

+0

Кайл, Спасибо за ваш ответ. 1 до вас, так как вы заставили меня думать больше :) –

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