Microsoft Print Spooler API - держать задание на печать?
Кто-нибудь знает, возможно ли выполнить задание на печать с помощью Microsoft Print Spooler API?
Я хотел бы держать его, прежде чем он будет отправлен на принтер.
Это возможно?
2 ответа
Если вы используете AddJobW() и ScheduleJob (), тогда да.
AddJobW() создает задание, а ScheduleJob () запускает его. (Пример кода см. Здесь.)
Так...
- Вызовите AddJobW(), чтобы создать работу.
- Вызовите SetJobW (), чтобы переименовать каждое задание, связать их вместе (пакетирование) и т. Д.
- Вызовите ScheduleJob (), чтобы начать работу.
Это зависит от того, насколько вы контролируете процесс печати. Команда SetJob позволяет приостановить отдельное задание, но вам нужно будет войти до того, как какие-либо данные будут потенциально отправлены через порт на принтер.
Когда приложение печатает задание, обычный путь печати выглядит примерно так
- StartDocPrinter
- StartPagePrinter
- WritePrinter
- ....
- EndPagePrinter
- ...
- EndDocPrinter
Если вы можете получить команду SetJob перед первым путем WritePrinter, вы сможете приостановить задание до отправки любых данных на устройство.
К сожалению, если вы используете что-то вроде класса C# PrintDocument, это скрывает большую часть этого и не предоставляет какого-либо способа получить параметр JobId и дескриптор принтера, которые вам понадобятся для вызова команды SetJob.