Microsoft Print Spooler API - держать задание на печать?

Кто-нибудь знает, возможно ли выполнить задание на печать с помощью Microsoft Print Spooler API?

Я хотел бы держать его, прежде чем он будет отправлен на принтер.
Это возможно?

2 ответа

Если вы используете AddJobW() и ScheduleJob (), тогда да.

AddJobW() создает задание, а ScheduleJob () запускает его. (Пример кода см. Здесь.)

Так...

  1. Вызовите AddJobW(), чтобы создать работу.
  2. Вызовите SetJobW (), чтобы переименовать каждое задание, связать их вместе (пакетирование) и т. Д.
  3. Вызовите ScheduleJob (), чтобы начать работу.

Это зависит от того, насколько вы контролируете процесс печати. Команда SetJob позволяет приостановить отдельное задание, но вам нужно будет войти до того, как какие-либо данные будут потенциально отправлены через порт на принтер.

Когда приложение печатает задание, обычный путь печати выглядит примерно так

  • StartDocPrinter
  • StartPagePrinter
  • WritePrinter
  • ....
  • EndPagePrinter
  • ...
  • EndDocPrinter

Если вы можете получить команду SetJob перед первым путем WritePrinter, вы сможете приостановить задание до отправки любых данных на устройство.

К сожалению, если вы используете что-то вроде класса C# PrintDocument, это скрывает большую часть этого и не предоставляет какого-либо способа получить параметр JobId и дескриптор принтера, которые вам понадобятся для вызова команды SetJob.

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