(57)【要約】【課題】  双方向通信制御モジュールを構成要素として含まないプリンタドライバにおいて、適切な印刷ジョブのキャンセル機能を実現する。【解決手段】  印刷装置が解釈可能な１つの印刷コマンドに、印刷コマンドを一意に識別するための識別情報を付加し（Ｓ４０５）、印刷装置にて進行中の印刷処理を指示する印刷コマンドに付加された識別情報を取得し（Ｓ４１２）、印刷装置にて進行中の印刷処理の進捗を示す進捗情報を取得し（Ｓ４１７）、それらから、情報処理装置により生成された印刷コマンドにより定められる印刷処理が印刷装置にて完了したと判断される場合（Ｓ４１８）、情報処理装置の処理を終了する（Ｓ４２０）。【選択図】  図４
2014134861.tif 000002
【特許請求の範囲】
【請求項１】
印刷コマンドを解釈して前記印刷コマンドにより定められる印刷処理を実行する印刷装置と双方向通信可能な接続手段を介して接続され、前記印刷装置に送信される印刷コマンドを生成する情報処理装置であって、
前記印刷装置が解釈可能な１つの印刷コマンドに、前記印刷コマンドを一意に識別するための識別情報を付加する付加手段と、
前記印刷装置から、前記印刷装置にて進行中の印刷処理を指示する印刷コマンドに付加された識別情報を取得する識別情報取得手段と、
前記印刷装置から、前記印刷装置にて進行中の印刷処理の進捗を示す進捗情報を取得する進捗情報取得手段と、
前記識別情報取得手段により取得された前記識別情報と、前記進捗情報取得手段により取得された前記進捗情報から、前記情報処理装置により生成された印刷コマンドにより定められる印刷処理が前記印刷装置にて完了したと判断される場合、前記情報処理装置の処理を終了する終了手段と、
を有することを特徴とする情報処理装置。
【請求項２】
前記印刷装置にて進行中の印刷処理に対する中止要求を取得する中止要求取得手段と、
前記中止要求取得手段が印刷処理に対する中止要求を取得した場合、前記識別情報取得手段が前記識別情報を取得し、
前記識別情報取得手段により取得され識別情報に基づき、前記印刷装置にて進行中の印刷処理を定める印刷コマンドに付された識別情報は、前記情報処理装置により付加された識別情報であると判断される場合、前記印刷装置にて進行中の印刷処理の中止を指示する中止指示手段と、
を有することを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記情報処理装置にて実行される所定の処理終了後、前記所定の処理が終了したことを示す処理フェーズ情報を記録する記録手段と、
前記印刷処理の中止要求を取得する中止要求取得手段により印刷処理の中止要求が取得された場合、前記記録手段により記録された処理フェーズ情報に基づき、前記識別情報取得手段による前記識別情報の取得処理を実行するか否かを制御する手段と、
を有することを特徴とする請求項１または請求項２記載の情報処理装置。
【請求項４】
前記付加手段（Ｓ４０５）により印刷コマンドへ付加された識別情報と、前記識別情報取得手段により取得された識別情報が一致する場合、前記印刷処理の中止指示手段が前記印刷装置にて進行中の印刷処理の中止を指示する手段、
を有することを特徴とする請求項１乃至３何れか１項記載の情報処理装置。
【請求項５】
前記情報処理装置と前記印刷装置を接続する双方向通信手段の種別を判定する判定手段と、
を有することを特徴とする請求項１乃至４何れか１項記載の情報処理装置。
【請求項６】
印刷コマンドを解釈して前記印刷コマンドにより定められる印刷処理を実行する印刷装置と双方向通信可能な接続手段を介して接続される情報処理装置であって、
前記情報処理装置上で稼働するオペレーティングシステムに対し印刷コマンドの前記印刷装置への送信処理の実行を指示する指示手段と、
前記送信処理の処理結果を記録する記録手段と、
前記オペレーティングシステムに対し、前記指示手段により実行を指示された印刷コマンドの送信処理の終了を通知する通知手段と、
前記印刷装置にて進行中の印刷処理の中止要求を取得する中止要求取得手段と、
前記中止要求取得手段により印刷処理の中止要求が取得された場合、前記記録手段により記録された処理結果に基づき、少なくとも１回以上前記送信処理が成功しているか否かを判断する判断手段と、
前記判断手段により少なくとも１回以上前記送信処理が成功していると判断された場合、前記印刷装置から、前記印刷装置の状態を示す状態情報を取得する情報取得手段と、
前記情報取得手段により取得された状態情報が、前記印刷装置が印刷処理を継続できない状態であることを示す場合に、前記印刷コマンド送信処理の終了通知の前に、前記印刷装置にて進行中の印刷処理の中止を指示する中止指示手段と
を有することを特徴とする情報処理装置。
【請求項７】
印刷コマンドを解釈して前記印刷コマンドにより定められる印刷処理を実行する印刷装置と双方向通信可能な接続手段を介して接続される情報処理装置であって、
複数のスレッドから、前記印刷装置に対し印刷コマンドを出力する出力手段と、
前記印刷装置にて進行中の印刷処理の中止要求を取得する中止要求取得手段と、
前記中止要求取得手段により印刷処理の中止要求が取得された場合、前記出力手段により実行された出力処理の内、特定のスレッドにより実行される出力処理であり、かつ未完了である出力処理を停止する停止手段と、
前記停止手段による停止処理実行後においても、未完了の出力処理が残存する場合、前記印刷装置の状態を示す状態情報を取得する状態情報取得手段と、
前記状態情報取得手段により取得された状態情報が、前記印刷装置が印刷処理を継続できない状態であることを示す場合、残存する未完了の出力処理の全てを停止する手段と、
を有することを特徴とする情報処理装置。
【請求項８】
印刷コマンドを解釈して前記印刷コマンドにより定められる印刷処理を実行する印刷装置と双方向通信可能な接続手段を介して接続され、前記印刷装置に送信される印刷コマンドを生成する情報処理装置の制御方法であって、
前記印刷装置が解釈可能な１つの印刷コマンドに、前記印刷コマンドを一意に識別するための識別情報を付加する付加ステップと、
前記印刷装置から、前記印刷装置にて進行中の印刷処理を指示する印刷コマンドに付加された識別情報を取得する識別情報取得ステップと、
前記印刷装置から、前記印刷装置にて進行中の印刷処理の進捗を示す進捗情報を取得する進捗情報取得ステップと、
前記識別情報取得ステップにより取得された前記識別情報と、前記進捗情報取得ステップにより取得された前記進捗情報から、前記情報処理装置により生成された印刷コマンドにより定められる印刷処理が前記印刷装置にて完了したと判断される場合、前記情報処理装置の処理を終了する終了ステップと、
を有することを特徴とする情報処理装置の制御方法。
【請求項９】
印刷コマンドを解釈して前記印刷コマンドにより定められる印刷処理を実行する印刷装置と双方向通信可能な接続手段を介して接続される情報処理装置の制御方法であって、
前記情報処理装置上で稼働するオペレーティングシステムに対し印刷コマンドの前記印刷装置への送信処理の実行を指示する指示ステップと、
前記送信処理の処理結果を記録する記録ステップと、
前記オペレーティングシステムに対し、前記指示ステップにより実行を指示された印刷コマンドの送信処理の終了を通知する通知ステップと、
前記印刷装置にて進行中の印刷処理の中止要求を取得する中止要求取得ステップと、
前記中止要求取得ステップにより印刷処理の中止要求が取得された場合、前記記録ステップにより記録された処理結果に基づき、少なくとも１回以上前記送信処理が成功しているか否かを判断する判断ステップと、
前記判断ステップにより少なくとも１回以上前記送信処理が成功していると判断された場合、前記印刷装置から、前記印刷装置の状態を示す状態情報を取得する情報取得ステップと、
前記情報取得ステップにより取得された状態情報が、前記印刷装置が印刷処理を継続できない状態であることを示す場合に、前記印刷コマンド送信処理の終了通知の前に、前記印刷装置にて進行中の印刷処理の中止を指示する中止指示ステップと
を有することを特徴とする情報処理装置の制御方法。
【請求項１０】
印刷コマンドを解釈して前記印刷コマンドにより定められる印刷処理を実行する印刷装置と双方向通信可能な接続手段を介して接続される情報処理装置の制御方法であって、
複数のスレッドから、前記印刷装置に対し印刷コマンドを出力する出力ステップと、
前記印刷装置にて進行中の印刷処理の中止要求を取得する中止要求取得ステップと、
前記中止要求取得ステップにより印刷処理の中止要求が取得された場合、前記出力ステップにより実行された出力処理の内、特定のスレッドにより実行される出力処理であり、かつ未完了である出力処理を停止する停止ステップと、
前記停止ステップによる停止処理後においても、未完了の出力処理が残存する場合、前記印刷装置の状態を示す状態情報を取得する状態情報取得ステップと、
前記状態情報取得ステップにより取得された状態情報が、前記印刷装置が印刷処理を継続できない状態であることを示す場合、残存する未完了の出力処理の全てを停止するステップと、
を有することを特徴とする情報処理装置の制御方法。
【請求項１１】
請求項８乃至１０何れか１項記載の制御方法をコンピュータに実行させるためのプログラム。
【請求項１２】
請求項１１に記載のプログラムを記憶した記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は印刷ジョブのキャンセル処理機能を提供する情報処理装置に関する。
【背景技術】
【０００２】
一般的な印刷システムは、紙媒体への記録を可能とする印刷装置と、印刷装置を制御し印刷ジョブのデータを生成する制御装置と、その双方を接続する通信インターフェースとから構成される。制御装置ではオペレーティングシステム（以後ＯＳとも称す）が稼働しており、アプリケーションやドライバ等の種々のソフトウェアがこのＯＳ上で動作可能である。アプリケーションにより作成した任意のドキュメントを印刷する際は、アプリケーション、プリンタドライバ、ＯＳそれぞれが規定の手順で必要な処理を実施することで印刷コマンドを生成し、生成された印刷コマンドを印刷装置へ送信することで印刷装置による紙媒体への印刷処理が開始される。従来のプリンタドライバは、ユーザやアプリケーションからの入力を管理するユーザインターフェースモジュール、印刷コマンドを生成するコマンド生成モジュール（以後コマンド生成フィルタとも称す）、制御装置と印刷装置間の通信処理を制御する通信制御モジュール（以後ランゲージモニタとも称す）を主たる要素として構成される。これらのモジュール群から構成されるプリンタドライバはＶｅｒｓｉｏｎ３ドライバ（以後Ｖ３ドライバとも称す）と称されている。ランゲージモニタは、ＯＳを介しコマンド生成フィルタにより生成された印刷コマンドを受信し、印刷装置へ送信することで印刷ジョブを印刷装置へ転送している。またランゲージモニタは、ユーザやアプリケーションから印刷ジョブのキャンセル要求を受信すると、印刷ジョブのキャンセル処理を実施する。このとき、印刷装置がキャンセル対象の印刷ジョブに対し印刷処理を実行している場合は、ランゲージモニタはＯＳに対し印刷装置への印刷キャンセルコマンドの送信を指示し、印刷ジョブに対する印刷処理を中止させる必要がある。また別手法として、ランゲージモニタが印刷コマンド送信処理実行中に、印刷ジョブのキャンセル要求を受信した場合、送信コマンドの区切り情報を検出し、検出した情報に従い、印刷コマンドの全てを印刷装置に送信したか否かを判定する。ランゲージモニタは、正常に終了していないと判断した場合、最適な補完データを生成し、該送信データに継続して補完データをプリンタに送信制御することで、印刷の中止を実現する手法が知られている（［特許文献１］参照）。
【０００３】
一方、近年Ｍｉｃｒｏｓｏｆｔ社により導入されたＷｉｎｄｏｗｓ（登録商標）８および（登録商標）ＲＴでは、上記構成と異なるプリンタドライバ構成が採用された。新しいプリンタドライバを構成するモジュール群は、ランゲージモニタが含まれていない。また使用可能な通信ポートは、Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ（以後ＵＳＢとも称す）ポート及びＷｅｂ  Ｓｅｒｖｉｃｅ  ｏｎ  Ｄｅｖｉｃｅ（以後ＷＳＤとも称す）ポートに限られる。この構成によるプリンタドライバは、Ｖｅｒｓｉｏｎ４ドライバ（以後Ｖ４ドライバとも称す）と称される。Ｖ４ドライバにおいては、コマンド生成フィルタにより生成された印刷コマンドの印刷装置への送信処理は、スプーラにより提供される。またユーザやアプリケーションから印刷ジョブのキャンセル要求が発行されると、スプーラにより印刷ジョブのキャンセル処理が実施される。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０００−２５９３６８号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、印刷装置と制御装置がＵＳＢ（商標）により接続され、かつ印刷装置にて印刷処理を継続できないエラーが生じている場合、エラーが生じた印刷ジョブに対しキャンセル要求が発行されても、スプーラはＯＳに対し印刷装置への印刷キャンセルコマンドの送信を指示しない場合がある。通常、スプーラは印刷ジョブのキャンセル要求を取得すると、印刷ジョブのキャンセル処理として、ＵＳＢポートモニタのＥｎｄＤｏｃＰｏｒｔ（）を実行した後に、ＯＳに対し印刷キャンセルコマンドの送信を指示する。しかしながら、印刷装置にて印刷処理を継続できないエラーが生じている場合は、ＵＳＢポートモニタがＥｎｄＤｏｃＰｏｒｔ（）内の処理を完了することができず、続くＯＳに対する印刷キャンセルコマンド送信要求を発行できない。これによりユーザやアプリケーションは、エラーが生じた印刷ジョブの印刷中止を望んでも、印刷装置のエラーは解除されず、印刷装置の初期状態への遷移または次の印刷ジョブの開始がされないという問題が生じる。
【０００６】
一方スプーラに代わり、Ｖ４ドライバの構成要素であるコマンド生成フィルタがユーザやアプリケーションから印刷ジョブのキャンセル要求を受信し、ＯＳに対し印刷装置への印刷キャンセルコマンドの送信を指示することも可能である。ところが、Ｖ４ドライバにおいては、印刷データの印刷装置への送信処理はスプーラにより制御され、コマンド生成フィルタは生成した印刷データの送信に関与することができない。そのためコマンド生成フィルタはどの印刷ジョブが印刷装置にて処理されているのか判断することができない。通常、印刷キャンセルコマンドは、印刷装置がキャンセル対象の印刷ジョブを処理していない場合は、印刷装置に対して発行されるべきではない。すなわち、この制限は、コマンド生成フィルタは印刷キャンセルコマンドの送信をＯＳに指示すべきか否かを適切に判定することができないことを意味する。
【０００７】
本発明は上記の課題を解決するためになされたもので、ランゲージモニタを構成要素として含まないプリンタドライバであっても、コマンド生成フィルタまたはスプーラが印刷装置の状況を適切に判定することで、適切な印刷ジョブのキャンセル機能を実施することが可能な方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明の情報処理装置は、印刷コマンドを解釈して前記印刷コマンドにより定められる印刷処理を実行する印刷装置と双方向通信可能な接続手段を介して接続され、前記印刷装置に送信される印刷コマンドを生成する情報処理装置であって、前記印刷装置が解釈可能な１つの印刷コマンドに、前記印刷コマンドを一意に識別するための識別情報を付加する付加手段と、前記印刷装置から、前記印刷装置にて進行中の印刷処理を指示する印刷コマンドに付加された識別情報を取得する識別情報取得手段と、前記印刷装置から、前記印刷装置にて進行中の印刷処理の進捗を示す進捗情報を取得する進捗情報取得手段と、前記識別情報取得手段により取得された前記識別情報と、前記進捗情報取得手段により取得された前記進捗情報から、前記情報処理装置により生成された印刷コマンドにより定められる印刷処理が前記印刷装置にて完了したと判断される場合、前記情報処理装置の処理を終了する終了手段と、を有することを特徴とする。
【０００９】
本発明の情報処理装置は、印刷コマンドを解釈して前記印刷コマンドにより定められる印刷処理を実行する印刷装置と双方向通信可能な接続手段を介して接続される情報処理装置であって、前記情報処理装置上で稼働するオペレーティングシステムに対し印刷コマンドの前記印刷装置への送信処理の実行を指示する指示手段と、前記送信処理の処理結果を記録する記録手段と、前記オペレーティングシステムに対し、前記指示手段により実行を指示された印刷コマンドの送信処理の終了を通知する通知手段と、前記印刷装置にて進行中の印刷処理の中止要求を取得する中止要求取得手段と、前記中止要求取得手段により印刷処理の中止要求が取得された場合、前記記録手段により記録された処理結果に基づき、少なくとも１回以上前記送信処理が成功しているか否かを判断する判断手段と、前記判断手段により少なくとも１回以上前記送信処理が成功していると判断された場合、前記印刷装置から、前記印刷装置の状態を示す状態情報を取得する情報取得手段と、前記情報取得手段により取得された状態情報が、前記印刷装置が印刷処理を継続できない状態であることを示す場合に、前記印刷コマンド送信処理の終了通知の前に、前記印刷装置にて進行中の印刷処理の中止を指示する中止指示手段とを有することを特徴とする。
【００１０】
本発明の情報処理装置は、印刷コマンドを解釈して前記印刷コマンドにより定められる印刷処理を実行する印刷装置と双方向通信可能な接続手段を介して接続される情報処理装置であって、複数のスレッドから、前記印刷装置に対し印刷コマンドを出力する出力手段と、前記印刷装置にて進行中の印刷処理の中止要求を取得する中止要求取得手段と、前記中止要求取得手段により印刷処理の中止要求が取得された場合、前記出力手段により実行された出力処理の内、特定のスレッドにより実行される出力処理であり、かつ未完了である出力処理を停止する停止手段と、前記停止手段による停止処理実行後においても、未完了の出力処理が残存する場合、前記印刷装置の状態を示す状態情報を取得する状態情報取得手段と、前記状態情報取得手段により取得された取得情報が、前記印刷装置が印刷処理を継続できない状態であることを示す場合、残存する未完了の出力処理の全てを停止する手段と、を有することを特徴とする。
【発明の効果】
【００１１】
本発明によれば、双方向通信制御モジュールを構成要素として含まないプリンタドライバにおいて、適切な印刷ジョブのキャンセル機能を実施することが可能となる。
【図面の簡単な説明】
【００１２】
【図１】印刷装置と情報処理装置によって構成される印刷システムを示すブロック図
【図２】Ｖ４プリンタドライバの構成を示す概念図
【図３】ＵＢＳポートモニタの処理を示すフローチャート
【図４】実施形態１のコマンド生成フィルタの処理を示すフローチャート
【図５】印刷データに付加する識別情報の例を示す図
【図６】コマンド生成フィルタにより生成される印刷コマンドの全体像を示す概略図
【図７】コマンド生成フィルタによる印刷ジョブキャンセル処理を示すサブフローチャート
【図８】実施形態２のコマンド生成フィルタの処理を示すフローチャート
【図９】スプーラの処理を示すフローチャート
【図１０】実施形態２のスプーラの処理を示すフローチャート
【図１１】ＣａｎｃｅｌＩｏ（）の内部処理を示すフローチャート
【発明を実施するための形態】
【００１３】
以下、添付図面を参照して本発明の好適な実施の形態を詳しく説明する。尚、以下の実施の形態は特許請求の範囲に係る本発明を限定するものでなく、また本実施の形態で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。
【００１４】
＜実施形態１＞
図１は情報処理装置１１０と情報処理装置１１０に接続された印刷装置１２０により構成される印刷システムの全体構成を示すブロック図の一例である。情報処理装置１１０は入力Ｉ／Ｆ１１１、ＣＰＵ１１２、ＲＯＭ１１３、出力Ｉ／Ｆ１１４、外部記憶装置１１５、ＲＡＭ１１６、入力装置１１７、出力装置１１８、入出力Ｉ／Ｆ１１９を有する。ＲＯＭ１１３は初期化プログラムを保存し、外部記憶装置１１５はＯＳ、プリンタドライバやその他各種のデータが保存されている。ＲＡＭ１１６は外部記憶装置１１５に保存される各種プログラムがワークメモリーとして使用する。入力装置１１７はデータ入力や動作指示に使用され入力Ｉ／Ｆ１１１に接続されている。出力装置１１８はデータ表示や状態の通知に使用され出力Ｉ／Ｆ１１４に接続されている。
【００１５】
印刷装置１２０はＲＡＭ１２１、ＲＯＭ１２２、プリントエンジン１２３、ＣＰＵ１２４、入出力Ｉ／Ｆ１２５から構成される。情報処理装置１１０と印刷装置１２０は双方向通信可能な接続手段であるＵＳＢ（商標）ケーブル１３０により接続されている。ＲＡＭ１２１はＣＰＵ１２４のワークメモリーとして使用され、受信したデータの一時保存用バッファとしても利用される。ＲＯＭ１２２は制御命令を保存している。プリントエンジン１２３はＲＡＭ１２１に保存されたデータに基づき印刷を行う。ＣＰＵ１２４はＲＯＭ１２２に保存されている制御命令に従い印刷装置１２０を制御する。なお、本実施形態においては情報処理装置１１０および印刷装置１２０の処理分担を前記のように示したが、処理の分担形態はこれに依らない。
【００１６】
図２は本実施形態の前提となるＶ４プリンタドライバの構成を概念的に表したブロック図の一例である。アプリケーション２０１が作成した印刷データは、情報処理装置１１０上で稼働するオペレーティングシステム（ＯＳ）の印刷サポート機能２０２を介しスプールデータ２０５としてスプーラ２０３のプリントキュー２０４に一時的に蓄積される。蓄積されたスプールデータ２０５は、コマンド生成フィルタ２０６により印刷装置１２０が解釈可能な印刷コマンドに変換された後に、印刷装置１２０に送信され印刷するよう構成されている。アプリケーション２０１は印刷指示を行う際にＯＳの印刷サポート機能２０２を介して、ＯＳのユーザインターフェースモジュール２０７から返却された印刷設定情報を印刷データに付加する。印刷設定情報は、アプリケーション２０１からの印刷開始指示に先立って設定された情報である。コマンド生成フィルタ２０６は、入力された印刷データに対し、加工、変換、無変換、生成等の処理を加え、印刷装置１２０が解釈可能なデータを出力する。コマンド生成フィルタ２０６への印刷データの入力処理、印刷データに対する所定の処理は、不図示のＯＳのコマンド生成フィルタ制御機能により制御される。コマンド生成フィルタ２０６は、受信した印刷データに付加された印刷設定情報に従って、印刷データに変換を施し印刷装置１２０が解釈可能な印刷コマンドを生成する。その後、コマンド生成フィルタ２０６は生成した印刷コマンドを、情報処理装置１１０のＲＡＭ１１６、及び外部記憶装置１１５に順次出力する。コマンド生成フィルタ２０６によりＲＡＭ１１６、及び外部記憶装置１１５へ出力された印刷コマンドは、スプーラ２０３により順次読み出され、ＵＳＢポートモニタ２０８を経由し印刷装置１２０へ送信される。またＵＳＢポートモニタ２０８はスプーラ２０３からの指示に応じて、ポートモニタ拡張ファイル２０９の記述に従い動作することで印刷装置１２０から任意の情報を取得することが可能である。図３はＵＳＢポートモニタ２０８による印刷装置１２０からの情報取得処理の処理フローを示している。ＵＳＢポートモニタ２０８は、スプーラ２０３からの指示によりＳ３０１にて処理を開始する。次に、ＵＳＢポートモニタ２０８は、ポートモニタ拡張ファイル２０９に従い動作することで、スプーラ２０３から指定された情報を印刷装置１２０から取得する（Ｓ３０２）。その後、ＵＳＢポートモニタ２０８は、取得した情報をスプーラ２０３へ通知し（Ｓ３０３）、Ｓ３０４にて処理を終了する。ＵＳＢポートモニタ２０８が印刷装置１２０から取得した情報を、スプーラ２０３へ通知することで、コマンド生成フィルタ２０６はＵＳＢポートモニタ２０８が印刷装置１２０から取得した情報を、スプーラ２０３を経由し取得することが可能となる。
【００１７】
図４は本実施形態におけるコマンド生成フィルタ２０６の処理フローを示す。始めにコマンド生成フィルタ２０６は、ＯＳのコマンド生成フィルタ制御機能により起動され処理を開始する（Ｓ４０１）。次に、コマンド生成フィルタ２０６は、アプリケーション２０１が作成した印刷データをＯＳのコマンド生成フィルタ制御機能から受信する（Ｓ４０２）。続いてコマンド生成フィルタ２０６は、情報処理装置１１０と印刷装置１２０との間の通信ポートの種別を判定する（Ｓ４０３）。Ｓ４０３においてＵＳＢポートにより両者が接続されている場合、次にコマンド生成フィルタ２０６は、受信した印刷データに対し、印刷コマンドへの変換および出力処理の開始を示す情報を、現在の処理フェーズ情報として記録する（Ｓ４０４）。次に、コマンド生成フィルタ２０６は、受信した印刷データに対し、該印刷データを一意に識別するための識別情報を付加する（Ｓ４０５）。図５は印刷データに付加される識別情報の例を示す。図５に示す識別情報は数値、ハイフネーションおよびアルファベットにより表現されているが、識別情報の構成はこの例に限定されるものではない。次に、コマンド生成フィルタ２０６は、受信した印刷データに付加された印刷設定情報に従って、印刷データに対し変換を施し印刷装置１２０が解釈可能な識別情報を含む印刷コマンドを生成する（Ｓ４０６）。ここでコマンド生成フィルタ２０６は印刷コマンド生成処理に先立ち、受信した印刷データに付加された印刷設定情報に従って、印刷データのページ順序の変更や、複数ページを１ページとして再構成するページ構成処理を追加してもよい。図６はコマンド生成フィルタ２０６により生成される印刷コマンドの全体像を示す概略図である。コマンド生成フィルタ２０６により生成されるコマンドは、識別情報格納部６０１と制御コマンド格納部６０２から成る。識別情報格納部には、Ｓ４０５にて付加される印刷データを一意に示す情報が格納される。制御コマンド格納部には、コマンド生成フィルタ２０６が受信した印刷データに対し所定の変換を施すことで得られる、印刷装置１２０の動作を制御するコマンドが格納される。続いて、コマンド生成フィルタ２０６は、識別情報を含む印刷コマンドを情報処理装置１１０の記憶領域（１１５または１１６）内に一旦出力する（Ｓ４０７）。この時、コマンド生成フィルタ２０６により出力された識別情報を含む印刷コマンドは、印刷装置１２０が印刷コマンドを受信可能な状態であるならば、スプーラ２０３により順次印刷装置１２０へ送信される。印刷装置１２０が印刷コマンドを受信可能な状態でない場合は、印刷装置１２０が印刷コマンドを受信可能な状態に遷移するまで、スプーラ２０３は送信処理を待機する。
【００１８】
Ｓ４０８では、印刷コマンドへの変換処理が未完了である印刷データの存在を確認し、変換されていない印刷データがあればＳ４０９へ進む。Ｓ４０９において、コマンド生成フィルタ２０６により生成された印刷コマンドが示す印刷データに対し、印刷処理のキャンセル要求が発行されているか否かを確認する。コマンド生成フィルタは、外部プログラムから呼び出し可能な関数として公開しているＳｈｕｔｄｏｗｎＯｐｅｒａｔｉｏｎ（）がＯＳにより呼び出された場合に、キャンセル要求が発行されたと判断する。キャンセル要求が発行されている場合はＳ４２１へ進む。キャンセル要求が発行されていない場合はＳ４０６へ戻り、コマンド生成フィルタ２０６は変換処理が未完了である印刷データの変換および出力処理を継続する。Ｓ４２１の処理内容は図７を用いて後述する。
【００１９】
Ｓ４０８において印刷データが全て印刷コマンドへ変換されていることを検知すると、コマンド生成フィルタ２０６は、現在の処理フェーズ情報を印刷コマンドの変換処理が完了したことを示す情報に更新する（Ｓ４１０）。続いて、コマンド生成フィルタ２０６は、印刷装置１２０にて処理中の印刷コマンドに付加された識別情報の取得を、スプーラ２０３に対し要求する（Ｓ４１１）。要求を受けたスプーラ２０３は、ＵＳＢポートモニタ２０８に対し、印刷装置１２０にて処理中の印刷コマンドに付加された識別情報の取得を指示する。スプーラ２０３より指示を受けたＵＳＢポートモニタ２０８は、図３に示す手順に従い、該識別情報を取得しスプーラ２０３へ通知する。続いて、コマンド生成フィルタ２０６はＳ４１２においてスプーラ２０３からＵＳＢポートモニタ２０８が取得した識別情報を取得する。その後、コマンド生成フィルタ２０６は取得した識別情報に基づき、印刷装置１２０にて処理中の印刷コマンドが、自身で生成した印刷コマンドであるか否かを判定する（Ｓ４１３）。Ｓ４１３における判定が真である場合はＳ４１５へ進み、そうでない場合はＳ４１４へ進む。Ｓ４１４において、コマンド生成フィルタ２０６により生成された印刷コマンドが示す印刷データに対し、印刷処理のキャンセル要求が発行されているか否かを確認する。キャンセル要求が発行されている場合はＳ４２１へ進む。キャンセル要求が発行されていない場合はＳ４１１へ戻る。Ｓ４１３における判定が真である場合、コマンド生成フィルタ２０６は、現在の処理フェーズ情報を、印刷装置１２０にてコマンド生成フィルタ２０６が出力した印刷コマンドに対する印刷処理が、進行中であることを示す情報へと更新する（Ｓ４１５）。次に、コマンド生成フィルタ２０６は、印刷装置１２０にて進行する印刷処理の進捗情報の取得を、スプーラ２０３に対し要求する（Ｓ４１６）。要求を受けたスプーラ２０３は、ＵＳＢポートモニタ２０８に対し、印刷装置１２０にて進行する印刷処理の進捗情報の取得を指示する。スプーラ２０３より指示を受けたＵＳＢポートモニタ２０８は、図３に示す手順に従い、該進捗情報を取得しスプーラ２０３へ通知する。続いて、コマンド生成フィルタ２０６はＳ４１７においてスプーラ２０３からＵＳＢポートモニタ２０８が取得した該進捗情報を取得する。その後、コマンド生成フィルタ２０６はＳ４１６にて取得した該進捗情報に基づき、印刷装置１２０における印刷処理が完了したか否かを判定する（Ｓ４１８）。Ｓ４１８における判定が真である場合のみ、コマンド生成フィルタ２０６は、Ｓ４２０にてＯＳのコマンド生成フィルタ制御機能へ制御を戻すことによって、Ｓ４２５にてコマンド生成フィルタ２０６の処理を終了する。通常スプーラ２０３は、ＵＳＢポートモニタ２０８へ送信すべき印刷コマンドに対する送信処理を完了すると、送信した印刷コマンドに対応する印刷ジョブをプリントキュー２０４から削除する。これにより、印刷装置１２０がスプーラ２０３より受信した印刷コマンドに対して実施する印刷処理が未完了であっても、該印刷コマンドに対応する印刷ジョブがプリントキュー２０４に存在しない場面が生ずる。この場合、プリントキュー２０４に印刷ジョブが存在しないため、ユーザやアプリケーションは処理中の該印刷ジョブに対するキャンセル要求を発行することができない。一方、スプーラ２０３は、コマンド生成フィルタ２０６がＯＳのコマンド生成フィルタ制御機能へ制御を返却するまで、コマンド生成フィルタ２０６が出力した印刷コマンドに対する送信処理を完了することができない。すなわち、Ｓ４１６、Ｓ４１７、Ｓ４１８を実施することで、コマンド生成フィルタ２０６が出力した印刷コマンドに対する印刷処理が完了するまで、該印刷コマンドに対応する印刷ジョブをプリントキュー２０４に保持しておくことが可能となる。
【００２０】
図７は、図４に図示されるコマンド生成フィルタ２０６によるキャンセル処理（Ｓ４２１）の処理フローを示す。図４中のＳ４０９、Ｓ４１４、Ｓ４１９の判定が真である場合に、コマンド生成フィルタ２０６は印刷ジョブのキャンセル処理を開始する（Ｓ７０１）。次に、コマンド生成フィルタ２０６は、情報装置１１０の所定の領域に記録されている現在の処理フェーズ情報を取得し（Ｓ７０２）、取得したフェーズ情報が示す内容を確認する（Ｓ７０３）。Ｓ７０３において、現在の処理フェーズ情報が、コマンド生成フィルタ２０６による印刷コマンドの生成および出力処理が開始されていることを示す場合は、Ｓ７０４へ進む。続いて、コマンド生成フィルタ２０６は、印刷装置１２０にて処理中の印刷コマンドに付加された識別情報の取得を、スプーラ２０３に対し要求する（Ｓ７０４）。要求を受けたスプーラ２０３は、ＵＳＢポートモニタ２０８に対し、印刷装置１２０にて処理中の印刷コマンドに付加された識別情報の取得を指示する。スプーラ２０３より指示を受けたＵＳＢポートモニタ２０８は、図３に示す手順に従い、該識別情報を取得しスプーラ２０３へ通知する。続いて、コマンド生成フィルタ２０６はＳ７０５においてスプーラ２０３からＵＳＢポートモニタ２０８が取得した識別情報を取得する。その後、コマンド生成フィルタ２０６は取得した識別情報に基づき、印刷装置１２０にて処理中の印刷コマンドが、自身で生成した印刷コマンドであるか否かを判定する（Ｓ７０６）。Ｓ７０６における判定が真である場合はＳ７０７へ進む。Ｓ７０７では、コマンド生成フィルタ２０６は印刷装置１２０に対する印刷キャンセルコマンドの発行をＯＳに対し要求する。印刷キャンセルコマンドを受信した印刷装置１２０は、進行中の印刷処理を即座に中止し初期状態に遷移する。次に、コマンド生成フィルタ２０６は、自身が出力した印刷コマンドに対応する印刷ジョブを、プリントキュー２０４から削除し、印刷ジョブのキャンセル処理を終了する（Ｓ７１０）。一方、Ｓ７０６における判定が偽である場合は、コマンド生成フィルタ２０６は印刷装置１２０に対する印刷キャンセルコマンドの発行をＯＳに対し要求せず、Ｓ７０８にて自身が出力した印刷コマンドに対応する印刷ジョブを、プリントキュー２０４から削除する。その後、コマンド生成フィルタ２０６は印刷ジョブのキャンセル処理を終了する（Ｓ７１０）。コマンド生成フィルタ２０６による印刷コマンドの出力処理が開始されると、スプーラ２０３は印刷装置１２０が印刷コマンドを受信可能な状態であるならば、出力された印刷コマンドを順次印刷装置１２０へ送信する。一方、印刷装置１２０において先に入力された印刷コマンドが処理されている場合は、印刷装置１２０が印刷コマンドを受信可能な状態に遷移するまで、スプーラ２０３は送信処理を待機する。そのため、コマンド生成フィルタ２０６による印刷コマンドの生成および出力処理進行中に印刷ジョブのキャンセル要求を受信した場合は、コマンド生成フィルタ２０６はＳ７０６にて自身が出力した印刷コマンドが印刷装置１２０にて処理されていることを検知した場合のみ、ＯＳに対し印刷キャンセルコマンドの発行を要求する必要がある。
【００２１】
一方、Ｓ７０３において現在の処理フェーズ情報が、コマンド生成フィルタ２０６による印刷コマンドの生成および出力処理が完了していることを示す場合は、Ｓ７０８へ進む。コマンド生成フィルタ２０６は、Ｓ７０８にて自身が出力した印刷コマンドに対応する印刷ジョブをプリントキュー２０４から削除した後、Ｓ７１０にて印刷ジョブのキャンセル処理を終了する。その後、コマンド生成フィルタ２０６は印刷ジョブのキャンセル処理を終了する（Ｓ７１０）。該処理フェーズにおいては、印刷装置１２０はコマンド生成フィルタ２０６が出力した印刷コマンドに対する印刷処理を開始していないことは明白である。そのためコマンド生成フィルタ２０６は、Ｓ７０３後にＯＳに対し印刷キャンセルコマンドの発行を要求する必要はなく、自身が出力した印刷コマンドに該当する印刷ジョブをプリントキュー２０４から削除するのみでよい。
【００２２】
他方、Ｓ７０３において現在の処理フェーズ情報が、印刷装置１２０にてコマンド生成フィルタ２０６が出力した印刷コマンドに対する印刷処理が、進行中であることを示す場合は、Ｓ７０９へ進む。コマンド生成フィルタ２０６は、Ｓ７０９にてＯＳに対し印刷キャンセルコマンドの発行を要求し、Ｓ７０８にて自身が出力した印刷コマンドに対応する印刷ジョブをプリントキュー２０４から削除する。その後、コマンド生成フィルタ２０６は印刷ジョブのキャンセル処理を終了する（Ｓ７１０）。該処理フェーズにおいて印刷装置１２０が、コマンド生成フィルタ２０６により出力された印刷コマンドに対する印刷処理を進行していることは明白である。そのためコマンド生成フィルタ２０６は、Ｓ７０３後に印刷装置１２０にて印刷処理中の印刷コマンドに付加された識別情報を確認なしに、ＯＳに対し印刷キャンセルコマンドの発行を要求してよい。
【００２３】
以上により、印刷ジョブのキャンセル要求を受信したコマンド生成フィルタ２０６は、印刷装置１２０にて処理中の印刷コマンドに付加された識別情報を取得することで、処理中の印刷コマンドが自身で出力した印刷コマンドであるか否かを判断する。さらに、コマンド生成フィルタ２０６は、印刷装置１２０にて処理中の印刷コマンドが自身で出力した印刷コマンドであると判断した場合のみ、印刷キャンセルコマンドの発行をＯＳに要求する。これらの処理により、キャンセル対象の印刷ジョブが印刷装置１２０にて処理されている場合のみ、印刷キャンセルコマンドが印刷装置１２０へ発行され、適切な印刷ジョブのキャンセル機能を実現することが可能となる。さらに、コマンド生成フィルタ２０６は、処理フェーズ情報を参照することで、印刷装置１２０対する識別情報の取得要求回数を抑制することが可能となり、より効率的な印刷ジョブのキャンセル機能を実現することが可能となる。
【００２４】
一方、情報処理装置１１０と印刷装置１２０は、ＵＳＢポートの他にＷＳＤポートを介して接続することも可能である。通信ポートにＷＳＤポートが使用されている場合、コマンド生成フィルタ２０６はＳ４０３の判定の後にＳ４２２へと進む。Ｓ４２２では、コマンド生成フィルタ２０６は、受信した印刷データに付加された印刷設定情報に従って、印刷データに対し変換を施し印刷装置１２０が解釈可能な印刷コマンドを生成する。続いて、コマンド生成フィルタ２０６は変換した印刷コマンドを情報処理装置１１０の記憶領域（１１５または１１６）内に一旦出力する（Ｓ４２３）。Ｓ４２４では、印刷コマンドへの変換処理が未完了である印刷データの存在を確認し、変換されていない印刷データがあればＳ４２２へ戻る。印刷データに対する変換処理が全て完了している場合、コマンド生成フィルタ２０６は、Ｓ４２０にてＯＳのコマンド生成フィルタ制御機能へ制御を戻し、Ｓ４２５にてコマンド生成フィルタ２０６の処理を終了する。
【００２５】
情報処理装置１１０と印刷装置１２０を、ＷＳＤポートを介して接続する場合、ＷＳＤポートモニタ（不図示）により両者間の通信が制御される。ＷＳＤポートモニタは、標準機能として、印刷装置１２０における印刷処理の進捗を判断し、印刷処理が完了するまで印刷ジョブをプリントキューに保持する機能を持つ。そのため、情報処理装置１１０と印刷装置１２０がＷＳＤポートを介して接続されている場合、コマンド生成フィルタ２０６は、印刷処理の進捗状況を管理する必要はない。つまり、コマンド生成フィルタ２０６は、印刷コマンドの生成および出力処理を完了すると即座にＯＳのコマンド生成フィルタ制御機能へ制御を戻してよい。さらに、ＷＳＤポートモニタは、標準機能として、印刷装置１２０にて進行中の印刷処理に対するキャンセル要求を取得し、キャンセルコマンドを発行する機能も併せ持つ。そのため、コマンド生成フィルタ２０６は、キャンセル要求を受信しても、ＯＳに対し印刷装置１２０へのキャンセルコマンド発行要求を行う必要はない。
【００２６】
＜実施形態２＞
本実施形態では、実施形態１とは異なる手法で課題を解決する例を述べる。本実施形態では、印刷ジョブのキャンセル要求はスプーラ２０３が受信する。さらに、スプーラ２０３は、印刷ジョブのキャンセル要求受信時の印刷装置１２０のステータスに応じ、通常の印刷ジョブの終了処理に、ＯＳに対する印刷キャンセルコマンドの発行要求を追加することにより、課題を解決する。なお、以後、特に言及が無い点は、実施形態１と同等の構成である。
【００２７】
図８は本実施形態における、コマンド生成フィルタ２０６の処理フローを示す。コマンド生成フィルタ２０６は、ＯＳのコマンド生成フィルタ制御機能により起動され（Ｓ８０１）、アプリケーション２０１が生成した印刷データを受信する（Ｓ８０２）。次に、コマンド生成フィルタ２０６は、受信した印刷データに対し所定の変換処理を施すことで、印刷装置１２０が解釈可能な印刷コマンドを生成する（Ｓ８０３）。その後、コマンド生成フィルタ２０６は生成した印刷コマンドを、情報処理装置１１０のＲＡＭ１１６へ出力する（Ｓ８０４）。Ｓ８０５では、コマンド生成フィルタ２０６は、印刷コマンドへの変換処理が施されていない印刷データが残存するか否かを判定する。Ｓ８０５の判定が真であればＳ８０３へ戻り、未変換の印刷データに対し変換処理を施す。Ｓ８０４の判定が偽であれば、コマンド生成フィルタ２０６は処理を終了する（Ｓ８０６）。
【００２８】
図９はスプーラ２０３の処理フローを示す。コマンド生成フィルタ２０６により、印刷装置１２０が解釈可能な印刷コマンドがＲＡＭ１２０へ出力されると、スプーラ２０３は印刷コマンドの送信処理を開始する（Ｓ９０１）。次に、スプーラ２０３はＵＳＢポートモニタ２０８のＳｔａｒｔＤｏｃＰｏｒｔ（）を実行し、ＵＳＢポートモニタ２０８に対し印刷コマンドの送信処理の開始を通知する（Ｓ９０２）。次に、スプーラ２０３は、ＲＡＭ１１６に印刷装置１２０へ送信すべき印刷コマンドが残存しているか否かを判定する（Ｓ９０３）。送信すべき印刷コマンドが残存している場合は、続いて、スプーラ２０３は、印刷コマンド送信処理のキャンセル要求が発行されたか否かを判定する（Ｓ９０４）。Ｓ９０３の判定が偽であれば、スプーラ２０３はＵＳＢポートモニタ２０８のＷｒｉｔｅＰｏｒｔ（）を実行し、ＵＳＢポートモニタ２０８へ印刷コマンドを転送する（Ｓ９０５）。ＵＳＢポートモニタ２０８は受信した印刷コマンドを順次印刷装置１２０へ送信する。次に、スプーラ２０３は、ＵＳＢポートモニタ２０８のＷｒｉｔｅＰｏｒｔ（）が正常に完了したか否かを判定する（Ｓ９０６）。Ｓ９０６の判定が真であれば、スプーラ２０３はＵＳＢポートモニタ２０８のＷｒｉｔｅＰｏｒｔ（）が正常に完了したことを示す情報を処理結果情報として所定の領域に記録する（Ｓ９０７）。その後、スプーラはＳ９０３へ戻る。またＳ９０６の判定が否であれば、スプーラ２０３は即座にＳ９０３へ戻る。
【００２９】
一方、Ｓ９０３にて送信すべき印刷データが残存していなければ、スプーラ２０３は、ＵＳＢポートモニタ２０８のＥｎｄＤｏｃＰｏｒｔ（）を実行し、ＵＳＢポートモニタ２０８に印刷コマンドの送信処理の終了を通知する（Ｓ９０８）。その後、スプーラ２０３は、送信処理が完了した印刷コマンドに対応する印刷ジョブをプリントキュー２０４から削除し（Ｓ９０９）、印刷コマンドの送信処理を終了する（Ｓ９１６）。
【００３０】
次にＳ９０４の判定によりスプーラ２０３が送信処理のキャンセル要求を検知した場合の処理について述べる。Ｓ９０４にてスプーラ２０３が送信処理のキャンセル要求を検知すると、スプーラ２０３は、Ｓ９０７にてスプーラ２０３が記録した処理結果情報を参照し、ＵＳＢポートモニタ２０８のＷｒｉｔｅＰｏｒｔ（）が正常に完了したか否かを判定する（Ｓ９１０）。
【００３１】
Ｓ９１０にて該処理結果情報は、ＷｒｉｔｅＰｏｒｔ（）が正常に完了したことを示す情報でない場合、スプーラ２０３は、ＵＳＢポートモニタ２０８のＥｎｄＤｏｃＰｏｒｔ（）を実行し、ＵＳＢポートモニタ２０８に印刷コマンドの送信処理の終了を通知する（Ｓ９０８）。その後、スプーラ２０３は、送信処理が完了した印刷コマンドに対応する印刷ジョブをプリントキュー２０４から削除し（Ｓ９０９）、印刷コマンドの送信処理を終了する（Ｓ９１６）。印刷装置１２０は、Ｓ９０５におけるＷｒｉｔｅＰｏｒｔ（）が少なくとも１回以上正常に完了しない限り、スプーラ２０３の送信する印刷コマンドに対し印刷処理を開始しない。つまり、Ｓ９１０における判定が否である場合は、印刷装置１２０にてキャンセルすべき印刷ジョブに対する処理が進行しておらず、スプーラ２０３はＯＳに対し印刷装置１２０への印刷キャンセルコマンドの発行を要求すべきでない。一方、Ｓ９１０にて該処理結果情報は、ＷｒｉｔｅＰｏｒｔ（）が正常に完了したことを示す情報である場合、続いて、スプーラ２０３はＵＳＢポートモニタ２０８から印刷装置１２０のステータスを示す状態情報を取得する（Ｓ９１１）。その後、スプーラ２０３は、該取得した状態情報に基づき、該状態情報が、印刷装置１２０にてスプーラ２０３が送信中の印刷コマンドに対する印刷処理を継続できないエラーが生じていることを示すか否かを判断する（Ｓ９１２）。Ｓ９１２にて印刷装置１２０が印刷処理を継続できないエラー状態でないことを検知した場合、スプーラ２０３はＵＳＢポートモニタ２０８のＥｎｄＤｏｃＰｏｒｔ（）を実行し、ＵＳＢポートモニタ２０８に印刷コマンドの送信処理の終了を通知する（Ｓ９１３）。次に、スプーラ２０３はＯＳに対し印刷装置１２０への印刷キャンセルコマンドの発行を要求する（Ｓ９１４）。印刷装置１２０は印刷キャンセルコマンドを受信すると、スプーラ２０３により送信された印刷コマンドに対する印刷処理を中止し、初期状態へと遷移する。その後、スプーラ２０３は、送信処理が完了した印刷コマンドに対応する印刷ジョブをプリントキュー２０４から削除し（Ｓ９０９）、印刷コマンドの送信処理を終了する（Ｓ９１６）。一方、Ｓ９１２にて印刷装置１２０が印刷処理を継続できないエラー状態であることを検知すると、スプーラ２０３はＵＳＢポートモニタ２０８のＥｎｄＤｏｃＰｏｒｔ（）の実行処理（Ｓ９１３）に先立ち、ＯＳに対し印刷キャンセルコマンドの発行を要求する（Ｓ９１５）。印刷装置１２０は印刷キャンセルコマンドを受信すると、スプーラ２０３により送信された印刷コマンドに対する印刷処理を中止し、印刷処理を継続できないエラー状態から初期状態へと遷移する。その後、スプーラ２０３はＵＳＢポートモニタ２０８のＥｎｄＤｏｃＰｏｒｔ（）を実行（Ｓ９１３）する。次に、スプーラ２０３はＯＳに対し印刷装置１２０への印刷キャンセルコマンドの発行を要求する（Ｓ９１４）。続いて、スプーラ２０３は、送信処理が完了した印刷コマンドに対応する印刷ジョブをプリントキュー２０４から削除し（Ｓ９０９）、印刷コマンドの送信処理を終了する（Ｓ９１６）。
【００３２】
Ｓ９０５においてＷｒｉｔｅＰｏｒｔ（）が少なくとも１回以上正常に完了すると、印刷装置１２０はスプーラ２０３の送信する印刷コマンドに対する印刷処理を開始する。そのため、スプーラ２０３は、Ｓ９１０にてＵＳＢポートモニタ２０８のＷｒｉｔｅＰｏｒｔ（）が正常に完了したことを検知した場合は、ＯＳに対し印刷キャンセルコマンドの発行を要求すべきである。しかしながら、印刷装置１２０にて印刷処理を継続できないエラーが生じている場合、ＵＳＢポートモニタ２０８はＥｎｄＤｏｃＰｏｒｔ（）内の処理を完了することができない。そこで、印刷装置１２０が印刷処理を継続できないエラー状態である場合は、スプーラ２０３は、ＵＳＢポートモニタ２０８のＥｎｄＤｏｃＰｏｒｔ（）を実行する前に、ＯＳに対する印刷キャンセルコマンドの送信要求処理を追加する。これにより、ＵＳＢポートモニタ２０８のＥｎｄＤｏｃＰｏｒｔ（）が実行される前に、印刷装置１２０はエラー状態から初期状態に遷移するため、ＵＳＢポートモニタ２０８はＥｎｄＤｏｃＰｏｒｔ（）内の処理を正常に完了することが可能となる。ところで、ＵＳＢポートモニタ２０８のＷｒｉｔｅＰｏｒｔ（）の実行による、スプーラ２０３からＵＳＢポートモニタ２０８への印刷コマンド送信処理と、ＵＳＢポートモニタ２０８から印刷装置１２０への印刷コマンド送信処理は非同期的に処理される。そのため、印刷キャンセルコマンドを受信した印刷装置１２０がエラー状態から印刷コマンドを受信可能な状態へ遷移すると、ＵＳＢポートモニタ２０８の内部記憶領域（不図示）に印刷装置１２０へ未達の印刷コマンドが存在すれば、ＵＳＢポートモニタ２０８は該印刷コマンドを印刷装置１２０へ送信する場合がある。これにより、印刷装置１２０は受信すべきでない印刷コマンドを受信し、アプリケーションやユーザが予期しない処理を開始してしまう恐れがある。ＵＳＢポートモニタ２０８の内部記憶領域（不図示）に保持されている印刷装置１２０へ未達の印刷コマンドは、ＵＳＢポートモニタ２０８のＥｎｄＤｏｃＰｏｒｔ（）の実行により削除される。このため、スプーラ２０３は、ＵＳＢポートモニタ２０８のＥｎｄＤｏｃＰｏｒｔ（）実行後に、再度ＯＳに対する印刷キャンセルコマンド発行要求を実施し、確実に印刷装置１２０を初期状態へ遷移させる必要がある。
【００３３】
以上により、印刷装置１２０が印刷処理を継続できないエラー状態である場合、スプーラ２０３はＵＳＢポートモニタ２０８のＥｎｄＤｏｃＰｏｒｔ（）を実行する前に、ＯＳに対する印刷キャンセルコマンド発行要求を追加することで、印刷装置１２０を印刷コマンド受信可能な状態へと遷移させる。これにより、ＵＳＢポートモニタ２０８はＥｎｄＤｏｃＰｏｒｔ（）内の処理を正常に完了させることができ、印刷装置１２０がエラー状態であっても適切な印刷ジョブのキャンセル処理を実現することが可能となる。
【００３４】
＜実施形態３＞
本実施形態では、実施形態１、２とは異なる手法により課題を解決する例を述べる。本実施形態においては、印刷装置１２０にて印刷処理を継続できないエラーが生じている場合は、ＯＳは印刷装置１２０に対し発行された全ての出力処理を強制的に終了させることにより、課題を解決する。なお、本実施形態におけるコマンド生成フィルタ２０６の処理は、実施形態２と同様であり、その他特に言及が無い点は、実施形態１と同等の構成である。
【００３５】
図１０はスプーラ２０３の処理フローを示す。コマンド生成フィルタ２０６により、印刷装置１２０が解釈可能な印刷コマンドがＲＡＭ１２０へ出力されると、スプーラ２０３は印刷コマンドの送信処理を開始する（Ｓ１００１）。次に、スプーラ２０３はＵＳＢポートモニタ２０８のＳｔａｒｔＤｏｃＰｏｒｔ（）を実行し、ＵＳＢポートモニタ２０８に対し印刷コマンドの送信処理の開始を通知する（Ｓ１００２）。次に、スプーラ２０３は、ＲＡＭ１１６に印刷装置１２０へ送信すべき印刷コマンドが残存しているか否かを判定する（Ｓ１００３）。Ｓ１００３にて送信すべき印刷データが残存していないことを検知すると、スプーラ２０３は、ＵＳＢポートモニタ２０８のＥｎｄＤｏｃＰｏｒｔ（）を実行し、ＵＳＢポートモニタ２０８に印刷コマンドの送信処理の終了を通知する（Ｓ１００４）。その後、スプーラ２０３は、送信処理が完了した印刷コマンドに対応する印刷ジョブをプリントキュー２０４から削除し（Ｓ１００９）、印刷コマンドの送信処理を終了する（Ｓ１０１０）。一方、送信すべき印刷コマンドが残存していることを検知すると、スプーラ２０３はＵＳＢポートモニタ２０８のＷｒｉｔｅＰｏｒｔ（）を実行し、ＵＳＢポートモニタ２０８へ印刷コマンドを転送する（Ｓ１００５）。その後、スプーラ２０３は、印刷コマンド送信処理のキャンセル要求が発行されたか否かを判定する（Ｓ１００６）。Ｓ１００６にて、スプーラ２０３がキャンセル要求を検知しなかった場合は、Ｓ１００３へ戻る。Ｓ１００６にて、スプーラ２０３がキャンセル要求を検知した場合は、スプーラ２０３は、ＵＳＢポートモニタ２０８のＥｎｄＤｏｃＰｏｒｔ（）を実行し、ＵＳＢポートモニタ２０８に印刷コマンドの送信処理の終了を通知する（Ｓ１００７）。続いて、スプーラ２０３はＯＳに対し印刷装置１２０への印刷キャンセルコマンドの発行を要求する（Ｓ１００８）。その後、スプーラ２０３は、送信処理が完了した印刷コマンドに対応する印刷ジョブをプリントキュー２０４から削除し（Ｓ１００９）、印刷コマンドの送信処理を終了する（Ｓ１０１０）。
【００３６】
ここで、ＵＳＢポートモニタ２０８は、ＥｎｄＤｏｃＰｏｒｔ（）内で実行する処理の１つとして、ＯＳのＣａｎｃｅｌＩｏ（）を実行する。ＣａｎｃｅｌＩｏ（）を実行することで、ＵＳＢポートモニタ２０８は、印刷装置１２０に対して未処理の出力処理があれば、これを停止させる。一方、ＵＳＢポートモニタ２０８から印刷装置１２０への印刷コマンドの出力処理は、複数のスレッドにより実行される。ところが、ＣａｎｃｅｌＩｏ（）の実行により停止可能な出力処理は、ＣａｎｃｅｌＩｏ（）が実行されたスレッドと同一のスレッドから発行された出力処理に限られている。また、他のスレッドから発行された出力処理に対しては、それらの処理が全て完了するまで、ＯＳはＣａｎｃｅｌＩｏ（）は終了しない。従って、印刷装置１２０にてエラーが発生している間は、印刷装置１２０に対して各スレッドから発行された全ての出力処理が完了しないため、ＣａｎｃｅｌＩｏ（）は終了せず、ＵＳＢポートモニタ２０８はＥｎｄＤｏｃＰｏｒｔ（）に続く処理を実行することができない。
【００３７】
そこで、本実施形態ではＣａｎｃｅｌＩｏ（）内部にて、図１１に示す処理手順を採用することでこの課題を解決する。スプーラ２０３により、ＵＳＢポートモニタ２０８のＥｎｄＤｏｃＰｏｒｔ（）が実行されると、ＵＳＢポートモニタ２０８はＥｎｄＤｏｃＰｏｒｔ（）の内部処理として、ＯＳのＣａｎｃｅｌＩｏ（）を実行する（Ｓ１１０１）。次に、ＯＳは、特定のスレッドすなわち、ＣａｎｃｅｌＩｏ（）が実行されたスレッドと同一のスレッドから印刷装置１２０に対し発行された出力処理の中で未処理の出力処理を停止する。続いて、ＯＳは、ＣａｎｃｅｌＩｏ（）が実行されたスレッドと異なるスレッドから、印刷装置１２０に対し発行された出力処理の中で未処理の処理があるか否かを判定する（Ｓ１１０３）。Ｓ１１０３において、印刷装置１２０に対する全ての出力処理が完了していることを検知すると、ＯＳはＣａｎｃｅｌＩｏ（）の処理を終了する（Ｓ１１０７）。一方、Ｓ１１０３において、印刷装置１２０に対する全ての出力処理が完了していないことを検知すると、続いて、ＯＳは印刷装置１２０から印刷１２０の状態情報を取得する（Ｓ１１０４）。その後、ＯＳは該取得した状態情報が、印刷装置１２０がエラー状態であることを示す情報であるか否かを判定する（Ｓ１１０５）。Ｓ１１０５において、印刷装置１２０がエラー状態でないと判断した場合は、Ｓ１１０３へ戻る。一方、Ｓ１１０５において、印刷装置１２０がエラー状態であると判断した場合は、ＯＳは、ＣａｎｃｅｌＩｏ（）が実行されたスレッドと異なるスレッドから発行された出力処理であっても、未処理であれば出力処理の全てを停止する（Ｓ１１０６）。最後にＳ１１０７にて、ＯＳはＣａｎｃｅｌＩｏ（）の処理を終了する（Ｓ１１０７）。
【００３８】
通常、スプーラ２０３はＵＳＢポートモニタ２０８のＷｒｉｔｅＰｏｒｔ（）の完了を検知した時点で、印刷コマンドの印刷装置１２０への送信処理は完了した判断する。しかし、ＵＳＢポートモニタ２０８から印刷装置１２０に対する出力処理は、ＯＳの処理負荷や、印刷装置１２０の動作状況に起因して、印刷装置１２０がエラー状態になくとも即座に完了しない場合が生じ得る。このとき、印刷装置１２０の状態に関わらず、ＯＳが常に印刷装置１２０に対する全ての出力処理を停止すると、スプーラ２０３の認識する印刷装置１２０へ到達した印刷コマンドのサイズと、実際に印刷装置１２０へ到達した印刷コマンドのサイズに大きな乖離が生じ得る。これはソフトウェアの動作上、好ましい状況ではない。例えば、スプーラ２０３を経由し印刷装置１２０へ送信した印刷コマンドのサイズを取得することで、印刷ジョブの進捗状況を示すアプリケーションは、適切な情報を示すことができない。そのため、ＯＳは、全ての出力処理を完了できないエラーが、印刷装置１２０にて生じている場合に限定して、印刷装置１２０に対し発行された全ての出力処理を停止すべきである。
【００３９】
以上により、ＯＳはＣａｎｃｅｌＩｏ（）内部の処理において、印刷装置１２０が印刷処理を継続できないエラー状態である場合は、ＣａｎｃｅｌＩｏ（）が実行されたスレッドと異なるスレッドから発行された出力処理であっても、未処理であれば出力処理の全てを停止する。これにより、印刷装置１２０がエラー状態であっても、ＵＳＢポートモニタ２０８はＥｎｄＤｏｃＰｏｒｔ（）を終了させることができ、スプーラ２０３は続く印刷キャンセルコマンドの発行要求を実施することが可能となる。
【００４０】
＜実施形態４＞
本発明の目的は前述した実施例の機能を実現するソフトウェアのプログラムコードを記録した記録媒体を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータまたはＣＰＵまたはＭＰＵ）が記録媒体に格納されたプログラムコードを読み出し実行することによっても、達成されることは言うまでもない。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することとなり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。
【００４１】
プログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、ハードディスク、ＳＳＤ、光ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、磁気テープ、不揮発性のメモリカード、ＲＯＭ、ＤＶＤなどを用いることができる。また、コンピュータが読み出したプログラムコードを実行することにより、前述した実施例の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼動しているＯＳなどが実際の処理の一部または全部を行い、その処理によって前述した実施例の機能が実現される場合も含まれることは言うまでもない。
【００４２】
さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書きこまれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【図１】
2014134861.tif 000003
【図２】
2014134861.tif 000004
【図３】
2014134861.tif 000005
【図４】
2014134861.tif 000006
【図５】
2014134861.tif 000007
【図６】
2014134861.tif 000008
【図７】
2014134861.tif 000009
【図８】
2014134861.tif 000010
【図９】
2014134861.tif 000011
【図１０】
2014134861.tif 000012
【図１１】
2014134861.tif 000013