14

チケットを印刷する必要があるアプリケーションがあります。各チケットは一意である必要があります。アプリケーションは Windows フォームであり、完全に C# で記述されています。このアプリケーションでは、Samsung ML-2525 レーザー モノクロ プリンターを使用しています。

フローは基本的に次のとおりです。オペレーターは製品/チケット (一意) を選び、2 つのことを行うボタンを押します。

  1. データベースに接続し、使用中の製品を更新します
  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 ツールバーにさまざまなエラーを表示します。

私の質問は、プリンターに接続して印刷が成功したかどうかを確認する方法について、誰かが私を正しい方向に導くことができるかどうかです.

また、ハードウェアの変更など、これを実現できる他の特定のプリンターを誰かが知っていると助かります。

ありがとう、

4

2 に答える 2

5

ローカル マシン上の印刷キューのリストを取得するには、PrintServer のGetPrintQueuesメソッドを試してください。

関連するプリンターに関連付けられたPrintQueueオブジェクトのインスタンスを取得したら、それを使用してプリンターのステータス (IsOffline、IsPaperOut など) にアクセスできます。また、これを使用して、特定のキュー ( GetPrintJobInfoCollection ) 内のジョブのリストを取得できます。これにより、ジョブ固有のステータス情報 (IsInError、IsCompleted、IsBlocked など) を取得できます。

お役に立てれば!

于 2012-09-13T16:13:08.787 に答える