【问题标题】:Identify connected network printers by its IP address通过 IP 地址识别连接的网络打印机
【发布时间】:2017-07-21 08:16:46
【问题描述】:

我想列出所有连接到我的网络的打印机(包括未安装的)

通过 ping 网关上的所有地址,我可以设法将连接设备的所有 IP 地址获取到我的 PC。然后我通过

获得了主机名
IPHostEntry entry = Dns.GetHostEntry(ipAddress);
return entry.HostName;

我注意到打印机没有主机名。
现在我需要确定哪个 IP 属于我的 IP 列表或 MAC 地址的打印机。

我该怎么做。

当我们安装网络打印机时,Windows 会列出打印机的名称。我们可以使用IP或MAC获取这样的名称吗?

【问题讨论】:

    标签: c# printing dns


    【解决方案1】:

    包含 System.Management

    using System.Management;
    
    foreach (string printername in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
    {
        string query = string.Format("SELECT * from Win32_Printer WHERE Name LIKE '%{0}'", printername);
    
        using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query))
        using (ManagementObjectCollection coll = searcher.Get())
        {
            try
            {
                foreach (ManagementObject printer in coll)
                {
                    foreach (PropertyData property in printer.Properties)
                    {
                        Console.WriteLine(string.Format("{0}: {1}", property.Name, property.Value));
                    }
                }
            }
            catch (ManagementException ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }
    

    您将获得每台打印机的所有信息,包括名称和 IP

    如果您想从名称中获取打印机 IP,请使用

    If(printer.Properties.Caption.Contains("Printer name")
    {
        return printer.Properties.PortName;
    }
    

    否则,要从名字中获取ip,逆向搜索ip,返回名字。

    对于网络中的打印机,试试这个:

    using System.Management;
    
    private void Form1_Load(object sender, EventArgs e)
    {
        System.Management.ObjectQuery oquery = new System.Management.ObjectQuery("SELECT * FROM Win32_Printer");
        System.Management.ManagementObjectSearcher mosearcher = new
        System.Management.ManagementObjectSearcher(oquery);
        System.Management.ManagementObjectCollection moc =
        mosearcher.Get();
    
        foreach (ManagementObject mo in moc)
        {
            System.Management.PropertyDataCollection pdc = mo.Properties;
            foreach (System.Management.PropertyData pd in pdc)
            {
                if ((bool)mo["Network"])
                {
                    MessageBox.Show(String.Format("{1}", mo[pd.Name]));
                }
            }
        }
    }
    
    
    
    
    // To list printers installed on computer online/offline
    Code Snippet
    foreach (string printer in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
    {
        MessageBox.Show(printer);
    }
    

    【讨论】:

    • 感谢您的帮助。但这仅提供已安装的打印机。我需要得到所有的打印机。而且我也不知道打印机名称。
    • 您还需要查看哪些其他打印机?从问题中不清楚
    • 我想识别连接到本地网络的所有打印机
    • @mhs 更新了答案。如果解决了请标记答案。
    • 感谢您的努力(为此而努力)。但是“InstalledPrinters”显然给出了已安装的打印机。我也需要未安装的打印机。此解决方案可用于获取已安装的网络打印机。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 2014-05-25
    • 1970-01-01
    • 2020-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多