17

我想将给定 Windows 打印作业的假脱机数据复制到磁盘上的任意位置。

我有来自Print Spooler API的打印作业的作业 ID 。我知道这项工作已经完成了假脱机。我知道在我有时间完成我需要做的任何事情之前,该工作不会被删除。

如果禁用了文件池,我可以通过在假脱机目录中查找格式为“xxxxx.spl”的文件来执行此操作,其中 xxxxx 是填充为 0 的作业 ID。

如果启用了文件池,我该怎么做?

如果有一种方法可以获取作业 ID 并返回假脱机数据流,我会很高兴,但目前这似乎不太可能。OpenPrinter据推测,使用“PrinterName,Job xxxx”和 ReadPrinter可能会出现类似的情况,如此所述,但到目前为止我还无法让它工作,即使我这样做了,它看起来也会将数据加载到内存中,而且我不确定这将如何处理大型假脱机文件(> 1 GB 并不罕见)。

我的第二个偏好是传递 ID 并使用磁盘上的假脱机数据取回文件位置的方法(无论文件池设置如何)。

我的第三个偏好是将池文件(“FPyyyyy.spl”)映射到它的作业 ID 的方法。

这些是否可行,或者是否有人对如何解决这个问题有更好的想法?

(编辑添加,因为不清楚我们是否知道此选项):我们的后备方案是要求我们的客户通过编辑每台打印机的注册表来禁用假脱机文件池,但我们更希望避免这种情况。

4

2 回答 2

8

弄清楚了为什么我的调用失败并且我已经使用andOpenPrinter成功读取了假脱机数据,这很好地解决了我们的问题。OpenPrinterReadPrinter

不过,我仍然会将赏金奖励给提出更好解决方案的任何人。

于 2012-12-14T00:47:37.783 回答
1

你读过这个吗?

http://www.undocprint.org/winspool/spool_files

它似乎拥有你需要的一切:)

具体来说To Turn Off Spool File Pooling on a Per Printer Queue-Basis

还有这篇关于假脱机文件格式的文章http://www.codeproject.com/Articles/9720/The-Windows-NT-print-spool-shadow-file-format但是似乎您已经知道格式它可能不会有任何帮助。

于 2012-12-13T21:46:19.020 回答