2012-04-19 31 views
5

ローカルネットワーク上でプリンタに送信されたすべての印刷ジョブを検出しようとしています。私はジョブ名、送信時間などのジョブのいくつかのプロパティを表示したい。C#.NETで印刷ジョブを取得する方法

私はwhileループを試しましたが、スレッドがスリープしている間に発生した可能性がある、私の印刷ジョブをキャッチしませんでした。登録して処理できるイベントはありますか?私は、このタスクをインフェイブルにルーピングするために、すべてのCPUリソースを費やしたくありません。

は、私はこれを試してみました:

public static void WritePrinterJobs() 
    { 
     while (true) 
     { 
      foreach (var job in LocalPrintServer.GetDefaultPrintQueue().GetPrintJobInfoCollection()) 
      { 
       Console.WriteLine(job.Submitter + " " + job.TimeJobSubmitted.ToShortDateString()); 
      } 
      Thread.Sleep(100); 
     } 
    } 

EDIT:上記のコードは、実際に、あなたはそれが、私のミスが正しくデフォルトのプリンタを設定していなかったあなたのための作業を行う場合は、より低いレベルに行く必要はありません動作します 。

+1

http://stackoverflow.com/questions/6506916/eventsを見つけることができます-in-printqueue – adt

+0

foreachループを使用していて、一度に多くの印刷ジョブが発生すると、コードが見つかる前に印刷される文書が印刷されることがありますそれでも –

+0

まだタイマーを使って印刷ジョブを確認する必要はありますか?私は、私が引っ掛けることができるJobAddedの種類のイベントはないと思いますよね? –

答えて

1

Windows管理機器を試してください。私たちがイベントと代議員を持っているときに投票する必要はありません。ソリューションについてはhereを参照してください。

+0

あなたの提供するリンクに含まれる記事では、彼は依然として仕事を投票します。記事にJobAddedの種類のイベントはありません。私は行方不明ですか? –

+0

ああ、私は参照してください。プリンタドライブはそのようなイベントを提供することができますが、効果的にドライバはポーリングを行います。 – ldgorman

+0

[System.printing](http://msdn.microsoft.com/en-us/library/system.printing.aspx) – ldgorman

関連する問題