按提交顺序打印Windows打印作业

有没有人知道任何设置或第三方软件,强制打印作业按照他们提交的顺序打印?

我偶然发现了这个问题。 在我的使用案例中,我有一个脚本来迭代目录中的所有文件,并使用ShellExecute在它们上调用“Print”动词。 (所以模拟用户浏览每一个,右键点击,然后select“打印”。)

当你只使用less量的文档时,结果是正确的,但是在10或100的情况下总是有一些是不合法的。

很难判断问题是处理“打印”动词的程序还是队列本身。 (在我的情况中,每次我打印时,我都可能调用一个用于打印的程序的新实例,这意味着执行时间/日程安排的变幻莫测可能意味着文档#2的“打印”程序实际上提交了作业到文档#1之前的队列)。

看起来似乎也有可能会发生在队列上。

我创build了一个在观看队列时打印文档的程序。 第一个版本的工作方式如下:

  1. ShellExecuteEx打印文档
  2. 等待文件在printqueue中显示
  3. 打印下一个文件

在这个版本中,一些文件仍然会按顺序打印。 第二个版本是工作的那个:

  1. ShellExecuteEx打印文档
  2. 等待文件在printqueue中显示
  3. 等待假脱机完成(在.NET中PrintSystemJobInfo.IsSpooling == false状态)
  4. 打印下一个文件

第二个版本每次都按顺序打印文档。 这使我相信,当你提交一堆文件时,有一个奇怪的时期,在这个阶段,要看哪一个先被假脱机。

虽然我不熟悉Windows打印系统的来龙去脉。 在生成它的程序完成发送所有数据之前,可能会显示一个作业。 这将意味着“打印”动词后面的程序的可变执行时间可能导致问题。