获取网络中所有可用的打印机,而不仅仅是本地打印机

本文关键字:打印机 不仅仅是 网络 获取 | 更新日期: 2023-09-27 18:17:08

我一直在试图找到网络上所有的打印机。但是,我最后总是使用已经连接到电脑上的打印机。当我尝试添加打印机时控制面板'硬件和声音'设备和打印机,我可以在网络中找到更多可用的打印机。

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

我也尝试了类似的问题,但仍然没有运气。

感谢您的帮助。

获取网络中所有可用的打印机,而不仅仅是本地打印机

WMI不能枚举网络打印机,只能列出在本地机器中注册的共享打印机。要完成此任务,可以使用WNetEnumResource、WNetOpenEnum和WNetCloseEnum WinApi函数。不久前,我用。net编写了一个示例试试这篇文章的Enumerating All Network resources using Delphi Prism,代码使用Oxygene语言,但可以很容易地翻译成c#。

据我所知,你正在寻找的是WMI的能力之外。

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

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

相关文章: