Когда задание печатается, последнее задание имеет статус JOB_STATUS_PAUSED вместо JOB_STATUS_PRINTED.

Я опрашиваю очередь принтера при любых изменениях, таких как JOB_CHANGE, и если я вижу, что какое-то задание исчезло, я сообщаю серверу, что задание было напечатано или удалено, в соответствии с последним статусом задания.

Проблема в том, что принтер Kyocera M3550 возвращает как последний статус JOB_STATUS_PAUSED, но не JOB_STATUS_DELETED или JOB_STATUS_PRINTED.

Вот уставы, которые я получаю в порядке возрастания:

  • JOB_STATUS_SPOOLING
  • 0 (что не соответствует ни одному известному статусу)
  • JOB_STATUS_PASUED

Что это значит? Я не могу передать JOB_STATUS_PASUED как мой последний статус, потому что возможно, что кто-то преднамеренно создал это.


person SyndicatorBBB    schedule 21.03.2018    source источник
comment
Возможно, у принтера есть собственный процессор печати, который приостанавливает выполнение заданий перед их удалением. Разве вы не можете пойти по тому факту, что задание исчезает, что оно было удалено?   -  person Carey Gregory    schedule 21.03.2018
comment
@CareyGregory Это хорошая идея. Проблема в том, что мне нужно знать точный документ, который был удален, и эта информация не существует для PRINTER_CHANGE_DELETE_JOB.   -  person SyndicatorBBB    schedule 22.03.2018
comment
Вы можете запросить почти что угодно о задании на печать с помощью GetJob, если вы вызываете его до того, как задание будет удалено.   -  person Carey Gregory    schedule 22.03.2018
comment
Да, хорошая идея. Это мне очень помогло ! Не могли бы вы дать ответ, чтобы я мог выбрать его как принятый?   -  person SyndicatorBBB    schedule 23.03.2018
comment
Какой драйвер вы использовали? Я хотел бы проверить это. Ваше здоровье.   -  person Nick Westgate    schedule 25.03.2018
comment
Я протестировал пару драйверов Kyocera. У них нет пользовательских PP, и статусы, которые я видел, нормальные (заканчивается на «Удалено», «Напечатано» и т. д.). Я думаю, что проблема заключается в коде OP, который опрашивает очередь принтера, не используя FindFirst/NextPrinterChangeNotification или используя его неправильно.   -  person Nick Westgate    schedule 26.03.2018
comment
@NickWestgate Привет, Ник, извини за задержку. Я пришлю вам водителя позже сегодня, я не помню имя. Это не правильно. Я использую FindFirstPrinterChangeNotification и FindNextPrinterChangeNotification и использую их правильно. Я не уверен, как вы это проверяли, но недостаточно просто установить драйвер, вы также должны настроить принтер на приостановку любого задания, которое он получает. Убедитесь, что вы сначала это сделаете, а затем протестируйте.   -  person SyndicatorBBB    schedule 26.03.2018
comment
@NickWestgate Как я и обещал, имя драйвера — Kyocera ECOSYS M3550idn KX. Напоминаю, что это также связано с конфигурацией принтера. Спасибо вам за помощь!   -  person SyndicatorBBB    schedule 26.03.2018
comment
Как те, что здесь? Сегодня я попробовал V4 и KX без проблем. Когда вы говорите настроить принтер для приостановки любого задания, вы имеете в виду принтер, драйвер или очередь печати? (Очевидно, что у меня нет физического принтера.) У меня есть программа, которая приостанавливает работу. Этого достаточно? Поскольку Кэри уже ответил, не стесняйтесь обращаться ко мне по электронной почте и т. д.   -  person Nick Westgate    schedule 26.03.2018
comment
@NickWestgate В моей среде есть сервер печати, и это устройство настроено (с использованием указанного вами программного обеспечения) на приостановку любого нового задания. Затем, если я действительно хочу распечатать документ, я подхожу к принтеру, ввожу свой пароль, выбираю один из ожидающих документов и выбираю печать. Без проблем. Вы также можете связаться со мной по электронной почте, если вам нужна помощь, чтобы воспроизвести его.   -  person SyndicatorBBB    schedule 26.03.2018
comment
В вашем сетевом профиле нет контактных данных (в моем есть), и поиск по вашему дескриптору находит только учетные записи Stack Exchange (погуглите меня — я не борец — следите за моим изображением SE, чтобы найти меня в Твиттере).   -  person Nick Westgate    schedule 26.03.2018


Ответы (1)


Возможно, принтер Kyocera имеет собственный процессор печати, который переводит задания на печать в состояние паузы перед их удалением. В этом случае вы все равно можете определить удаление по факту исчезновения задания. Очевидно, вам придется вести список текущих заданий на печать, чтобы таким образом обнаруживать удаления.

При первом появлении задания на печать следует вызвать GetJob функция с параметром Level, установленным на 2, и передать JOB_INFO_2, которую необходимо заполнить. Структура JOB_INFO_2 предоставит всю доступную информацию о задании на печать.

person Carey Gregory    schedule 23.03.2018
comment
И последнее, вы имеете в виду, что я должен использовать опрос, вызывающий функцию GeJob, и продолжать следить за заданиями? Потому что когда работа удаляется, у меня нет информации о ней (даже не JobId). - person SyndicatorBBB; 23.03.2018
comment
@SyndicatorBBB Ну, вам понадобится какой-то способ обнаружить, что задание исчезло. Когда вы получите уведомление о создании задания, вы можете вызвать GetJob, чтобы получить необходимую информацию, а затем сохранить ее в списке, который будет использоваться позже, если задание исчезнет без уведомления об удалении. - person Carey Gregory; 23.03.2018
comment
Ладно, думаю, мне нужно еще немного с этим поработать. Я боялся, что после удаления задания я не смогу получить информацию об этом задании с помощью GetJob, потому что задание уже было удалено. - person SyndicatorBBB; 24.03.2018
comment
@SyndicatorBBB Вы не будете. Как только задание удалено, оно пропало, и вы не можете ничего о нем узнать. Вы должны сделать этот запрос заранее и сохранить необходимую информацию. - person Carey Gregory; 24.03.2018