2

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

请注意,我没有打印机服务器。所有打印机都是基于 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,我会在我的计算机上安装打印机。

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

任何帮助表示赞赏。

4

2 回答 2

2

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

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

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

于 2013-06-06T13:49:37.740 回答
2

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

于 2013-06-06T17:31:13.060 回答