我一直试图找到网络中的所有打印机。但是,我总是最终得到已经与我的计算机连接的打印机。当我尝试添加打印机时 控制面板\硬件和声音\设备和打印机,我可以在网络中找到更多的打印机。
请注意,我没有打印机服务器。所有打印机都是基于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,我会在计算机上安装打印机。
我也尝试过类似的问题,但仍然没有运气。
任何帮助表示感谢。
答案 0 :(得分:2)
据我所知,你正在寻找的是WMI的能力之外。
我知道您没有打印服务器,但如果所有打印机至少都连接到其他计算机,那么快速解决方法可能是使用PSExec在您的所有计算机上本地运行打印机查找脚本网络(或者可能是登录脚本)。您可以简单地让打印机查找脚本写入网络共享,然后在执行完成后查看信息。
否则我建议使用像ZenMap这样的网络映射工具或像Spiceworks(www.spiceworks.com)这样的网络监控工具来指纹设备。
答案 1 :(得分:2)
WMI无法枚举网络打印机,只能列出本地计算机中注册的共享打印机。要完成此任务,您可以使用WNetEnumResource,WNetOpenEnum和WNetCloseEnum WinApi函数。前段时间我用.Net写了一个这样的例子
试试这篇文章Enumerating All Network resources using Delphi Prism
,代码使用Oxygene
语言,但可以轻松地翻译成C#。