チケットを印刷する必要があるアプリケーションがあります。各チケットは一意である必要があります。アプリケーションは Windows フォームであり、完全に C# で記述されています。このアプリケーションでは、Samsung ML-2525 レーザー モノクロ プリンターを使用しています。
フローは基本的に次のとおりです。オペレーターは製品/チケット (一意) を選び、2 つのことを行うボタンを押します。
- データベースに接続し、使用中の製品を更新します
- チケットを印刷します (これは System.Drawing と GDI+ を使用して行われます)
何らかの理由で、印刷する必要がある画像がプリンターに送信されないことがあります。まれなケースですが、起こります。
Win32_Printer ( http://msdn.microsoft.com/en-us/library/Aa394363 )を使用してプリンターに接続しようとしましたが、現在のプリンターの状態 (オンライン、オフライン、トナー不足、紙詰まり) を取得できませんなど)。プリンターが存在するかどうか、および用紙サイズが正しくインストールされているかどうかのみを確認できます。次のようなコードを試しましたが、うまくいきませんでした
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;
}
プリンター用の API を取得しようとしましたが、取得できませんでした。ところで、プリンターのソフトウェアは Windows ツールバーにさまざまなエラーを表示します。
私の質問は、プリンターに接続して印刷が成功したかどうかを確認する方法について、誰かが私を正しい方向に導くことができるかどうかです.
また、ハードウェアの変更など、これを実現できる他の特定のプリンターを誰かが知っていると助かります。
ありがとう、