問題タブ [print-spooler-api]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
3282 参照

c# - Microsoft Print Spooler API - 印刷ジョブを保留しますか?

Microsoft Print Spooler APIを使用して印刷ジョブを保持できるかどうかを知っている人はいますか?

プリンターに送る前に保留したいのですが。
これは可能ですか?

0 投票する
2 に答える
1949 参照

c# - OpenPrinter を使用して特定のジョブを開こうとすると、なぜ ERROR_ACCESS_DENIED が発生するのですか?

ジョブ ID を指定したundocprintによると、"PrinterName,Job xxxx" の形式の文字列を使用してプリンターを開き、OpenPrinterジョブのスプール ファイルを取得できるはずです。MSDNReadPrinterのドキュメントにもこの方法が記載されていますが、コンマ "PrinterName, Job xxxx" の後にスペースが追加されています。

テスト アプリケーションから (いずれかの文字列形式を使用して) このメソッドを呼び出そうとすると、ERROR_ACCESS_DENIED(Windows 8 x64) が返されます。これはなぜですか? また、これを機能させるにはどうすればよいですか?

管理者としてテスト アプリを実行していますが、ジョブやプリンターを一時停止したり、他の情報にアクセスしたりするのに問題はありません。

無効な ID の代わりに返されるため、使用している ID が有効であることはわかっていますERROR_INVALID_PRINTER_NAME

私が使用しているコード:

0 投票する
2 に答える
3554 参照

c# - スプール ファイルのプールが有効になっている場合でも、特定の ID を持つジョブのスプール ファイルを見つけるにはどうすればよいですか?

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

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

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

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

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

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

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

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

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

0 投票する
1 に答える
2012 参照

windows-7 - 共有プリンターの Windows 7 クライアント マシンで印刷ジョブが重複しています

共有プリンターの印刷ジョブを含む pb を持っています

Win サーバー 2008 でプリンターを共有しています

そして、私はWindows 7クライアントマシンからこのプリンターを使用しています

すべての印刷ジョブのすべてのプリンター通知を書き込むアプリケーションを開発しています

また、印刷キュー内の 1 つのジョブのみについて、2 つの異なる JobID と 2 つの異なるマシン名を持つ 2 つのジョブの通知を受け取ります。

私の質問は、印刷キューに送信された 1 つのジョブだけに対して 2 つのジョブが作成されるのはなぜですか? なぜそんなに違うのですか?仮想ジョブにはファイル クライアントのマシン名があり、実際のジョブにはプリント サーバーのマシン名があります

0 投票する
1 に答える
679 参照

winapi - スプーラジョブのキャンセルメッセージまたはコールバックを印刷する必要があります

Backgroud:GDI Print API
を介して印刷しようとしていますが、次のようになります。

問題:
印刷中に通知領域のアイコンが表示され、それをクリックすると、指定したプリンターでの現在の印刷ジョブを示す小さなウィンドウが表示されます。
印刷ジョブを右クリックしてを選択するCancelと、印刷ジョブがキャンセルされます。しかし、私のアプリケーションは、すべてのページが処理されるまでプリンターDCにデータを送信し続け、Deleting - Spooling終了する前にステータスが表示され続けます。
私が欲しいのは、それをキャンセルすることを選択した直後に印刷手順を停止することです。

私が試したこと:
1。最初に、ジョブをキャンセルするとデバイスのコンテンツが無効になると思い(もちろんそうではありません)、との戻り値を調べてみましStartPageEndPage。それから、印刷ジョブのキャンセル後、両方とも失敗しないことがわかりました。
2.私も試しSetAbortProcDocumentEventみましたが、それらが私が望むものではないことがわかりました。


しかし、印刷ジョブがキャンセルされたときにアプリケーションを示すメカニズムがあると思います。誰かが助けてくれれば幸いです。

0 投票する
1 に答える
453 参照

fonts - EMR_FORCEUFIMAPPING と EMR_GDICOMMENT を処理するには?

EMF を PDF に変換していますが、問題のある分野に入りました。やなどの文書化されていない EMR 構造を含む EMF スプール ファイルがいくつか EMR_FORCEUFIMAPPINGありEMR_GDICOMMENTます。

MSDN はこれらのレコードについてあまり詳しく説明していないため、これらのキーワードを検索しても答えを見つけることができませんでした。私が知っているように、これらのレコードは、生成された PDF にフォントを埋め込むのに役立ちます。この分野で経験のある人はいますか?いくつかの本、チュートリアル、ソースコードリポジトリ、またはいくつかの例をお勧めできますか?

これらの記録をどのように処理しますか?

ありがとうございました。

0 投票する
2 に答える
9809 参照

windows - Windows用のカスタムプリンタードライバーの開発

ソフトウェアのニーズに応じて、送信されたすべての画像をファイルに保存し、プログラムのウィンドウを開いてユーザーがレンダリングされたページで何かを実行できるようにするプリンタードライバーを作成する必要があります。この記事
を見つけましたが、サンプルではポートを使用していますが、独自のポートを作成し、イメージをファイルにダンプして実行可能ファイルを実行する必要があります。ただし、ドライバーのコードでそれを実行することでタスクを実行できると思いますが、ユーザーモードドライバーであるにもかかわらず、ドライバーであるため、それが適切な決定であるかどうかはわかりません。 私の問題について何かアドバイスを聞いてうれしいです。前もって感謝します。FILE:

0 投票する
1 に答える
4331 参照

c# - XPS プリンターを使用してスプール ファイルを再印刷するにはどうすればよいですか?

印刷されたドキュメントをキャプチャし、これらのドキュメントを xps\image に変換するプログラムを構築しています。

現在、 FileSystemWatcherを使用してディレクトリ「C:\Windows\System32\spool\PRINTERS\」を監視し、spl ファイルをコピーします。重複していないことを確認してから、 Win32 Spooler APIを使用して spl ファイルを印刷して xps ファイルに変換しててください。およびMicrosoft XPS Document Writerの事前定義されたプリンターですが、以下に示すように出力ファイルを指定すると、エラー コード 1804 が返されます。空のままにしておくと成功しますが、出力ファイルが取得されません。

それで、私が間違っていること、およびスプールファイルをXPSドキュメントに印刷/変換する方法、および可能であれば画像ファイルとテキストファイルに変換する方法。

編集:追加情報を追加する

これがDOCINFOAの実装です

完全な呼び出しチェーンは次のとおりです。

アプリは次のコードを実行します

そしてRawPrinterHelperで

そしてAPI関数

0 投票する
1 に答える
711 参照

printing - job_info_2 の PagesPrinted フィールドは、Windows 7 の hp プリンターでは信頼できません。値はプリント プロセッサーによって異なります。

job_info_2 の PagesPrinted フィールドは、Windows 7 の hp プリンターでは信頼できません。値はプリント プロセッサーによって異なります。

印刷モニタ​​ーを開発していますが、hp プリンターの場合、PagesPrinted は信頼性が低く、値が正しくありません

0 投票する
0 に答える
625 参照

winapi - jobID を使用して SPL ファイルを取得する

C ++で印刷モニタ​​ーを開発しています。しかし、ファイル SPL の取得に問題があります。多くの調査の結果、spoolerDirectory キーに .spl ファイルを保存するフォルダーのパスを挿入する必要があることがわかりました。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Print\Printers\'printername'\SpoolDirectory = c:\windows\system32\spool\printers

この変更がスプール サービスの再起動後にのみ有効になるという問題。

ジョブの印刷を監視しているため、スプーラを再起動するとすべてのオブジェクトが失われます。

私の問題を解決する別の方法はありますか?タンク!