Delphi 多台打印机

Delphi with multi printer

我的应用程序需要在 3 台打印机上打印
我将打印机名称保存在一个 txt 文件中 问题是当用户断开并重新连接打印机(USB 打印机) 它需要一个新名称或花药名称,并且打印会混淆。

如果名称更改,我如何 select 打印机?

我在使用 USB 摄像头时遇到了同样的问题。一旦设备移动到另一个 USB 端口,他们也倾向于为 windows 下的设备创建另一个 instance/entry 并附加一个编号(例如:Epson Blah Blah #1)。

答案很可能就在设备描述符中。更具体地说,是设备的 HardwareID。

要快速查看设备的硬件 ID,请转到“控制面板”>“设备管理器”(如果是 Win7 或更高版本),然后右键单击设备,无论它是 USB 闪存驱动器还是 USB 摄像头。单击属性并转到 "Details" 选项卡。将 "Property" 值更改为 "Hardware Ids"。您将看到 HardwareIDs

您可以在此处找到更多相关信息: https://msdn.microsoft.com/en-us/library/windows/hardware/ff539283%28v=vs.85%29.aspx

和:

https://msdn.microsoft.com/en-us/library/windows/hardware/jj649944%28v=vs.85%29.aspx

后者谈到了注册表项,您还可以在其中找到设备的信息。关键是:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses\ HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\\\设备参数 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB

因此,如果您可以 link 打印机的硬件 ID,那么您将能够枚举已安装的打印机,然后与 select 您想要的打印机进行比较。因此,您最初将安装一台打印机,并让您的应用程序 select 该打印机并保存其 HardwareID。然后,每次 PC 上的设备发生变化时,您都可以获得与最初安装的打印机相关的设备。

我还没有对此进行测试,因为我目前没有两个完全相同的设备来确保它们没有相同的硬件 ID。