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

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

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


person Bjorn Svensson    schedule 07.03.2012    source источник
comment
System.Printing.PrintQueue.Pause() — это то, что вы получили. Вам придется смириться с этим.   -  person Hans Passant    schedule 03.04.2012


Ответы (2)


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

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

  • Стартдокпринтер
  • Стартовая страницапринтер
  • ЗаписьПринтер
  • ....
  • EndPagePrinter
  • ...
  • EndDocPrinter

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

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

person BBoy    schedule 02.04.2012

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

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

So...

  1. Вызовите AddJobW() для создания заданий.
  2. Вызовите SetJobW(), чтобы переименовать каждое задание, связать их вместе (пакетная обработка) и т. д.
  3. Вызовите ScheduleJob(), чтобы запустить задание(я).
person Peter Thönell    schedule 31.05.2012