私はチケットを印刷する必要があるアプリケーションを持っています。各チケットは一意でなければなりません。アプリケーションはWindowsフォームであり、完全にC#で書かれています。私たちのアプリケーションでは、Samsung ML-2525レーザー単色プリンタを使用しています。印刷プロセスが成功したかどうかを確認する方法はありますか?
流れは基本的に以下であり、オペレータが(一意である)製品/チケットをピックアップし、それは2つのことを行い、ボタンを押下する:使用される
- は、データベースに接続し、製品を更新します
- 何らかの理由でチケット(これはSystem.DrawingとGDI +を使用して行われる)
を印刷し、すべてのたまに、印刷される必要がある画像をプリンタに送信されません。まれなケースですが、それは起こります。
Win32_Printer(http://msdn.microsoft.com/en-us/library/Aa394363)を使用してプリンタに接続しようとしましたが、現在のプリンタの状態(オンライン、オフライン、トナー不足、紙詰まりなど)を取得できません。プリンタが存在し、用紙サイズが正しくインストールされているかどうかだけを確認できます。私は、次のようなコードを試してみましたが、それは、私は、プリンタのためのAPIを取得しようとしましたが、私はそれを手に入れることができませんでした
private string MonitorPrintJobWmi()
{
var jobMessage = String.Empty;
var scope = new ManagementScope(ManagementPath.DefaultPath);
scope.Connect();
var selectQuery = new SelectQuery { QueryString = @"select * from Win32_PrintJob" };
var objSearcher = new ManagementObjectSearcher(scope, selectQuery);
var objCollection = objSearcher.Get();
foreach (var job in objCollection)
{
if (job != null)
{
jobMessage += String.Format("{0} \r\n", job["Name"].ToString());
jobMessage += String.Format("{0} \r\n", job["JobId"].ToString());
_jobId = Convert.ToInt32(job["JobId"]);
jobMessage += String.Format("{0} \r\n", job["JobStatus"].ToString());
jobMessage += String.Format("{0} \r\n", job["Status"].ToString());
}
}
return jobMessage;
}
を動作しませんでした。ところで、プリンタのソフトウェアは、Windowsツールバーのさまざまなエラーを示しています。
私の質問は、プリンタに接続して印刷が成功したかどうかを誰かが正しい方向に導くことができるかどうかです。
また、誰かが私がこれを達成するかもしれない他の特定のプリンタ、つまりハードウェアを変更していることを知っていれば役に立ちます。
おかげで、
関連項目:http://stackoverflow.com/questions/1921487/confirm-successful-print-programmatically-in-windows – Eugene
私はそうしましたが、頭をはじめるためのサンプルコードが有益です。 – lopezbertoni
@ lopezbertoni小さなグーグルでは、C#アプリケーションでこれらのリンクされたメソッドを使用する方法を紹介します。http://www.codeproject.com/Articles/51085/Monitor-jobs-in-a-printer-queue-NET –