Come ottenere stampanti dalla rete che non è installato nel mio sistema?

Voglio cercare quante stampanti sono disponibili in rete. Ho controllato con la proprietà Installed printer e mi dà quella lista di stampanti che sono installate sul mio sistema.

Ho più di due stampanti nella mia rete in cui solo una mostra in lista perché è installata sul mio sistema.

Come ottenere tutti gli elenchi di stampanti dalla rete, i driver non sono installati sul mio sistema o non sono collegati al mio sistema.

So che questo post è piuttosto vecchio, ma ho combattuto con lo stesso problema.

Alla fine sono riuscito a risolverlo e spero che il codice sottostante aiuti qualcuno:

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("------------------------------------"); } } } 

Se vuoi restituire tutte le proprietà per vedere quali sono disponibili, commenta le righe ds.PropertiesToLoad e questo ti darà l’elenco completo.

prova questo.

  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"]); } } }