|
从网上看到的,批量打印顺序乱的逻辑,原来是这样啊!
一个文件夹里有五个文档,你选择它们,然后右键选择”打印”,系统会将它们打印出来,这毫无疑问。但是如果你细心观察一下,就会发现系统打印它们的顺序是随机的,这是为啥呢?
并没有什么魔幻的事情发生。
外壳会一次在每个文档上执行”打印”这个动作,根据对应的打印程序事先注册好的打印流程,来执行下面几个动作中的一种:
> 大多数情况下,打印文档的程序会在shell\print\command注册表键值下注册一个简单的命令。在这种情况下,应用程序会打开5次,每次打开不同的文件。所有这些打印命令现在都在争用打印机,问题是程序的哪个实例首先提交其打印作业,这决定了它们从打印机出来的顺序(你可能会看到,最先打印出来的是一份最短和最简单的文档,因为它们需要更少的时间来渲染)。
> 偶尔情况下,打印文档的程序会在shell\print\ddeexec注册表键值下注册一个DDE动作谓词(verb)。在这种情况下,将启动这个应有程序的实例,并每次都指定一个待打印的文件的文件名。对于这些文件的处理,完全取决于应用程序。如果程序支持后台打印,它可能会将文档的打印分流到后台线程上,现在你的解决方案与之前的场景大致相同: 五个后台线程每个都争相查看谁能先提交它们的打印作业。
> 在极少的情况下,打印文档的程序在shell\print\DropTarget注册表键值下注册了一个拖放处理器处理程序(Drop Handler)。在这种情况下,拖放目标(Drop Target)被实例化并被赋予文件列表。然后由拖放目标决定如何处理这些文档。
|
|