我想用C#(.NET 2.0)来确定打印机的IP地址。我只有在Windows操作系统上设置的打印机共享名称,格式为 \\PC Name\Printer Name
. .打印机是网络打印机,与电脑的IP地址不同。谁有什么好办法?
提前感谢您的帮助。
Regards, Andy.
检查这个问题。如何在C#.NET中获取打印机信息?. 我认为你必须获得属性 PortName
从WMI属性。
只是在这里增加了一个使用.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;
}
我知道这是个老帖子,但我有同样的问题,我可以得到打印机端口名,但不能得到IP。在我的情况下,我不能依赖端口名是IP_[IP地址],而是找到了如何从端口名中获取实际IP的方法。
Windows将端口信息存储在注册表中的以下位置
HKLM/SYSTEM/CurrentControlSet/Control/Print/Monitors/Standard TCPIP Port/Ports/[port name]
这个键包含了在端口配置页面中设置的值,包括IP地址和端口号。
一个快速的C#例子来获取IP地址
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);
}
在这里使用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();
}
基于这个链接 如何在.NET中获取打印机信息? (谢谢,Panos,我已经在看链接了!),我有以下解决方案,来自于 帕诺斯 答案。
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 "的格式给出时,这才有效,我相信这是默认的。
这台打印机是设置在有活动目录的网络中吗?还是在你自己的本地网络中,只有一个交换机和你的打印机插在上面?
如果是前者,那么你应该可以根据 "打印机名称 "来查询它。本文展示了如何让c#.net连接到AD-------------------。. 但这确实需要对网络中的AD服务器有一定的了解。
这个解决方案对我来说似乎有点长,但可能是一个好的起点?