【问题标题】:Fetch all printers available in the network - not just local printers获取网络中所有可用的打印机——不仅仅是本地打印机
【发布时间】:2013-06-02 10:12:15
【问题描述】:

我一直在尝试查找网络中的所有打印机。但是,我总是找到已经与我的计算机连接的打印机。当我尝试在 控制面板\硬件和声音\设备和打印机,我可以在网络中找到更多可用的打印机。

请注意,我没有打印机服务器。所有打印机都是基于 IP 的。

我使用了以下代码:

WqlObjectQuery wQuery = new WqlObjectQuery("SELECT * FROM Win32_Printer Where " +
    "Local = FALSE");
ManagementObjectSearcher res = new ManagementObjectSearcher(wQuery);
if ((res.Get().Count > 0))
{
    foreach (ManagementObject printer in res.Get())
    {
        Console.WriteLine(printer["PortName"] + " : " + printer["DriverName"] +
            " : " + printer["Status"]);
    }
}
else { Console.WriteLine("No printers found"); }

在查询中,如果我将 local 设置为 true,我会在我的计算机上安装打印机。

我也在这里尝试过类似的问题,但仍然没有运气。

任何帮助表示赞赏。

【问题讨论】:

  • 嗨,我相信这是解决方案:link

标签: c# winforms printing wmi network-printers


【解决方案1】:

据我所知,您要查找的内容超出了 WMI 的能力范围。

我知道您没有打印服务器,但如果所有打印机都至少连接到其他机器,那么一个快速的解决方法可能是使用PSExec 在您网络上的所有计算机上本地运行您的打印机查找脚本(或者可能是登录脚本)。您可以简单地将打印机查找脚本写入网络共享,然后在执行完成后查看信息。

否则,我会建议使用网络映射工具(如 ZenMap)或网络监控工具(如 Spiceworks (www.spiceworks.com))对您的设备进行指纹识别。

【讨论】:

  • 凯尔,感谢您的回复。 1 为你加油,因为你让我想得更多 :)
【解决方案2】:

WMI 不能枚举网络打印机,只能列出在本地机器上注册的共享打印机。对于此任务,您可以使用 WNetEnumResourceWNetOpenEnumWNetCloseEnum WinApi 函数。前段时间,我使用 .Net 编写了一个示例 试试这篇文章Enumerating All Network resources using Delphi Prism,代码使用Oxygene语言但可以很容易地翻译成C#。

【讨论】:

  • 非常感谢 RRUZ。我不得不花一些时间来完成这项工作。当然可以根据我的需要进行修改。终于可以了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多