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

C# 获取网络中所有可用的打印机,而不仅仅是本地打印机,c#,winforms,printing,wmi,network-printers,C#,Winforms,Printing,Wmi,Network Printers,我一直在尝试查找网络中的所有打印机。但是,我总是使用已经与我的计算机连接的打印机。当我尝试在添加打印机时 控制面板\硬件和声音\设备和打印机,我可以在网络中找到更多可用的打印机 请注意,我没有打印机服务器。所有打印机都是基于IP的 我使用了以下代码: WqlObjectQuery wQuery = new WqlObjectQuery("SELECT * FROM Win32_Printer Where " + "Local = FALSE"); ManagementObjectSear

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

请注意,我没有打印机服务器。所有打印机都是基于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的功能范围内

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


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

据我所知,您所寻找的不在WMI的功能范围内

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


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

WMI无法枚举网络打印机,只能列出在本地计算机中注册的共享打印机。要执行此任务,可以使用、和WinApi函数。不久前,我使用.Net编写了一个示例
试试这篇文章,代码使用了Oxygene语言,但是可以很容易地翻译成C。

WMI不能枚举网络打印机,只能列出在本地机器上注册的共享打印机。要执行此任务,可以使用、和WinApi函数。不久前,我使用.Net编写了一个示例
试试这篇文章,代码使用了Oxygene语言,但是可以很容易地翻译成C语言。

Kyle,谢谢你的回复。你让我想得更多,我为你高兴:)凯尔,谢谢你的回答。谢谢你,因为你让我想得更多:)谢谢你。我不得不花一些时间来让它工作。当然可以,可以根据我的需要修改。终于可以了。非常感谢你。我不得不花一些时间来让它工作。当然可以,可以根据我的需要修改。最后我可以了。嗨,我相信这就是解决方案:嗨,我相信这就是解决方案: