【发布时间】:2014-10-29 19:18:24
【问题描述】:
(我已经在 Google 上搜索了几天。运气不好。商业机密?)
我有一台自行安装打印机的笔记本电脑(佳能 MF4500w 系列)。膝上型电脑通过空气与打印机通信。打印机本身直接连接到路由器,打印机没有使用静态 IP 地址。路由器将ip地址分配给打印机。
在我的笔记本电脑中,它们不是打印机的注册表项
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports
但是,Canon MFNP Port 有一个端口入口:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Canon MFNP Port\Ports
of CNMFNP_001E8FB0726C
此注册表项显示:
IPFixed REG_DWORD 0x000000000 (0)
PrinterPort REG-DWORD 0x0000238c (9100)
Protocol REG_DWORD 0x00000001 (1)
TargetAddress REG_DWORD 0x390b000a (957022218)
TargetMAC REG_SZ 00-1E-8F-B0-72-6C
TargetPort REG_DWORD 0x0000021a2 (8610)
我的猜测是打印机驱动程序本身配备了通过注册表中的信息搜索联网打印机的能力。
是否有一个 windows 函数(最好在 C# 中)可以执行相同的功能并返回此注册表项中给定的打印机的当前 IP 地址?
非常感谢任何帮助。谢谢。
【问题讨论】:
-
我认为不太可能有一个通用的解决方案;没有明显的理由为什么 Windows 会关心打印机的 IP 地址是什么,即使假设它有一个。您需要分别处理每种类型的打印监视器。在这种情况下,您已经获得了 MAC,那么也许有办法对其进行反向查找?
-
@HarryJohnston 如果我进入 Windows 打印机 --> 端口 --> 配置端口。 Windows 确实报告了 10.0.11.57 的 IP 地址。这可以在代码中复制吗?
-
我认为正在由第三方打印监视器显示。但我可能错了,希望专家能在这里提供帮助。
-
@HarryJohnston 我能想到的最好办法是使用 LocalPrintServer() 来获取队列驱动程序名称。然后手动创建一个 xml 文件以将打印机的可能 MAC 与驱动程序相匹配。然后 arp -a 可以将 MAC 与 IP 地址匹配。有人有更好的主意吗?
标签: c# windows sockets printing