获取打印服务器上的打印机名称
问题描述:
我们有一台打印服务器和大量的打印机。我们像这样访问它们:获取打印服务器上的打印机名称
\\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();
其实我只需要在一个字符串数组服务器上所有打印机的名字,我甚至都不需要互动的对象,只有所有打印机的名称都是字符串。那可能吗?怎么样?
感谢您提前提供任何帮助!
答
获取所有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
看看构造函数; '新的PrintServer(@“\\ print-server-name”);' – 2015-02-05 14:24:59
你好Alex。感谢您的回复。不幸的是,这个解决方案只返回本地打印机。 – Kai 2015-02-05 14:57:28
我在这里找到了另一个带有示例的网站:[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