无法获取网络打印机的IP地址?

时间:2014-10-29 03:47:26

标签: c# printing .net-4.0 ip-address network-printers

我需要在笔记本电脑上找到已安装打印机的IP地址。我将笔记本电脑放在不同的位置和网络之间。每个网络都有自己的一组IP地址。笔记本电脑为每个位置安装了不同的打印机,所有连接都是无线连接。

在使用以下代码(.net 4.0)时,QueuePort.Name返回:

WSD-27e3f972-cdc7-459d-b0c1-20e8410fb1db.0032和

192.168.1.12_1

由于这些是网络打印机,我认为这些必须解析为真正的IP地址?

我哪里错了?或者,还有更好的方法? 非常感谢任何帮助。

 IEnumerable<Printer> GetLocalPrinters()
    {
        EnumeratedPrintQueueTypes[] enumerationFlags = { EnumeratedPrintQueueTypes.Local, EnumeratedPrintQueueTypes.Connections };
        LocalPrintServer printServer = new LocalPrintServer();

        var x = printServer.GetPrintQueues(enumerationFlags).Select(y =>
            new Printer
            {
                Fullname = y.FullName,          
                QueuePortName = y.QueuePort.Name,
                Location = y.Location
            })
            .OrderBy( z => z.QueuePortName);

        return x;

    }

2 个答案:

答案 0 :(得分:2)

portname不是IP地址。有时它们是相同的文本。

他们的答案似乎在这里: Determine the IP Address of a Printer in C#

2011年10月31日编辑:

查询WMI以获取打印机端口IP地址。

using System;
using System.Management;

namespace WMI_example_01
{
    class Program
    {
        static void Main(string[] args)
        {
            var scope = new ManagementScope(@"\\.\root\cimv2");
            var query = new ObjectQuery("SELECT * FROM win32_tcpipprinterport");
            var searcher = new ManagementObjectSearcher(scope, query);
            var collection = searcher.Get();

            foreach(var col in collection)
            {
                Console.WriteLine("Port name: {0}\tHostAddress: {1}", col["Name"], col"HostAddress"]);
            }
        }
    }
}

答案 1 :(得分:0)

打印队列具有一个相应的端口,该端口由端口监视器处理。

据我所知,端口监视器有多种(不仅是TCPMON和WSD等标准监视器,而且是定制的和特定于供应商的),没有通用的方法可以处理所有这些监视器。

根据提供的端口名称,我假设您正在处理WSD端口。在这里情况变得有些棘手,建议您阅读我的答案https://stackoverflow.com/a/63705944/4700228以获取解决方案。