問題タブ [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 投票する
1 に答える
2035 参照

c# - C# を使用して印刷ページ数を取得する (システム全体)

私はほぼ2日間これを続けてきましたが、何も達成していません!!
Windows OS で印刷されたページ数をカウントするプログラムを作成するように割り当てられました。
私の知る限り、印刷イベントを傍受して内部的にカウントする必要があります。どちらを使用する必要がFindFirstPrinterChangeNotificationありますかFindNextPrinterChangeNotification

PrinterNotifyWaitCallback次の署名でコールバック関数を割り当てましたが、印刷イベントが発生すると複数回発生します。

問題:

印刷イベントがPrinterNotifyWaitCallback 複数回発生する理由についてはいくつかの手がかりがありますが、それらの複数のコールバックの中で実際の印刷コールバックイベントを区別できません。これは明らかに関係Object stateがありますが、カウントしている目的を達成する方法に関するドキュメントはありません印刷されたページ。

質問:

  1. システム全体PrinterNotifyWaitCallbackの合計印刷ページ数をカウントするための実際の印刷コールバックを区別する方法は?
  2. タスクを達成するための他のより良い方法はありますか?
0 投票する
1 に答える
435 参照

c# - DeviceCapabilities がエラーを生成: データが無効です

プリンターの用紙ソース、用紙サイズなどのリストを取得したいです。http://www.pinvoke.net/default.aspx/Enums/DeviceCapabilities.html?diff=y のコードを少し変更しました。コードは時々機能します。時々そうではありません。問題は、DeviceCapabilities(DeviceName, strPort, DeviceCapabilitiesFlags.DC_BINNAMES, (IntPtr)null, (IntPtr)null) が -1 を返すことです。最後のエラーは「データが無効です」です。コンピューターを再起動しても問題が解決しない場合があります。問題が発生したら、次は大丈夫かもしれないし、そうでないかもしれません。

では、ここで何が問題なのですか?

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

c# - FindNextPrinterChangeNotification でイベントが発生しませんか?

FindFirstPrinterChangeNotificationおよびを使用して、FindNextPrinterChangeNotification印刷イベントをキャッチしています。FindNextPrinterChangeNotificationただし、すべてのイベントを確実に返すわけではないことに気付きました。この記事で同じ問題を抱えている人を見つけました。

基本的に、プログラムをデバッグしたり、イベントを処理するときに彼の提案のように Sleep コマンドを入れたりFindNextPrinterChangeNotificationすると、多くのイベントがスキップされます。また、後で処理するためにすでにジョブをキューにプッシュしているにもかかわらず、ほとんどの場合、多くの SPOOLING ステータス イベントを取得しますが、DELETED ステータス イベントを見逃します (取得できる場合もありますが、ほとんどの場合は取得できません)。

誰もこの問題を抱えていますか?また、Microsoft PDF プリンターを試していますNumberOfPages。SPOOLING イベントが発生すると増加しますが、増加しNumberOfPagesPrintedません。それは意図されていますか?

編集いくつかの調査の後、イベントは実際にはなくなっていません。別の印刷ジョブを呼び出すと、以前のイベントが発生します (以前の印刷ジョブの DELETING/DELETED ステータスを含む)。何が問題なのか教えてください。

を呼び出すコードは次のFindFirstPrinterChangeNotificationとおりです。

そして、これは次の場合ですFindNextPrinterChangeNotification

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

c# - C# を使用して Windows Server 2012 R2 で PCL ファイルを印刷する

Windows Server 2012 R2 に固有のもので、以下の方法を使用して PCL ファイルが印刷されないようにするものはありますか?

オンラインで見つけたコードを使用して、以下の URL から dll ファイルを生成しました (少し下にスクロールして、Abel が投稿した回答を確認してください)。 c#でpclファイルを印刷するには?

生成されたライブラリ ファイルを使用し、次のコードを使用してファイルを印刷しました。

このコード セグメントは、通常の Windows OS では pcl ファイルを出力しますが、Windows Server 2012 R2 で試したところ、出力されませんでした。

C:\Windows\System32\spool\PRINTERS をチェックするまで印刷ジョブを追跡しましたが、印刷ジョブが消える前に短時間表示されます。しかし、マシンが大幅に減速したことを除いて、その後は何も起こりませんでした。

ここに役立つかもしれないものがあります。1.「別のプロセスで使用されている」ため、同じファイルをコードで再度印刷することはできません 2.すべてのプリンターがインストールされ、正しい名前を使用しています(名前を文字通りコピーして貼り付けます) Windows 7、8.1、および 10 のプリント サーバーとローカルにインストールされたプリンター。

助けてください!

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

c++ - 64 ビット Windows 10 で 32 ビット アプリケーションを実行している場合、偽装後に DocumentProperties 呼び出しでアクセスが拒否される

アプリケーションがユーザーを偽装した後、プリンターの DEVMODE 構造を取得する必要があります。これは、アーキテクチャが Windows のアーキテクチャと一致している限り、32 ビット OS で実行されている 32 ビット アプリケーションと一致している限り、正常に機能します。ただし、DocumentProperties への呼び出しは、Windows 10 でエラー コード: 5 (アクセスが拒否されました) で失敗するか、64 ビット OS で実行されているアプリケーションの 32 ビット バージョンでの偽装後に Windows 7 で RPC エラーで失敗します。残念ながら、他のレガシー アプリケーションとやり取りする必要があるため、顧客は私のアプリケーションの 64 ビット バージョンを実行できません。

この問題の回避策を知っている人はいますか?

この問題を示す小さなサンプル コードを次に示します。問題を確認するには、x86 アプリケーションとしてビルドし、64 ビット OS で実行する必要があります。

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

c# - プリンタースプーラー API 部数

これは多くの人がインターネットで尋ねている質問です。私はさまざまなセットアップを行っており、さまざまなテスト方法を試しましたが、非常にイライラしています。

最初のセットアップ:

  • ローカル プリンター

  • ローカルで実行中のコード

  • PDFまたはメモ帳からの印刷: SUCCES (部数は2部)

  • Word からの印刷: FAILED (部数は 1)

2 番目のセットアップ:

  • 共有されているローカル プリンター

  • ローカルで実行中のコード

  • 他のコンピューターから共有プリンターに印刷する

  • 部数は常に1

では、誰もが欠けているものは何ですか?プリンターが何を印刷するかを認識しているはずなのに、一部のフィールドが欠落しているとどうなりますか? 別のコンピューターから印刷するときにも発生する単語は何ですか? なぜウィンドウの何かがひどいのか誰か教えてもらえますか? すべてがスプーラを通過する必要があるのに、なぜデータが間違っているのでしょうか?

よろしくお願いします!

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

c# - Printername と JobID で Win32_printJob を一時停止する方法

仕事

ユーザーがドキュメントを印刷すると、ポップが表示されて一時停止し、フォームをクリックして入力すると、フォームが閉じられ、ジョブが再開されます。

50 台のネットワーク プリンター2000 台のクライアント マシン1 台のプリント サーバーが あります。

各クライアントには3 台または 4 台のプリンターがありました

問題

ユーザーがドキュメントをローカルで印刷する場合(例: PDF PRINTER、XPS DOCUMENT WRITER) (または) ネットワーク プリンター(CANON、HP)を使用すると、印刷ジョブはすぐに一時停止します。

私の試み

ドキュメントのいずれかを印刷すると、イベント リスナーが監視し、印刷ジョブを返します。

  • 最初の一時停止方法では、機能することもあれば、ほとんどの場合、適切に機能しないこともあります。なぜなら、その印刷ジョブを検索しているが、そこには既に印刷されていないからです。

  • In Second Pause Methodは機能しないため、イベント リスナーは Managementbaseobject を返しますが、印刷ジョブを一時停止するには ManagementObject が必要です ManageBaseObject を ManageObject に変換する方法

PRINTJOB イベント リスナー コード

主なアクションコード

PRINTJOB メソッド 1 を一時停止するには

印刷ジョブ方法 2 を一時停止するには