在C#中确定打印机的IP地址

Mag*_*ndi 4 .net c# printing network-programming

我想使用C#(.NET 2.0)确定打印机的IP地址.我只有Windows操作系统中设置的打印机共享名称,格式如下\\PC Name\Printer Name.打印机是网络打印机,具有与PC不同的IP地址.有没有人有任何指针?

在此先感谢您的帮助.

问候,安迪.

Jay*_*Jay 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;
             }
Run Code Online (Sandbox Code Playgroud)


Pan*_*nos 5

检查这个问题:How to get Printer Info in C#.NET? 。我认为您必须PortName从 WMI 属性中获取该属性。


小智 5

我知道这是一篇过时的文章,但是我遇到了同样的问题,我可以获取打印机端口名称,但不能获取IP。以我为例,我不能依赖于端口名是IP_ [IP地址],而是找到了如何从端口名中获取实际IP的信息。

Windows将有关端口的信息存储在注册表中的

HKLM \ SYSTEM \ CurrentControlSet \ Control \ Print \ Monitors \ Standard TCP / IP Port \ Ports \ [端口名]

此项包含在端口配置页面中设置的值,包括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);
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢迈克尔。这是实际的答案,端口名称对于获取 IPAdress 来说并不可靠。我必须将代码更改为“String IP = (String)key.GetValue("HostName", String.Empty,RegistryValueOptions.DoNotExpandEnvironmentNames);”以满足我的要求。 (2认同)