本地打印机驱动程序如何查找网络打印机

本文关键字:打印机 查找 网络 何查找 驱动程序 | 更新日期: 2023-09-27 18:28:30

(我已经在谷歌上搜索了好几天了。运气不好。商业秘密?)

我有一台自带打印机的笔记本电脑(佳能MF4500w系列)。笔记本电脑通过空气与打印机通信。打印机本身直接连接到路由器,打印机不使用静态ip地址。路由器将ip地址分配给打印机。

在我的笔记本电脑中,中没有打印机的注册表项

HKEY_LOCAL_MACHINE''SYSTEM''CurrentControlSet''Control''Print''Monitors''Standard TCP/IP Port''Ports

然而,佳能MFNP端口有一个端口条目:

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地址?

非常感谢您的帮助。谢谢

本地打印机驱动程序如何查找网络打印机

作为一名新手,我想发布我的发现,希望比我了解更多的人能够改进这个答案。(我希望这是本着SO的精神)。

这个问题的简单答案是:只有打印机驱动程序知道如何到达其目标设备。

答案很长:

  1. 打印必须是Windows操作系统中最薄弱、最不标准的部分之一
  2. win32_管理系统基于windows注册表中标准化条目的假设,这在第三方打印机应用程序中根本不会发生。因此,只有在已知第三方打印机是如何安装的情况下,才能使用win32_管理系统
  3. 一旦知道了第三方打印机是如何安装的,就可以很容易地为注册表创建一个特定的读取器来查找第三方打印程序使用的信息。但即使有了这些信息,它也可能是一个盲目的兔子洞,因为最终是打印机驱动程序知道如何处理这些信息
  4. 据我所知,打印机驱动程序之间没有标准化,可能只有打印机命令语言(通常称为PCL)例外
  5. 我确信windows的某个API中嵌入了PCL,但它似乎不容易通过.NET系统获得。它还需要知道命令所需的特定语法,这也是我(目前)不知道的信息。我对此的简短调查还表明,这需要知道打印机的IP地址,这是另一个兔子洞
  6. 也许除了打印机的MAC地址之外,系统中显然没有常量:6.1.显示的"Ip地址"窗口只是实际Ip地址的别名。我怀疑这是因为路由器可以在打开打印机时动态地重新设置IP地址。因此,软件可以"跟随"新的IP地址,并将该IP地址分配给别名IP address,该别名在端口描述中保持不变。6.2打印机队列(显示在Windows打印机和设备中的队列)可以由用户任意重命名。它不是一个常数。6.3"端口名称"可以由用户任意重命名。6.4给定的打印机驱动程序可以多次用于不同的设备。这里有一种一对多的关系。显然,设备驱动程序必须了解设备安装时建立的注册表位置和条目。(同样是第三方信息。)6.5即使是设备的MAC也可能在路由器级别被欺骗——所以这不是一个常数
  7. 由于最终,所有内容都可以任意设置,并且只有第三方打印机驱动程序了解在何处以及如何使用注册表信息,因此我能想到的最简单的解决方案是:7.1用目标设备的MAC标记打印机que(windows打印机和设备中的que)。7.2请勿更改目标设备的MAC。7.3使用arp-a(或其变体)在运行时获取设备的实际IP地址。这将提供IP地址到设备的实际映射

我希望专家能纠正这个答案!谢谢