Как получить имя порта для задания печати в сценарии объединения принтеров
В окнах -> принтеры и устройства -> актуальная очередь печати есть (последний) столбец с именем Порт, как здесь
Когда пул принтеров включен, здесь отображается имя порта (для реального принтера), который печатается документом: первый 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