17

特定の Windows 印刷ジョブのスプール データをディスク上の任意の場所にコピーしたいと考えています。

Print Spooler APIからの印刷ジョブのジョブ ID を取得しています。このジョブのスプールが終了したことを知っています。必要なことを完了する前にジョブが削除されないことはわかっています。

ファイル プールが無効になっている場合は、スプール ディレクトリで「xxxxx.spl」という形式のファイルを探すことでこれを行うことができます。ここで、xxxxx は 0 で埋められたジョブ ID です。

ファイル プーリングが有効になっている場合、これを行うにはどうすればよいですか?

ジョブ ID を受け取り、スプール データのストリームを返すメソッドがあればうれしいのですが、現時点ではありそうにありません。おそらく、ここOpenPrinterに記載されているように、「PrinterName、Job xxxx」とReadPrinterを使用して同様のことが可能かもしれませんが、これまでのところ、動作させることができませんでした.これが大きなスプールファイルでどのように機能するかはわかりません(> 1 GBは珍しいことではありません)。

私の 2 番目の好みは、ID を渡し、ディスク上のスプール データを使用してファイルの場所を取得する方法です (ファイル プーリングの設定に関係なく)。

3 番目の好みは、プールされたファイル ("FPyyyyy.spl") をそのジョブ ID にマップする方法です。

これらのいずれかが実行可能ですか、またはこの問題を解決する方法についてより良いアイデアを持っている人はいますか?

(このオプションを認識しているかどうかが明確ではなかったため、追加するように編集されました): 私たちのフォールバックは、顧客が各プリンターのレジストリを編集してスプール ファイルのプールを無効にすることを要求することですが、これは避けたいと考えています。

4

2 に答える 2

8

の呼び出しが失敗した理由を理解し、とを使用しOpenPrinterてスプールデータを正常に読み取ることができました。これにより、問題がうまく解決されます。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 に答える