2009-10-19 39 views
5

如何获取使用win32 API的端口名称为 的网络打印机的IP地址?如何使用Win32 API获取给定端口名称的网络打印机的IP地址?

我试图调查PRINTER_INFO_* structs,但它似乎并没有出现在那里。

+0

这可能吗?你如何才能通过端口号得到它。 – Shoban 2009-10-19 09:59:06

+1

好问题 - 也许你更清楚你的意思是端口名称? – Elemental 2009-10-19 10:18:30

+2

@Shoban:不是端口号,而是端口名称。 @Elemental:端口名称是在“打印机和传真”中配置打印机端口时需要提供的。您可以使用:: EnumPrinter win32获取所有打印机的端口名称API – 2009-10-19 11:51:34

回答

2

我不认为有一个标准的方式来获得IP地址。网络端口监视器可能存在不同的不兼容实现。对于我的网络打印机,IP地址是端口名称的一部分(例如,IP_192_168.1.104)。如果它是这种形式,那么你可能会解析它,但我不认为这是普遍的。

使用EnumPorts您可以确定它是否是网络打印机,但我仍然没有看到获取IP地址的方法。

+0

端口名称可以在创建后编辑,但不能保证“IP_192_168.1.104”实际上是192.168.1.104。您可以通过WMI获取端口名称的IP地址,WQL查询为“Select Name,HostAddress from Win32_TCPIPPrinterPort” – 2012-08-14 14:54:03

+1

正如Adrian所说,无法通过API获取此信息。唯一的方法是通过读取键值下的打印服务器上的注册表:HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet001 \ Control \ Print \ Monitors \ Standard TCP/IP Port \ Ports – 2013-02-07 16:22:46

2

与其他IP网络设备一样,打印机将具有IP地址(表示其以太网卡),并在特定端口上运行服务(识别响应打印机消息的程序)。这仅仅是网络化的东西,并没有与打印机特定的东西有关。

因此,只有端口,没有办法找到它的IP地址。所有其他打印机上的服务可能会听相同的端口。

假设您的意思是您有打印机的名称,您需要查询您的域的名称服务。该服务将网络地址映射为“符号”名称。

使用winsock2 API,我相信它是gethostbyname你需要的。这将通过名称检索打印机的主机信息。

+1

在此问题的上下文中,“端口”一词有多种含义。我不认为海报是指打印机服务正在监听的端口。 Windows通过名称和端口跟踪打印机(例如,端口可能是'LPT1:')。在较新版本的API中,端口名称很少需要。 – 2009-10-19 22:34:17

0

简单地使用高级打印机的API,动态调用

3

您可以通过PRINTER_INFO_2获取端口名称,从注册表中获取IP,路径为: HKEY_LOCAL_MACHINE \系统\ CurrentControlSet \控制\打印\显示器\标准TCP/IP端口\端口 “HostName”中的ip存储区

相关问题