2013-11-11 4 views
3

Я хочу найти, сколько принтеров доступно в сети. Я проверил свойство Installed printer и дал мне список тех принтеров, которые установлены в моей системе.Как получить принтеры из сети, которые не установлены в моей системе?

У меня в моей сети более двух принтеров, где только один отображается в списке, потому что он установлен в моей системе.

Как получить список всех принтеров из сети, драйвер которых не установлен в моей системе или не подключен к моей системе.

ответ

4

Я знаю, что это сообщение довольно старое, но я боролся с той же проблемой.

я в конце концов удалось решить, и я надеюсь, что приведенный ниже код поможет кому-то:

 using(var ds = new DirectorySearcher()) 
     { 
      ds.SearchRoot = new DirectoryEntry(""); 
      ds.Filter = "(|(&(objectCategory=printQueue)(name=*)))"; 

      ds.PropertiesToLoad.Add("printername"); 
      ds.PropertiesToLoad.Add("portname"); 
      ds.PropertiesToLoad.Add("servername"); 
      ds.PropertiesToLoad.Add("cn"); 
      ds.PropertiesToLoad.Add("name"); 
      ds.PropertiesToLoad.Add("printsharename"); 
      ds.ReferralChasing = ReferralChasingOption.None; 
      ds.Sort = new SortOption("name", SortDirection.Descending); 

      using(var src = ds.FindAll()) 
      { 
       foreach(SearchResult sr in src) 
       { 
        Console.WriteLine("------------------------------------"); 
        Console.WriteLine(sr.GetDirectoryEntry().Name); 
        foreach (DictionaryEntry p in sr.Properties) 
        { 
         var propName = p.Key; 
         var propCollection = (ResultPropertyValueCollection)p.Value; 
         var propValue = propCollection.Count > 0 ? propCollection[0] : ""; 
         Console.WriteLine(propName); 
         Console.WriteLine(propValue); 
        } 
        Console.WriteLine("------------------------------------");       

       } 

      } 

     } 

Если вы хотите вернуть все свойства, чтобы увидеть то, что доступно, то просто закомментируйте ds.PropertiesToLoad линии, и что будет дайте полный список.

0

попробуйте это.

System.Management.ManagementScope objMS = 
     new System.Management.ManagementScope(ManagementPath.DefaultPath); 
    objMS.Connect(); 

    SelectQuery objQuery = new SelectQuery("SELECT * FROM Win32_Printer"); 
    ManagementObjectSearcher objMOS = new ManagementObjectSearcher(objMS, objQuery); 
    System.Management.ManagementObjectCollection objMOC = objMOS.Get(); 
    foreach (ManagementObject Printers in objMOC) 
    { 
     if (Convert.ToBoolean(Printers["Local"]))  // LOCAL PRINTERS. 
     { 
      cmbLocalPrinters.Items.Add(Printers["Name"]); 
     } 
     if (Convert.ToBoolean(Printers["Network"]))  // ALL NETWORK PRINTERS. 
     { 
      cmbNetworkPrinters.Items.Add(Printers["Name"]); 
     } 
    } 
} 
+0

Я использовал это, но предоставляю мне только установленный принтер в своей системе. if (Convert.ToBoolean (Принтеры ["Сеть"])) {} // ВСЕ СЕТЕВЫЕ ПРИНТЕРЫ. Это условие не оправдалось. У меня три принтера в mysystem, и из них один из них установлен в моей системе, а другие нет. Теперь я хочу еще двух в этом списке. Как я могу это сделать? – Jankya

+0

вы не можете печатать на принтере, если он не установлен в ваших системах. – Anand

+0

Даже окна не будут загружать имя принтера в список принтеров, если он не установлен. – Anand

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