【问题标题】:Get names of printers on printserver获取打印服务器上的打印机名称
【发布时间】:2015-02-05 14:09:56
【问题描述】:

我们有一个打印服务器和很多打印机。我们像这样访问它们:

\\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();

其实我只需要服务器上所有打印机的名称在一个字符串数组中,我什至不需要交互的对象,只需要所有打印机的名称作为字符串。那可能吗?怎么样?

提前感谢您的帮助!

【问题讨论】:

  • 看构造函数; new PrintServer(@"\\print-server-name");
  • 你好,亚历克斯。感谢您的回复。不幸的是,这个解决方案也只返回了本地打印机。
  • 我在这里找到了另一个带有示例的网站:link 但即使是那里的示例也包括这个循环:if (Convert.ToBoolean(Printers["Network"])) // ALL NETWORK PRINTERS. { cmbNetworkPrinters.Items.Add(Printers["Name"]); } ...只给了我本地打印机。这可能是某种政策限制吗?

标签: c# printing server names


【解决方案1】:

获取所有已安装的打印机

  foreach (string printer in PrinterSettings.InstalledPrinters)

使用 WMI Windows 管理规范

 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
}

【讨论】:

  • 你好侯赛因。谢谢你的建议。首先:new ManagementObjectSearcher(mos, query); 返回“无法从 System.Management.ManagementObjectSearcher 转换为字符串”,所以我首先将“mos”替换为“null”。然后这段代码也只返回了我本地机器上安装的打印机。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-22
相关资源
最近更新 更多