按提交顺序打印窗口打印作业

按提交顺序打印窗口打印作业

是否有人知道任何设置或第三方软件可以强制按照提交的顺序打印打印作业?

答案1

我偶然发现了这个问题。在我的用例中,我有一个脚本,它遍历目录中的所有文件,并使用 ShellExecute 调用它们的“Print”动词。(因此模拟用户浏览每个文件,右键单击,然后选择“打印”。)

当您只处理少量文档时,结果很好,但是当处理 10 个或 100 个文档时,总会有少数文档是无序的。

很难判断问题出在处理“打印”动词的程序上,还是队列本身。(就我而言,每次调用打印时,我可能都会调用用于打印的程序的新实例。这意味着执行时间/调度的变化可能意味着文档 #2 的“打印”程序实际上在文档 #1 之前将作业提交到队列。)

不过,队列中似乎也可能发生一些事情。

我创建了一个程序,可以在查看队列的同时打印文档。第一个版本的工作方式如下:

  1. ShellExecuteEx 打印文档
  2. 等待文档出现在打印队列中
  3. 打印下一个文档

在此版本中,一些文档仍会打印乱序。第二个版本是可行的:

  1. ShellExecuteEx 打印文档
  2. 等待文档出现在打印队列中
  3. 等待后台处理完成(.NET 中的 PrintSystemJobInfo.IsSpooling == false 状态)
  4. 打印下一个文档

第二个版本每次都会按顺序打印文档。这让我相信,当你提交一堆文档时,会有一个奇怪的时期,人们会争先恐后地看哪个文档先被打印出来。

不过,我对 Windows 打印系统的来龙去脉并不熟悉。可能是在生成作业的程序发送完所有数据之前,作业就出现了。这意味着“print”动词后面的程序的可变执行时间可能导致了这个问题。

相关内容