打印机池场景下如何获取打印作业的端口名

How to get the port name of a print job in a printer pooling scenario

在 windows -> 打印机和设备 -> 实际打印队列中有(最后一个)名为端口 like here

的列

启用打印机池时,这会显示文档正在打印的端口名称(对于真实打印机),如第一个 c:\ports\p1、第二个 c:\ports\p2(或 port_2121 和 port_2122 ... 等等)。 我想获得相同的信息。

我检查了 Enumjobs 和 JOB_INFO_1 - 4 结构,它们都没有端口或端口名成员。 我测试过,pPrinterName 也总是一样的。所以即使从那边也无法访问它。

知道如何获取打印作业的端口吗? (就像打印队列一样)

感谢

您可以使用带有 JOB_NOTIFY_FIELD_PORT_NAME 字段的 FindNextPrinterChangeNotification 函数来做到这一点。当启用打印机池并且一个端口繁忙时可以更改此值