Как получить имя порта для задания печати в сценарии объединения принтеров

В окнах -> принтеры и устройства -> актуальная очередь печати есть (последний) столбец с именем Порт, как здесь

Когда пул принтеров включен, здесь отображается имя порта (для реального принтера), который печатается документом: первый c:\ports\p1, второй c:\ports\p2 (или port_2121 и port_2122 ... и т. Д.). Я хочу получить ту же информацию.

Я проверил Enumjobs и структуру JOB_INFO_1 - 4, ни один из них не имеет члена порта или имени порта. Я проверял, и pPrinterName всегда одинаково. Так что даже с той стороны это не доступно.

Любая идея, как я могу получить порт, где печатается работа? (как очередь печати)

Спасибо

2 ответа

Решение

Вы можете сделать это с помощью FindNextPrinterChangeNotification функция с JOB_NOTIFY_FIELD_PORT_NAME поле. Это значение можно изменить, когда пул принтеров включен и один порт занят

Название порта можно получить из структуры PRINTER_INFO_2. Структура JOB_INFO имеет поле с именем pPrinterName, вы можете использовать это поле для получения структуры PRINTER_INFO_2 принтера.

Вот пример: http://www.swissdelphicenter.ch/en/showcode.php?id=1909

А вот еще подробности о PRINTER_INFO_2:

https://msdn.microsoft.com/en-us/library/windows/desktop/dd162845(v=vs.85).aspx

Другие вопросы по тегам