特定の Windows 印刷ジョブのスプール データをディスク上の任意の場所にコピーしたいと考えています。
Print Spooler APIからの印刷ジョブのジョブ ID を取得しています。このジョブのスプールが終了したことを知っています。必要なことを完了する前にジョブが削除されないことはわかっています。
ファイル プールが無効になっている場合は、スプール ディレクトリで「xxxxx.spl」という形式のファイルを探すことでこれを行うことができます。ここで、xxxxx は 0 で埋められたジョブ ID です。
ファイル プーリングが有効になっている場合、これを行うにはどうすればよいですか?
ジョブ ID を受け取り、スプール データのストリームを返すメソッドがあればうれしいのですが、現時点ではありそうにありません。おそらく、ここOpenPrinter
に記載されているように、「PrinterName、Job xxxx」とReadPrinterを使用して同様のことが可能かもしれませんが、これまでのところ、動作させることができませんでした.これが大きなスプールファイルでどのように機能するかはわかりません(> 1 GBは珍しいことではありません)。
私の 2 番目の好みは、ID を渡し、ディスク上のスプール データを使用してファイルの場所を取得する方法です (ファイル プーリングの設定に関係なく)。
3 番目の好みは、プールされたファイル ("FPyyyyy.spl") をそのジョブ ID にマップする方法です。
これらのいずれかが実行可能ですか、またはこの問題を解決する方法についてより良いアイデアを持っている人はいますか?
(このオプションを認識しているかどうかが明確ではなかったため、追加するように編集されました): 私たちのフォールバックは、顧客が各プリンターのレジストリを編集してスプール ファイルのプールを無効にすることを要求することですが、これは避けたいと考えています。