我需要在笔记本电脑上找到已安装打印机的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;
}
答案 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以获取解决方案。