- 締切済み
プリンタの正常終了を知りたい
Windows系において初心者です。 よろしくお願いいたします。 今回、プリンタの正常終了を取得したいと思っています。 やりたいことは、エラーコードを取得し、正常終了であれば次の動作を実行、エラーであれば、プログラムを終了させるというものです。 今まで色々調べては見ましたが、ますひとつは エラーコードを取得するには、まずどのアプリが動いているのか指定しなければいけません。 Win32.dllというのが関係しているようですが、そこからどうしていいかわかりません。 またもう少し簡単な方法で、プリンタ起動時に動くEXEファイルを見つけたので、(E_FARNAPJ.EXE)それがタスクマネージャから消えた時(正常終了ならば消える。)が終了ということで、フラグを立てるなりして判断できないかも考えました。 この場合、タスクマネージャをコマンドプロントで立ち上げ、そこから目的のファイルがあるかどうか判断できないか試しましたが、私の知識不足のせいかできません。 やり方、言語も環境さえあれば何でもいいと思っています。特にソフトを入れたりはできませんので、デフォルトでできる言語が望ましいです。 知識不足のため、質問に必要な情報が記載できていないかもしれません。その場合は、ご教授ください。 よろしくお願いいたします。 OS:WindowsXP
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- PED02744
- ベストアンサー率40% (157/390)
プリンタからのステータスを取得するためには、 ・プリンタ本体にステータスを返す機能があるか ・プリンタドライバがステータスを取得できるか が必要です。 例えば、EPSONのプリンタの場合、EPSONプリンタウィンドウ3!のような トナー切れ・用紙切れ等のステータスを取得するアプリがありますが、 これは本体がステータスを返す機能を持っていて、その値を受け取って表示しています。 実際には同じようなことをしなくてはいけないので、プリンタメーカーにステータス取得仕様を聞いて、プログラムを作る必要があると思います。 というわけで。。。 「特にソフトを入れたりはできませんので、デフォルトでできる言語が望ましいです。」 この時点で無理じゃないかと思いますが。
- chie65536
- ベストアンサー率41% (2512/6032)
無意味な処理なので諦めましょう。 1ページの文書を印刷してプリンタが紙詰まりなどのエラーを起こした場合でも、もし「印刷データのサイズが、プリンタが持っているバッファメモリより小さい場合」は「パソコンから見たら正常に印刷が終って」います。 この意味、理解できますでしょうか? ページプリンタ(レーザープリンタ)の場合を例に考えてみましょう。 1.アプリが印刷実行 2.プリンタスプーラー(E_FARNAPJ.EXE)が起動され、スプールに溜まる 3.スプーラーからアプリに「印刷が終った」と通知される。アプリにとって印刷はここで完了してしまう。 4.プリンタのバッファサイズ以下なので、プリンタが全部のデータを受け取る 5.プリンタからスプーラーに「印刷が終った」と通知される。スプーラーにとって印刷はここで完了してしまう。 6.プリンタがバッファ内のデータを処理し終わりデータの最後にある「改ページ指令」を受け取り、用紙をトレイからピックアップしようとする。 7.用紙をトレイからピックアップしようとしたら紙詰まりした。が、アプリもスプーラーも「正常終了した」と思って終了している。 こういうケースは頻繁に起きます。 紙詰まりしてプリンタが止まっていても、すべて「正常終了した事になっている」ので、仮に >やりたいことは、エラーコードを取得し、正常終了であれば次の動作を実行、エラーであれば、プログラムを終了させるというものです。 が実現出来たとしても「紙詰まりしてプリンタが止まっているのに、どんどん次の動作に進んでしまう」事になります。 つまり「無意味な処理」な訳です。 あと、プリンタスプーラーの監視は危険です。 なぜなら「誰かが、スプールされた印刷文書のどれかを、印刷一時停止にする」と、プリンタスプーラーは一時停止を解除されるまで永久に消えません。パソコンを再起動しても残り続けます。 「永久に消えない物」を「消えるまで待つ」と「プログラムが永久に先に進まなくなる」ので、そういう危険なプログラミングをしてはいけません。
お礼
早速の回答、ありがとうございます。 プリンタのソフトの動きがよくわかりました。 今回、印刷させるものは、もう決まっており、紙詰まりはない事は実験済みです。とすれば、「改ページ指令」を把握するか、スプーラーに「印刷が終った」と通知される部分を取得できればいいということになりますね? または、排出口にセンサーを取り付け、そこからデータを送信するような方法も考えられます。 できればセンサーを取り付けるのは基盤も作らなければならないので、少し面倒なので、「改ページ司令」を取得できたらいいと思います。 この方法でまた探してみます。 とても丁寧な回答に感激しました。 本当にありがとうございます。