【问题标题】:Print jobs don't queue, pulled straight into printer memory - no way to see real status打印作业不排队,直接拉入打印机内存 - 无法查看真实状态
【发布时间】:2012-06-24 02:19:06
【问题描述】:

我被要求开发一个打印监控实用程序,该实用程序将从客户系统接收打印作业,将其路由到打印机,然后在打印机完成作业时触发主机系统更新并显示成功状态。

我发现至少有两种方法可以从打印机队列中获取打印作业状态 - 使用 WMI 查询 Win32_PrintJob 或使用 API 到 winspool。当我尝试打印到已断开连接的打印机时,这两种方法都运行良好 - 我能够获得状态为等待打印机可用的作业列表。

现在我正在尝试测试打印机缺纸或卡纸的情况。不幸的是,在这种情况下,打印作业将从打印假脱机程序队列中删除并拉到打印机内存中,等待用户放入更多纸张或解决卡纸问题。打印作业不再在队列中但尚未打印,因此我可以真正更新主机系统的成功状态。我发现一些文章谈论使用 PJL 或打印机特定 API 从打印机本身获取该信息,但我没有成功。有什么方法可以配置 Windows spooler 队列以保留在队列中,直到打印机实际处理它?

谢谢!

【问题讨论】:

  • 当您说打印作业不再在后台处理程序队列中时,我不明白您的意思。他们肯定是。 Win32 函数 EnumJobs 和 GetJob 将返回有关它们的信息。您使用的是什么 API?
  • 来自MSDN:“不支持 TrueEndOfJob 的端口监视器将在作业提交到打印机后立即将作业设置为 JOB_STATUS_PRINTED。”如果打印机供应商认为报告真实状态太麻烦(即使假设打印机支持它),我想编写自己的代码来做这将是一个极端的 PITA。在做任何其他事情之前,我会询问供应商是否有支持此功能的更新驱动程序。

标签: windows winapi printing wmi spool


【解决方案1】:

谢谢你,arx 发布那个 MSDN 链接,这正是我所怀疑的。我猜我正在测试的特定驱动程序不支持该真实状态。

【讨论】:

    猜你喜欢
    • 2018-09-27
    • 1970-01-01
    • 2016-08-14
    • 2019-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多