2015-02-05 166 views
0

我們有一臺打印服務器和大量的打印機。我們像這樣訪問它們:獲取打印服務器上的打印機名稱

\\print-server-name\printer1 
\\print-server-name\printer1_color 
\\print-server-name\printer2 

...等等。

我現在需要該服務器上所有打印機的列表。到目前爲止,我只能找到機器上本地安裝的所有打印機。我發現這給了我只有本地打印機藏漢此而谷歌搜索:

PrintServer lps = new PrintServer(); 
PrintQueueCollection prQueue = lps.GetPrintQueues(new[] { EnumeratedPrintQueueTypes.Connections }); 
liServerPrinterNames = (from printer in prQueue select printer).ToList(); 

其實我只需要在一個字符串數組服務器上所有打印機的名字,我甚至都不需要互動的對象,只有所有打印機的名稱都是字符串。那可能嗎?怎麼樣?

感謝您提前提供任何幫助!

+1

看看構造函數; '新的PrintServer(@「\\ print-server-name」);' – 2015-02-05 14:24:59

+0

你好Alex。感謝您的回覆。不幸的是,這個解決方案只返回本地打印機。 – Kai 2015-02-05 14:57:28

+0

我在這裏找到了另一個帶有示例的網站:[link](http://www.encodedna.com/2013/04/show-printers-using-wmi.htm) 但是即使是包含此循環的示例: 'if(Convert.ToBoolean(Printers [「Network」]))//所有網絡打印機。 { cmbNetworkPrinters.Items.Add(Printers [「Name」]); }' ......只給了我本地打印機。這可能是某種政策限制嗎? – Kai 2015-02-12 14:32:38

回答

0

獲取所有InstalledPrinters

foreach (string printer in PrinterSettings.InstalledPrinters) 

使用WMI的Windows Management Instrumentation

SelectQuery query = new SelectQuery("SELECT * FROM Win32_Printer"); 
    ManagementObjectSearcher mos= new ManagementObjectSearcher(mos, query); 
    System.Management.ManagementObjectCollection moc= mos.Get(); 
    foreach (ManagementObject Printers in moc) 
     Printers["Name"];    //GetPrinterName 
} 
+0

你好侯賽因。感謝您的建議。 首先: 'new ManagementObjectSearcher(mos,query);' 返回「無法從System.Management.ManagementObjectSearcher轉換爲字符串」,所以我首先用「null」替換了「mos」。 然後這段代碼也只返回本地機器上安裝的打印機。 – Kai 2015-02-05 15:06:53