打印作业时,上次作业状态为JOB_STATUS_RETAINED,而不是JOB_STATUS_PRINTED

时间:2014-11-11 10:38:13

标签: c++ winapi print-spooler-api

我在JOB_CHANGE之类的任何更改上轮询打印机队列,如果我看到某个作业消失,我会根据作业上次状态向服务器报告打印或删除作业。

问题是打印机Lexmark X945e仅返回上一个作业状态JOB_STATUS_RETAINED,但没有JOB_STATUS_DELETED或JOB_STATUS_PRINTED。

这是什么意思?我可以使用保留状态来表示作业已打印出来吗?

1 个答案:

答案 0 :(得分:1)

如果您在说“保留”时表示JOB_STATUS_RETAINED,我发现此链接in the documentation

  

Windows Vista及更高版本:作业已保留在打印队列中,无法删除。这可能是由以下原因引起的:   1)通过调用SetJob手动保留作业,假脱机程序正在等待作业被释放。   2)作业尚未完成打印,必须先完成打印才能自动删除。   有关打印作业命令的详细信息,请参阅SetJob。

来自SetJob文档:

  

JOB_CONTROL_RETAIN   Windows Vista及更高版本:打印后将作业保留在队列中。   JOB_CONTROL_RELEASE   Windows Vista及更高版本:释放打印作业。

从文档中可以看出,SetJob(JOB_CONTROL_RELEASE)可用于释放作业。