我想使用C#(.NET 2.0)确定打印机的IP地址。我只有Windows操作系统上设置的打印机共享名称,格式为\\PC Name\Printer Name
。打印机是网络打印机,具有与PC不同的IP地址。有没有人有任何指示?
提前感谢您的帮助。
问候,安迪。
答案 0 :(得分:8)
只需使用.Net Framework 4.0或更高版本添加另一个解决方案
Using System.Printing
var server = new PrintServer();
var queues = server.GetPrintQueues(new[] { EnumeratedPrintQueueTypes.Local, EnumeratedPrintQueueTypes.Connections });
foreach (var queue in queues)
{
string printerName = queue.Name;
string printerPort = queue.QueuePort.Name;
}
答案 1 :(得分:5)
我知道这是一篇旧帖子,但我遇到了同样的问题,我可以获得打印机端口名称,但不是IP。在我的情况下,我不能依赖端口名称IP_ [IP地址],但发现如何从端口名称获取实际的IP。
Windows在
下存储有关端口的信息HKLM \ SYSTEM \ CurrentControlSet \ Control \ Print \ Monitors \ Standard TCP / IP Port \ Ports \ [port name]
此键包含端口配置页面中设置的值,包括IP地址和端口号。
获取IP地址的快速C#示例
using Microsoft.Win32;
RegistryKey key = Registry.LocalMachine.OpenSubKey(@"System\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\" + printerPortName, RegistryKeyPermissionCheck.Default, System.Security.AccessControl.RegistryRights.QueryValues);
if (key != null)
{
String IP = (String)key.GetValue("IPAddress", String.Empty, RegistryValueOptions.DoNotExpandEnvironmentNames);
}
答案 2 :(得分:4)
检查此问题:How to get Printer Info in C#.NET?。我认为您必须从WMI属性中获取属性PortName
。
答案 3 :(得分:2)
使用WIN32_Printer类是不够的。它应该与Win32_TCPIPPrinterPort结合使用。
下面是应该有用的代码:
static void Main(string[] args)
{
var scope = new ManagementScope(@"\root\cimv2");
scope.Connect();
var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Printer");
var results = searcher.Get();
Console.WriteLine("Network printers list:");
foreach (var printer in results)
{
var portName = printer.Properties["PortName"].Value;
var searcher2 = new ManagementObjectSearcher("SELECT * FROM Win32_TCPIPPrinterPort where Name LIKE '" + portName + "'");
var results2 = searcher2.Get();
foreach (var printer2 in results2)
{
Console.WriteLine("Name:" + printer.Properties["Name"].Value);
//Console.WriteLine("PortName:" + portName);
Console.WriteLine("PortNumber:" + printer2.Properties["PortNumber"].Value);
Console.WriteLine("HostAddress:" + printer2.Properties["HostAddress"].Value);
}
Console.WriteLine();
}
Console.ReadLine();
}
答案 4 :(得分:1)
根据链接How to get Printer Info in .NET?(谢谢,Panos,我已经在查看链接!),我从Panos's回答了以下解决方案:
using System.Management;
...
string printerName = "YourPrinterName";
string query = string.Format("SELECT * from Win32_Printer WHERE Name LIKE '%{0}'", printerName);
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
ManagementObjectCollection coll = searcher.Get();
foreach (ManagementObject printer in coll)
{
string portName = printer["PortName"].ToString();
if(portName.StartsWith("IP_"))
{
Console.WriteLine(string.Format("Printer IP Address: {0}", portName.Substring(3)));
}
}
显然,这只有在打印机的端口名称以“IP_IPAddress”格式给出时才有效,我相信这是默认值。
答案 5 :(得分:0)
此打印机是否设置在具有Active Directory的网络中? 或者这是在你自己的本地网络上,只需一个开关,你的打印机插入它?
如果是前者,那么您应该能够根据“打印机名称”查询它。 This article show how to get c# .net to connect to the AD。但这需要您对网络中的AD服务器有所了解。
这个解决方案对我来说似乎有点长,但可能是一个很好的起点?