2012-10-12 49 views
17

我想将给定Windows打印作业的假脱机数据复制到磁盘上的任意位置。即使启用假脱机文件池,如何找到具有给定ID的作业的假脱机文件?

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

如果文件池被禁用,我可以通过在spool目录中查找格式为“xxxxx.spl”的文件来做到这一点,其中xxxxx是0填充的作业ID。

如何启用文件池功能?

如果有一种方法需要一个工作ID并返回一系列假脱机数据,我会很高兴,但在这一点上似乎不太可能。据推测,使用OpenPrinter“PrinterName,Job xxxx”和ReadPrinter作为文档here,但到目前为止我有可能类似haven't been able to get it to work,即使我这样做,它看起来像它将数据加载到内存中,我不知道这是如何将使用大型假脱机文件(> 1 GB并不常见)。

我的第二个选择是传入ID并返回磁盘上假脱机数据的文件位置(不管文件池设置如何)。

我的第三选择是将池文件(“FPyyyyy.spl”)映射到它的作业ID。

这些都是可行的吗?还是任何人对如何解决这个问题有更好的想法?

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

+0

嗨,在你有时间完成你需要做的任何事情之前,你怎么知道这个工作不会被删除?你怎么能保持假脱机文件? – Kira

回答

8

figured out为什么我到OpenPrinter电话都没有,用OpenPrinterReadPrinter,从而很好地解决了我们的问题,我已经成功地读取缓冲数据。

尽管如此,我仍然会奖励那些提出更好解决方案的人。

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不过的格式,但它似乎你已经知道的格式它可能不会有任何帮助。

+0

是的,我已阅读该页面。我们希望在不禁用假脱机文件池的情况下访问假脱机数据。强迫我们的客户为他们创建的每台打印机编辑注册表(或试图为他们完成)是我们希望避免的。 –