Microsoft Print Spooler API - держать задание на печать? - PullRequest
0 голосов
/ 07 марта 2012

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

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

Ответы [ 2 ]

0 голосов
/ 31 мая 2012

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

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

Итак ...

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

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

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

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

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

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

...