Проверка состояния PrintJob (термический) - PullRequest
0 голосов
/ 03 ноября 2018

Я видел этот вопрос , который был закрыт как дубликат для этого вопроса. Если только я не неправильно понял ответы, ни один из вопросов не имеет для меня правильного решения.

Я пытаюсь создать печать в стиле POS. Мои требования кажутся простыми.

  1. Отправить на термопринтер (RawPrinterHelper)
  2. Подтвердить успех задания на печать (?)
  3. Отправка на резервный принтер в случае сбоя или слишком долгой очереди. (RawPrinterHelper)

Для первого и третьего пунктов я прибегнул к RawPrinterHelper . Это прекрасно работает, но SendStringToPrinter всегда будет возвращать true, пока принтер установлен. Даже если принтер настроен неправильно и никогда не сможет завершить задание на печать. Я не думаю, что могу использовать RawPrinterHelper для проверки.

Вопросы, связанные выше, используют ManagementObjectSearcher на Win32_PrintJob, чтобы запрашивать информацию о заданиях на печать. Я также использовал ManagementEventWatcher на Win32_PrintJob для опроса новых и удаленных событий задания печати . Эти решения работают для проверки заданий печати в большинстве сценариев, но редко для термопринтеров (всего на страницы нельзя положиться). Опрос на информацию для проверки заданий на печать не кажется лучшим вариантом. Мне было легко пропустить тестовые страницы печати информации.

По этим причинам ManagementObjectSearcher и ManagementEventWatcher также не помогут мне.

Единственное твердое решение, которое я могу найти, это Дункан Эдвардс Джонс здесь . Спасибо, кстати, если вы столкнетесь с этим, я многому у вас научился. Дункан показывает, как использовать FindFirstPrinterChangeNotification для получения событий о статусе задания. Я проверил это, и я могу сказать, что это хорошо работает для проверки, если задание на печать было успешно напечатано, когда оно было удалено из очереди печати. ​​

Несмотря на то, что решение Duncans великолепно, мне нужно пройти через него и сделать его совместимым с x64 с моим проектом и, возможно, сделать немного больше обучения и понимания, чтобы внедрить его в c #.

Является ли метод Дункана с использованием FindFirstPrinterChangeNotification по-прежнему подходящим способом определения, успешно ли задание на печать покинуло очередь?

Часть меня чувствует, что я работаю слишком далеко во времени, и .NET должен найти решение этой проблемы сейчас.

Обновление: Для конечного пользователя будет требоваться, чтобы принтер был установлен и тестовая страница работала из окон. Я не буду поддерживать ничего, что Windows не распознает.

1 Ответ

0 голосов
/ 14 февраля 2019

Библиотека PrintQueueWatch сделана безопасной для x64 и установлена ​​на GitHub по адресу:

https://github.com/MerrionComputing/PrintQueueWatch

Однако, как отмечает Майкл Рэндалл, термопринтеры не всегда используют подсистему драйвера принтера Microsoft или API, поэтому в этом случае она может не работать.

...