(57)【特許請求の範囲】
【請求項１】
ジョブを格納するジョブキューを管理するスプーラを有する情報処理装置であって、
前記ジョブキューに現在格納されているジョブを通信装置に送信する送信手段と、
前記ジョブが前記ジョブキューに格納されている場合、前記通信装置に関する情報を前記通信装置から取得する第１取得手段と、
前記通信装置に関する情報に基づいて、前記通信装置が処理しているジョブが前記ジョブキューに現在格納されているジョブか否かを判定する判定手段と、
前記通信装置が処理しているジョブが前記ジョブキューに現在格納されているジョブでないと判定され、かつ、前記通信装置が処理を終了したジョブに関する処理情報に前記ジョブキューに現在格納されているジョブに関する情報が含まれる場合、前記ジョブキューに現在格納されているジョブを前記ジョブキューから削除するための削除通知を前記スプーラに対して実行し、前記通信装置が処理しているジョブが前記ジョブキューに現在格納されているジョブでないと判定され、かつ、前記処理情報に前記ジョブキューに現在格納されているジョブに関する情報が含まれない場合、前記削除通知を前記スプーラに対して実行せず、
前記通信装置が処理しているジョブが前記ジョブキューに現在格納されているジョブであると判定され、かつ、前記ジョブキューに現在格納されているジョブの処理が前記通信装置によって終了した場合、前記削除通知を前記スプーラに対し実行し、前記通信装置が処理しているジョブが前記ジョブキューに現在格納されているジョブであると判定され、かつ、前記ジョブキューに現在格納されているジョブの処理が前記通信装置によって終了していない場合、前記削除通知を前記スプーラに対し実行しない通知手段と、を有することを特徴とする情報処理装置。
【請求項２】
前記通知手段は、前記通信装置が処理しているジョブが前記ジョブキューに現在格納されているジョブであると判定され、前記ジョブキューに現在格納されているジョブの送信が完了したことを前記スプーラが特定した後で、かつ、前記ジョブキューに現在格納されているジョブの処理が前記通信装置によって終了した場合、前記削除通知を前記スプーラに対し実行し、前記通信装置が処理しているジョブが前記ジョブキューに現在格納されているジョブであると判定され、前記ジョブキューに現在格納されているジョブの送信が完了したことを前記スプーラが特定した後で、かつ、前記ジョブキューに現在格納されているジョブの処理が前記通信装置によって終了していない場合、前記削除通知を前記スプーラに対して実行しないことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記通知手段は、前記ジョブの処理がユーザによってキャンセルされた場合、前記削除通知を前記スプーラに対し実行することを特徴とする請求項１又は請求項２に記載の情報処理装置。
【請求項４】
前記ジョブに識別情報を付加する付加手段をさらに有し、
前記判定手段は、前記通信装置に関する情報に、前記付加手段が付加した識別情報が含まれるか否かを判定することによって、前記通信装置が処理しているジョブが前記ジョブキューに現在格納されているジョブか否かを判定することを特徴とする請求項３に記載の情報処理装置。
【請求項５】
前記通知手段は、前記処理情報に、前記ジョブキューに現在格納されているジョブに付加された識別情報が含まれる場合、前記削除通知を前記スプーラに対し実行し、前記処理情報に、前記ジョブキューに現在格納されているジョブに付加された識別情報が含まれない場合、前記削除通知を前記スプーラに対し実行しないことを特徴とする請求項４に記載の情報処理装置。
【請求項６】
前記通信装置に関する情報に基づいて、前記ジョブキューに現在格納されているジョブの状態又は前記通信装置の状態を、前記情報処理装置が備える表示部に表示させる表示制御手段をさらに有することを特徴とする請求項１乃至請求項５のいずれか１項に記載の情報処理装置。
【請求項７】
前記通信装置に関する情報に基づいて、前記通信装置にエラーが発生しているか否かを判定するエラー判定手段をさらに有し、
前記表示制御手段は、前記エラー判定手段により前記通信装置にエラーが発生していると判定された場合、前記通信装置にエラーが発生している旨を通知するための画面を前記表示部に表示させることを特徴とする請求項６に記載の情報処理装置。
【請求項８】
前記表示制御手段は、前記ジョブキューに現在格納されているジョブの状態又は前記通信装置の状態を通知するための通知領域を、ポップアップにより前記表示部に表示させることを特徴とする請求項６又は７に記載の情報処理装置。
【請求項９】
前記ジョブは、前記通信装置に印刷を実行させるための印刷ジョブ、又は前記通信装置にスキャンを実行させるためのスキャンジョブであることを特徴とする請求項１乃至請求項８のいずれか１項に記載の情報処理装置。
【請求項１０】
前記情報処理装置にインストールされているプリンタドライバは、Ｖｅｒｓｉｏｎ４ドライバであることを特徴とする請求項１乃至請求項９のいずれか１項に記載の情報処理装置。
【請求項１１】
前記送信手段は、前記ジョブキューに現在格納されているジョブが分割されることで得られる複数のデータを前記通信装置に送信し、
前記送信手段が送信するデータのデータサイズが、前記送信手段がデータを送信する毎に前記スプーラに通知され、
前記データサイズが前記スプーラに通知されることで、前記ジョブキューに現在格納されているジョブの送信が完了したことを、前記スプーラが特定することを特徴とする請求項１乃至請求項１０のいずれか１項に記載の情報処理装置。
【請求項１２】
前記送信手段は、送信するデータが前記複数のデータのうち最後に送信するデータか否かを解析する処理を実行せず、前記複数のデータを通信装置に送信することを特徴とする請求項１１に記載の情報処理装置。
【請求項１３】
ジョブを格納するジョブキューを有する情報処理装置であって、
前記ジョブキューに現在格納されているジョブを送信するための初期化処理を行う初期化処理手段と、
前記初期化処理手段による初期化処理が終了した場合、前記ジョブキューに現在格納されているジョブを通信装置に送信する送信手段と、
前記送信手段による前記ジョブキューに現在格納されているジョブの送信が完了した場合、前記ジョブキューから前記ジョブを削除するための終了処理を行う終了処理手段と、
前記ジョブが前記ジョブキューに格納されている場合、前記通信装置に関する情報を前記通信装置から取得する取得手段と、
前記通信装置に関する情報に基づいて、前記通信装置が処理しているジョブが前記ジョブキューに現在格納されているジョブか否かを判定する判定手段と、
を有し、
前記終了処理手段は、前記通信装置が処理しているジョブが前記ジョブキューに現在格納されているジョブでないと判定され、かつ、前記通信装置が処理を終了したジョブに関する処理情報に前記ジョブキューに現在格納されているジョブに関する情報が含まれる場合、前記終了処理を終了し、前記通信装置が処理しているジョブが前記ジョブキューに現在格納されているジョブでないと判定され、かつ、前記処理情報に前記ジョブキューに現在格納されているジョブに関する情報が含まれない場合、前記終了処理をリトライし、
前記通信装置が処理しているジョブが前記ジョブキューに現在格納されているジョブであると判定され、かつ、前記ジョブキューに現在格納されているジョブの処理が前記通信装置によって終了した場合、前記終了処理を終了し、前記通信装置が処理しているジョブが前記ジョブキューに現在格納されているジョブであると判定され、かつ、前記ジョブキューに現在格納されているジョブの処理が前記通信装置によって終了していない場合、前記終了処理をリトライし、
前記終了処理手段による前記終了処理が終了した場合、前記ジョブが前記ジョブキューから削除されることを特徴とする情報処理装置。
【請求項１４】
ジョブを格納するジョブキューを管理するスプーラを有する情報処理装置の制御方法であって、
前記ジョブキューに現在格納されているジョブに対応するジョブを通信装置に送信する送信手段と、
前記ジョブが前記ジョブキューに格納されている場合、前記通信装置に関する情報を前記通信装置から取得する第１取得ステップと、
前記通信装置に関する情報に基づいて、前記通信装置が処理しているジョブが前記ジョブキューに現在格納されているジョブか否かを判定する判定ステップと、
前記通信装置が処理しているジョブが前記ジョブキューに現在格納されているジョブでないと判定され、かつ、前記通信装置が処理を終了したジョブに関する処理情報に前記ジョブキューに現在格納されているジョブに関する情報が含まれる場合、前記ジョブキューに現在格納されているジョブを前記ジョブキューから削除するための削除通知を前記スプーラに対して実行し、前記通信装置が処理しているジョブが前記ジョブキューに現在格納されているジョブでないと判定され、かつ、前記処理情報に前記ジョブキューに現在格納されているジョブに関する情報が含まれない場合、前記削除通知を前記スプーラに対して実行せず、
前記通信装置が処理しているジョブが前記ジョブキューに現在格納されているジョブであると判定され、かつ、前記ジョブキューに現在格納されているジョブの処理が前記通信装置によって終了した場合、前記削除通知を前記スプーラに対し実行し、前記通信装置が処理しているジョブが前記ジョブキューに現在格納されているジョブであると判定され、かつ、前記ジョブキューに現在格納されているジョブの処理が前記通信装置によって終了していない場合、前記削除通知を前記スプーラに対し実行しない通知ステップと、を有することを特徴とする制御方法。
【請求項１５】
ジョブを格納するジョブキューを有する情報処理装置の制御方法であって、
前記ジョブキューに現在格納されているジョブを送信するための初期化処理を行う初期化処理ステップと、
前記初期化処理が終了した場合、前記ジョブキューに現在格納されているジョブを通信装置に送信する送信ステップと、
前記ジョブキューに現在格納されているジョブの送信が完了した場合、前記ジョブキューから前記ジョブを削除するための終了処理を行う終了処理ステップと、
前記ジョブが前記ジョブキューに格納されている場合、前記通信装置に関する情報を前記通信装置から取得する取得ステップと、
前記通信装置に関する情報に基づいて、前記通信装置が処理しているジョブが前記ジョブキューに現在格納されているジョブか否かを判定する判定ステップと、
を有し、
前記通信装置が処理しているジョブが前記ジョブキューに現在格納されているジョブでないと判定され、かつ、前記通信装置が処理を終了したジョブに関する処理情報に前記ジョブキューに現在格納されているジョブに関する情報が含まれる場合、前記終了処理を終了し、前記通信装置が処理しているジョブが前記ジョブキューに現在格納されているジョブでないと判定され、かつ、前記処理情報に前記ジョブキューに現在格納されているジョブに関する情報が含まれない場合、前記終了処理をリトライし、
前記通信装置が処理しているジョブが前記ジョブキューに現在格納されているジョブであると判定され、かつ、前記ジョブキューに現在格納されているジョブの処理が前記通信装置によって終了した場合、前記終了処理を終了し、前記通信装置が処理しているジョブが前記ジョブキューに現在格納されているジョブであると判定され、かつ、前記ジョブキューに現在格納されているジョブの処理が前記通信装置によって終了していない場合、前記終了処理をリトライし、
前記終了処理が終了した場合、前記ジョブが前記ジョブキューから削除されることを特徴とする制御方法。
【請求項１６】
請求項１乃至請求項１３のいずれか一項に記載の情報処理装置の各手段をコンピュータにより実現することを特徴とするプログラム。
【請求項１７】
プリンタドライバであることを特徴とする請求項１６に記載のプログラム。
【請求項１８】
Ｖｅｒｓｉｏｎ４ドライバであることを特徴とする請求項１７に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、制御方法及びプログラムに関する。
【背景技術】
【０００２】
ジョブを処理可能な通信装置（プリンタ等）と、ジョブを送信可能な情報処理装置（パーソナルコンピュータ（以下、ＰＣ）等）とで構成される通信システムが知られている。このような通信システムにおいて、情報処理装置は、情報処理装置が備えるジョブキュー内に格納されているジョブの状態を、ジョブキューから当該ジョブが削除されるまで認識することが出来る。
【０００３】
特許文献１には、通信装置によってジョブの処理が終了するまでジョブキューにジョブを保持し続ける処理（以下、ジョブ保持処理）を実行することで、通信装置によってジョブの処理が終了するまでジョブの状態を認識できるようにする技術が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００７−１１４６９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上述したように、特許文献１に記載の技術によって、ジョブ保持処理を実現し、通信装置によってジョブの処理が終了するまでジョブの状態を認識できるようにすることが可能である。一方で、ジョブ保持処理の実現において、ジョブの送信が完了するまでにかかる時間の更なる短縮化が要望されている。本発明は上記要望を鑑みてなされたもので、ジョブの送信が完了するまでにかかる時間を短縮しつつ、ジョブ保持処理を実現することを目的とする。
【課題を解決するための手段】
【０００６】
上述のような課題を解決するための本発明の情報処理装置は、
ジョブを格納するジョブキューを管理するスプーラを有する情報処理装置であって、
前記ジョブキューに現在格納されているジョブを通信装置に送信する送信手段と、
前記ジョブが前記ジョブキューに格納されている場合、前記通信装置に関する情報を前記通信装置から取得する第１取得手段と、
前記通信装置に関する情報に基づいて、前記通信装置が処理しているジョブが前記ジョブキューに現在格納されているジョブか否かを判定する判定手段と、
前記通信装置が処理しているジョブが前記ジョブキューに現在格納されているジョブでないと判定され、かつ、前記通信装置が処理を終了したジョブに関する処理情報に前記ジョブキューに現在格納されているジョブに関する情報が含まれる場合、前記ジョブキューに現在格納されているジョブを前記ジョブキューから削除するための削除通知を前記スプーラに対して実行し、前記通信装置が処理しているジョブが前記ジョブキューに現在格納されているジョブでないと判定され、かつ、前記処理情報に前記ジョブキューに現在格納されているジョブに関する情報が含まれない場合、前記削除通知を前記スプーラに対して実行せず、
前記通信装置が処理しているジョブが前記ジョブキューに現在格納されているジョブであると判定され、かつ、前記ジョブキューに現在格納されているジョブの処理が前記通信装置によって終了した場合、前記削除通知を前記スプーラに対し実行し、前記通信装置が処理しているジョブが前記ジョブキューに現在格納されているジョブであると判定され、かつ、前記ジョブキューに現在格納されているジョブの処理が前記通信装置によって終了していない場合、前記削除通知を前記スプーラに対し実行しない通知手段と、を有することを特徴とする。
【０００７】
また、本発明の情報処理装置は、
ジョブを格納するジョブキューを有する情報処理装置であって、
前記ジョブキューに現在格納されているジョブを送信するための初期化処理を行う初期化処理手段と、
前記初期化処理手段による初期化処理が終了した場合、前記ジョブキューに現在格納されているジョブを通信装置に送信する送信手段と、
前記送信手段による前記ジョブキューに現在格納されているジョブの送信が完了した場合、前記ジョブキューから前記ジョブを削除するための終了処理を行う終了処理手段と、
前記ジョブが前記ジョブキューに格納されている場合、前記通信装置に関する情報を前記通信装置から取得する取得手段と、
前記通信装置に関する情報に基づいて、前記通信装置が処理しているジョブが前記ジョブキューに現在格納されているジョブか否かを判定する判定手段と、
を有し、
前記終了処理手段は、前記通信装置が処理しているジョブが前記ジョブキューに現在格納されているジョブでないと判定され、かつ、前記通信装置が処理を終了したジョブに関する処理情報に前記ジョブキューに現在格納されているジョブに関する情報が含まれる場合、前記終了処理を終了し、前記通信装置が処理しているジョブが前記ジョブキューに現在格納されているジョブでないと判定され、かつ、前記処理情報に前記ジョブキューに現在格納されているジョブに関する情報が含まれない場合、前記終了処理をリトライし、
前記通信装置が処理しているジョブが前記ジョブキューに現在格納されているジョブであると判定され、かつ、前記ジョブキューに現在格納されているジョブの処理が前記通信装置によって終了した場合、前記終了処理を終了し、前記通信装置が処理しているジョブが前記ジョブキューに現在格納されているジョブであると判定され、かつ、前記ジョブキューに現在格納されているジョブの処理が前記通信装置によって終了していない場合、前記終了処理をリトライし、
前記終了処理手段による前記終了処理が終了した場合、前記ジョブが前記ジョブキューから削除されることを特徴とする。
【発明の効果】
【０００８】
本発明によれば、ジョブの送信が完了するまでにかかる時間を短縮しつつ、ジョブ保持処理を実現することが可能になる。
【図面の簡単な説明】
【０００９】
【図１】通信装置と情報処理装置によって構成される印刷システムを示すブロック図
【図２】情報処理装置が備えるソフトウェアの構成を示す図
【図３】第１実施形態における印刷開始処理を示すフローチャート
【図４】第１実施形態における印刷ジョブ送信処理を示すフローチャート
【図５】第１実施形態における印刷終了処理を示すフローチャート
【図６】印刷ジョブ生成処理を示すフローチャート
【図７】印刷データに付加される識別情報の一例
【図８】コマンド生成フィルタにより生成される印刷ジョブを示す概略図
【図９】第２実施形態における印刷ジョブ送信処理を示すフローチャート
【図１０】エラー報知処理を示すフローチャート
【図１１】第２実施形態における印刷終了処理を示すフローチャート
【図１２】処理が終了した印刷ジョブの一覧を示す情報の一例
【発明を実施するための形態】
【００１０】
以下、添付図面を参照して本発明の好適な実施の形態を詳しく説明する。尚、以下の実施の形態は特許請求の範囲に係る本発明を限定するものでなく、また本実施の形態で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。
【００１１】
＜実施形態１＞
本発明を適用した通信装置について説明する。通信装置は、情報処理装置からジョブを受信可能な装置である。本実施形態においては、通信装置としてインクジェット方式の複合機（ＭＦＰ）を例示している。ＭＦＰとは、プリント、スキャナ、コピー、ファックス等の複数の機能を有する装置である。なお、通信装置は、例えば、複写機やファクシミリ装置、スキャナ、パーソナルコンピュータ（ＰＣ）、スマートホン、タブレット端末、ＰＤＡ（Ｐｅｒｓｏｎａｌ  Ｄｉｇｉｔａｌ  Ａｓｓｉｓｔａｎｔ）、デジタルカメラ、音楽再生デバイス等であっても良い。また、通信装置がプリンタである場合は、利用する印刷方式はインクジェット方式に限定されず、例えば電子写真方式であっても良い。さらに、通信装置は、ＭＦＰではなく、単機能の装置（ＳＦＰ）であっても良い。情報処理装置は、通信装置にジョブを送信可能な装置である。本実施形態においては、情報処理装置として、携帯端末を例示している。なお、情報処理装置は、例えば、ＰＣやスマートホン、タブレット端末、ＰＤＡ（Ｐｅｒｓｏｎａｌ  Ｄｉｇｉｔａｌ  Ａｓｓｉｓｔａｎｔ）、カメラ等であっても良い。また、以下の説明においては、情報処理装置及び通信装置間で扱われるジョブとして、通信装置が印刷を実行するための印刷ジョブを例示しているが、この形態に限定されず、例えば、通信装置がスキャンを実行するためのスキャンジョブ等であっても良い。
【００１２】
図１は情報処理装置１１０と情報処理装置１１０に接続された通信装置１２０により構成される通信システムの全体構成を示すブロック図の一例である。情報処理装置１１０は入力Ｉ／Ｆ１１１、ＣＰＵ１１２、ＲＯＭ１１３、出力Ｉ／Ｆ１１４、外部記憶装置１１５、ＲＡＭ１１６、入力装置１１７、出力装置１１８（表示部）、入出力Ｉ／Ｆ１１９を有する。ＣＰＵ１１２はＲＯＭ１１３等に保存されている制御命令に従い情報処理装置１１０を制御する。ＲＯＭ１１３は初期化プログラムを記憶し、外部記憶装置１１５は、ＣＰＵ１１２が実行する制御プログラムや組込オペレーティングシステム（以下、ＯＳ）、プリンタドライバやその他各種のデータを記憶している。本実施形態では、外部記憶装置１１５に格納されている制御プログラムは、外部記憶装置１１５に格納されている組込ＯＳの管理下で、スケジューリングやタスクスイッチ等のソフトウェア制御を行う。ＲＡＭ１１６は外部記憶装置１１５に保存される各種プログラムがワークメモリーとして使用する。入力装置１１７はデータ入力や動作指示に使用され入力Ｉ／Ｆ１１１に接続されている。出力装置１１８はデータ表示や状態の通知に使用され出力Ｉ／Ｆ１１４に接続されている。
【００１３】
通信装置１２０はＲＡＭ１２１、ＲＯＭ１２２、プリントエンジン１２３、ＣＰＵ１２４、入出力Ｉ／Ｆ１２５から構成される。情報処理装置１１０と通信装置１２０はＵＳＢ（商標）ケーブル１３０により接続されている。ＲＡＭ１２１はＣＰＵ１２４のワークメモリーとして使用され、受信したデータの一時保存用バッファとしても利用される。ＲＯＭ１２２は制御命令を保存している。プリントエンジン１２３はＲＡＭ１２１に保存されたデータに基づき印刷を行う。ＣＰＵ１２４はＲＯＭ１２２等に保存されている制御命令に従い通信装置１２０を制御する。なお、本実施形態においては情報処理装置１１０および通信装置１２０の処理分担を前記のように示したが、処理の分担形態はこれに依らない。
【００１４】
情報処理装置１１０が備えるソフトウェアの構成について、図２のブロック図を参照して説明する。図２に示す構成のうち、構成２０２、２０３、２０５、２０８、２１０がＯＳのモジュール、構成２０７、２０９がプリンタドライバのモジュールとしているが、それぞれの構成は、ＯＳとプリンタドライバのうちいずれのモジュールであっても良い。なお、本実施形態では、情報処理装置１１０が備えるプリンタドライバは、Ｍｉｃｒｏｓｏｆｔ社のＷｉｎｄｏｗｓ（登録商標）で採用される、Ｖｅｒｓｉｏｎ４ドライバ（以下、Ｖ４ドライバ）であるものとする。それぞれの構成が実行する処理は、実際には、ＣＰＵ１１２が、それぞれの構成に対応するプログラムを外部記憶装置１１５から読みだしてＲＡＭ１１６にロードし、そのプログラムを実行することにより実現されるものとする。アプリケーション２０１は、外部記憶装置１１５に保存されており、印刷する有償コンテンツ等の画像情報や文字情報を含む描画情報、用紙サイズやレイアウト等の印刷設定情報等を含む印刷データを作成する。アプリケーション２０１が作成した印刷データは、ＯＳの印刷サポート機能２０２を介しＵＩモジュール２０３から返却される印刷設定情報が付加され、スプールデータ２０６としてスプーラ２０４のジョブキュー２０５に一時的に蓄積される。スプーラ２０４は、ジョブ管理機能を有し、渡されたスプールデータ２０６を、スプールデータ２０６に対応する印刷ジョブの送信が完了したと認識するまで保持し管理する。具体的には、スプーラ２０４は、例えば、プリンタ毎に、印刷ジョブのサイズ、ジョブ名、送信するジョブ順番等を管理し、管理している情報をステータス表示アプリケーションに伝達することで、当該情報を出力装置１１８等に表示する。また、紙ジャムなどのエラー発生時に備え、印刷データを含む印刷ジョブそのものをジョブ終了まで保持するようにしても良い。なお、ジョブキュー２０５に保存されているスプールデータ２０６の情報は、例えば、ＵＩモジュール２０３、アプリケーション２０１などを介して所定のインタフェース関数を用いて参照することできる。コマンド生成フィルタ２０７は、蓄積されたスプールデータ２０６の入力を受け付け、通信装置１２０が解釈可能な印刷コマンドに変換することで、印刷ジョブを生成する。なお、コマンド生成フィルタ２０７への印刷データの入力処理や、コマンド生成フィルタ２０７による印刷データの変換処理は、不図示のＯＳのコマンド生成フィルタ制御機能により制御される。その後、コマンド生成フィルタ２０７は、生成した印刷ジョブを、情報処理装置１１０のＲＡＭ１１６、及び外部記憶装置１１５に順次出力する。また、ＲＡＭ１１６及び外部記憶装置１１５へ出力された印刷ジョブは、スプーラ２０４により読み出され、ＵＳＢポートモニタ２０８を経由し通信装置１２０へ送信される。またプリンタドライバのベンダーは、ポートモニタ拡張ファイル２０９に所望の印刷ジョブ制御処理を記載することで、ＵＳＢポートモニタ２０８にベンダー固有の処理を追加することが可能である。例えば、ジョブ毎に用意される専用の情報格納領域である、ＪｏｂＰｒｏｐｅｒｔｙＢａｇ２１０が管理する記憶領域を参照する処理を、ポートモニタ拡張ファイル２０９に記載するとする。このようにすることで、ＵＳＢポートモニタ２０８は、任意の情報をＪｏｂＰｒｏｐｅｒｔｙＢａｇ２１０が管理する記憶領域へ格納することが可能となる。なお、以下の説明におけるＵＳＢポートモニタ２０８とスプーラ２０４間のデータの受け渡し及び通知は、コマンド生成フィルタ２０７を介して行われても介さずに行われても良い。
【００１５】
続いて、図３から図５を用いて、本実施形態において情報処理装置１１０がＵＳＢポートモニタ２０８によって実行する印刷制御処理について説明する。なお、印刷制御処理は、印刷開始処理、印刷ジョブ送信処理、印刷終了処理の３つの処理によって構成されている。
【００１６】
図３は、本実施形態において情報処理装置１１０がＵＳＢポートモニタ２０８によって実行する印刷開始処理のフローを示す。なお、印刷開始処理は、ＣＰＵ１１２が、ＲＯＭ１１３や外部記憶装置１１５等に記憶されている制御プログラムをＲＡＭ１１６にロードし、その制御プログラムを実行することで実現される。ここでは、ＣＰＵ１１２は、ポートモニタ拡張ファイル２０９に対応するプログラムに従って、ＵＳＢポートモニタ２０８に対応するプログラムを実行することで印刷開始処理を実現する。印刷開始処理は、ユーザが、アプリケーション２０１を用いて印刷データを作成し、当該印刷データに基づく画像の印刷を入力装置１１７等により指示した場合に開始される。
【００１７】
まず、Ｓ３０１にて、ＵＳＢポートモニタ２０８は、スプーラ２０４からの指示により、ポートモニタ拡張ファイル２０９に対応するプログラムの記載に従ってＳｔａｒｔＰｒｉｎｔＪｏｂ関数を呼び出し、印刷開始処理を開始する。その後、ＵＳＢポートモニタ２０８は、Ｓ３０２にて、ＪｏｂＰｒｏｐｅｒｔｙＢａｇ２１０が管理する記憶領域を初期化し、以降の印刷制御処理を行うために必要な記憶領域の確保、及び印刷制御処理中に参照する各種パラメータの初期化処理を行う。その後ＵＳＢポートモニタ２０８は、Ｓ３０３にて印刷開始処理を終了する。その後、ＵＳＢポートモニタ２０８は、以下に示す印刷ジョブ送信処理を開始する。
【００１８】
図４は、本実施形態において情報処理装置１１０がＵＳＢポートモニタ２０８によって実行する印刷ジョブ送信処理のフローを示す。なお、印刷ジョブ送信処理は、ＣＰＵ１１２が、ＲＯＭ１１３や外部記憶装置１１５等に記憶されている制御プログラムをＲＡＭ１１６にロードし、その制御プログラムを実行することで実現される。ここでは、ＣＰＵ１１２は、ポートモニタ拡張ファイル２０９に対応するプログラムに従って、ＵＳＢポートモニタ２０８に対応するプログラムを実行することで印刷ジョブ送信処理を実現する。
【００１９】
まず、ＵＳＢポートモニタ２０８は、スプーラ２０４からの指示により、ポートモニタ拡張ファイル２０９に対応するプログラムの記載に従ってｗｒｉｔｅＰｒｉｎｔＤａｔａ関数を呼び出し、印刷ジョブ送信処理を開始する（Ｓ４０１）。なお、スプーラ２０４は、コマンド生成フィルタ２０７により出力された印刷ジョブを、所定のサイズに分割する。以後、分割されたそれぞれの印刷ジョブを分割ジョブという。そして、分割ジョブのうち未入力の分割ジョブをｗｒｉｔｅＰｒｉｎｔＤａｔａ関数の引数の１つとして入力する。
次に、ＵＳＢポートモニタ２０８は、Ｓ４０２にてエラー報知処理を行う。
【００２０】
ここで、図１０を用いてＳ４０２におけるエラー報知処理の詳細について説明する。ＵＳＢポートモニタ２０８は、Ｓ１００１にてエラー報知処理を開始する。続いて、ＵＳＢポートモニタ２０８は、Ｓ１００２に進み通信装置１２０から情報を読み出して取得する。なお、このとき通信装置１２０から取得する情報は、例えば、通信装置１２０のステータスを示す情報（ステータス情報）、通信装置１２０の能力情報等である。その後、ＵＳＢポートモニタ２０８は、Ｓ１００２にて取得した情報の種別解析処理を行う。
【００２１】
次に、ＵＳＢポートモニタ２０８は、解析結果を参照して、Ｓ１００２にて取得した情報がステータス情報か否かを判定する（Ｓ１００３）。ＵＳＢポートモニタ２０８は、Ｓ１００２にて取得した情報がステータス情報でないと判定した場合は、Ｓ１００７に進みエラー報知処理を終了する。一方、ＵＳＢポートモニタ２０８は、Ｓ１００２にて取得した情報がステータス情報であると判定した場合は、Ｓ１００４に進む。
【００２２】
Ｓ１００４では、ＵＳＢポートモニタ２０８は、取得したステータス情報を参照して、通信装置１２０のステータスを解析する処理（ステータス解析処理）を行う。なお、ステータス情報には、通信装置１２０にエラーが発生しているか否か等の情報が格納される。
【００２３】
そして、ＵＳＢポートモニタ２０８は、Ｓ１００４における解析の結果から通信装置１２０に印刷処理を継続できないエラーが発生しているか否かを判定する（Ｓ１００５）。ＵＳＢポートモニタ２０８は、エラーが発生していないと判定した場合は、Ｓ１００７に進みエラー報知処理を終了する。一方、ＵＳＢポートモニタ２０８は、エラーが発生していると判定した場合は、スプーラ２０４に対し通信装置１２０にエラーが発生していることを通知する（Ｓ１００６）。これによりスプーラ２０４は、ＯＳに標準搭載されているエラー通知機能を用いて、通信装置１２０にエラーが発生していることをユーザに通知する。具体的には、スプーラ２０４は、出力装置１１８に、通信装置１２０にエラーが発生していることを通知する画面を表示させる。このとき、ＯＳが、トースト機能に対応している場合は、スプーラ２０４は、出力装置１１８にトースト（通知領域）をポップアップ表示させることによって通信装置１２０にエラーが発生していることを通知する。一方、ＯＳがトースト機能に対応していない場合は、スプーラ２０４は、ジョブキューの状態をユーザに表示させる画面やウィンドウを介して、通信装置１２０にエラーが発生していることを通知する。なお、トースト機能とは、Ｍｉｃｒｏｓｏｆｔ社のＷｉｎｄｏｗｓ（登録商標）に導入されている機能であり、ＯＳ標準のユーザへの情報通知機能である。なお、トーストではなく、例えばバルーン機能を用いて通知を行っても良い。
【００２４】
ＵＳＢポートモニタ２０８は、エラー報知処理を終了すると、Ｓ４０３にてスプーラ２０４より入力された分割ジョブを受信する。次に、ＵＳＢポートモニタ２０８はスプーラ２０４より受信した分割ジョブを通信装置１２０へ送信する（Ｓ４０４）。その後、ＵＳＢポートモニタ２０８はＳ４０４にて送信に成功した分割ジョブのデータサイズをスプーラ２０４へ通知する（Ｓ４０５）。これにより、スプーラ２０４は、印刷ジョブのうちどれだけのデータが送信されたかを判断することが可能となる。最後にＵＳＢポートモニタ２０８はＳ４０６にて、印刷ジョブ送信処理を終了する。なお、ＵＳＢポートモニタ２０８は、スプーラ２０４からの指示により、全ての分割ジョブを送信するまで、印刷ジョブ送信処理を繰り返す。すなわち、ＵＳＢポートモニタ２０８は、分割ジョブ数と同じ回数、印刷ジョブ送信処理を繰り返す。なお、１つの分割ジョブを一度の印刷ジョブ送信処理で送信しきれない場合は、送信しきれないデータを次の印刷ジョブ送信処理で送信するため、分割ジョブ数以上の数、印刷ジョブ送信処理が繰り返えされる場合もある。また、全ての分割ジョブ（１つの印刷ジョブ）の送信が完了したか否かは、スプーラ２０４が管理している。スプーラ２０４は、ＵＳＢポートモニタ２０８がこれまでに送信に成功した分割ジョブのデータサイズが、印刷ジョブのデータサイズに相当するか否かを、Ｓ４０５において通知される情報により判定することで、印刷ジョブの送信が完了したか否かを特定する。そして、ＵＳＢポートモニタ２０８が全ての分割ジョブの送信を完了し（１つの印刷ジョブの送信が完了し）、スプーラ２０４がそれを特定した場合には、ＵＳＢポートモニタ２０８は、スプーラ２０４から通知を受けて、以下の印刷終了処理を実行する。
【００２５】
図５は、本実施系におけるＵＳＢポートモニタ２０８が実行する印刷終了処理のフローを示す。なお、印刷終了処理は、ＣＰＵ１１２が、ＲＯＭ１１３や外部記憶装置１１５等に記憶されている制御プログラムをＲＡＭ１１６にロードし、その制御プログラムを実行することで実現される。ここでは、ＣＰＵ１１２は、ポートモニタ拡張ファイル２０９に対応するプログラムに従って、ＵＳＢポートモニタ２０８に対応するプログラムを実行することで印刷終了処理を実現する。
【００２６】
図４に示す処理を繰り返して、印刷ジョブの送信が完了すると、ＵＳＢポートモニタ２０８は、ポートモニタ拡張ファイル２０９に対応するプログラムに記載のｅｎｄＰｒｉｎｔＪｏｂ関数を呼び出して、印刷終了処理を開始する（Ｓ５０１）。
【００２７】
次に、ＵＳＢポートモニタ２０８は、Ｓ５０２において、ＪｏｂＰｒｏｐｅｒｔｙＢａｇ２１０が管理する記憶領域の、初回起動時刻情報を参照する。そして、ＵＳＢポートモニタ２０８は、Ｓ５０３において、処理対象の印刷ジョブにおける印刷終了処理の実行において、今回の印刷終了処理の実行が初回であるか否かを判定する。具体的には、ＵＳＢポートモニタ２０８は、ＪｏｂＰｒｏｐｅｒｔｙＢａｇ２１０が管理する記憶領域に時刻情報が記録されているか否かを判定し、記録されていない場合に初回であると判定し、記録されている場合に初回でないと判定する。ＵＳＢポートモニタ２０８は、初回であると判定した場合は、Ｓ５０４にて、現在の時刻情報を取得し、取得した時刻情報をＪｏｂＰｒｏｐｅｒｔｙＢａｇ２１０が管理する記憶領域に格納する。一方、ＵＳＢポートモニタ２０８は、初回でないと判定した場合はＳ５０５に進む。
【００２８】
次にＳ５０５において、ＵＳＢポートモニタ２０８は、スプーラ２０４から印刷終了処理の対象となっている印刷ジョブの状態情報を取得する。本実施形態では、スプーラ２０４は、ＵＳＢポートモニタ２０８から印刷ジョブの状態情報の取得要求があると、当該要求に対応する印刷ジョブの状態情報を通知するものとする。なお、印刷ジョブの状態情報は、例えば、印刷ジョブが処理中であることを示す情報、印刷ジョブがキャンセルされた状態（キャンセル状態）であることを示す情報、印刷ジョブの処理が停止された状態であることを示す情報である
その後、Ｓ５０６にて、ＵＳＢポートモニタ２０８は、Ｓ５０５で取得した印刷ジョブ状態情報から印刷ジョブがキャンセル状態であることを検知できたか否かを判定する。ＵＳＢポートモニタ２０８は、Ｓ５０６において印刷ジョブがキャンセル状態であることを検知できたと判定した場合は、Ｓ５２２に進む。
【００２９】
なお、ユーザやＯＳの指示により印刷ジョブがキャンセルされた（印刷ジョブがキャンセル状態となった）場合は、スプーラ２０４は、ジョブキュー２０５に保持されている次の印刷ジョブの処理を速やかに開始することが好ましい。そこで、Ｓ５２２では、ＵＳＢポートモニタ２０８は、スプーラ２０４に対し印刷終了処理が完了したことを通知し、Ｓ５２４にて、印刷終了処理を終了する。なお、スプーラ２０４は、印刷終了処理が完了したことをＵＳＢポートモニタ２０８から通知された場合、ジョブキュー２０５に保持されている、印刷終了処理が完了した印刷ジョブを削除する。これにより、スプーラ２０４は、キャンセルされた印刷ジョブをジョブキュー２０５から削除し、次の印刷ジョブの処理を開始することができる。
【００３０】
ＵＳＢポートモニタ２０８は、Ｓ５０６において印刷ジョブがキャンセル状態であることを検知できなかったと判定した場合は、Ｓ５０７に進み通信装置１２０から情報を読み出して取得する。なお、このとき通信装置１２０から取得する情報は、例えば、印刷ジョブの処理が完了したことを示す情報（ジョブ完了情報）、や通信装置１２０のステータスを示す情報（ステータス情報）、通信装置１２０の能力情報等である。また、本実施形態においては、印刷ジョブの処理の完了後であればジョブ完了情報が、印刷ジョブの処理中であればステータス情報が通信装置１２０から取得される。なお、例えば通信装置１２０との通信経路において通信障害が生じていたり、通信装置１２０がオフラインになっている場合は、いずれの情報も取得されない。
【００３１】
その後、ＵＳＢポートモニタ２０８は、Ｓ５０８において通信装置１２０からの情報を取得したか否かを判定し、取得したと判定した場合はＳ５０９にて、通信装置１２０から取得した情報の種別解析処理を行う。
【００３２】
ＵＳＢポートモニタ２０８は、Ｓ５０９にて、通信装置１２０から取得した情報がジョブ完了情報であると解析した場合は、Ｓ５２２に進み、印刷終了処理を終了する。
【００３３】
ＵＳＢポートモニタ２０８は、Ｓ５０９にて、通信装置１２０から取得した情報が、通信装置１２０のステータス情報及びジョブ完了情報のいずれでもないことを解析した場合は、Ｓ５２３に進む。Ｓ５２３では、ＵＳＢポートモニタ２０８は、スプーラ２０４に対し印刷終了処理を再度実行（リトライ）することを通知する。スプーラ２０４は、リトライが通知された場合、ＵＳＢポートモニタ２０８に、印刷終了処理を再度実行させる。またスプーラ２０４はリトライを通知された場合は、印刷終了処理の対象の印刷ジョブを削除せずにジョブキュー内に保持しておく。そして、ＵＳＢポートモニタ２０８は、印刷終了処理を再度実行する場合は、再度Ｓ５０１からの処理を行う。
【００３４】
ＵＳＢポートモニタ２０８は、Ｓ５０９における解析によって、通信装置１２０から取得した情報が通信装置１２０のステータス情報であると判定した場合は、Ｓ５１０に進む。Ｓ５１０では、ＵＳＢポートモニタ２０８は、取得したステータス情報を参照して、通信装置１２０のステータスを解析する処理（ステータス解析処理）を行う。なお、ステータス情報には、通信装置１２０に対する本体操作（例えば印刷中止ボタンの押下）により、印刷処理が中止されたか否かや、通信装置１２０にエラーが発生しているか否か、印刷ジョブを処理中か否か等の情報が格納される。以下、印刷処理が中止されたか否か、及び通信装置１２０にエラーが発生しているか否かの情報を印刷中止情報という。なお、ステータス情報や印刷中止情報として他の情報が含まれても良く、以下の印刷中止判定において、当該他の情報に基づく他の判定が行われても良い。
【００３５】
そして、Ｓ５１１では、ＵＳＢポートモニタ２０８は、Ｓ５１０のステータス解析の結果から、印刷処理が中止（キャンセル）されたか否かを判定する。なお、印刷処理の中止は、通信装置１２０に対してユーザによる操作（例えば印刷中止ボタンの押下）が行われたこと等により生じる。ＵＳＢポートモニタ２０８は、印刷処理が中止されたと判定した場合は、Ｓ５２２に進み、印刷終了処理を終了させる。これは前述した通り、ジョブキューに保持されている次の印刷ジョブの印刷処理を速やかに開始するためである。
【００３６】
ＵＳＢポートモニタ２０８は、Ｓ５１１にて印刷処理が中止されていないと判定した場合は、Ｓ５１２に進み、通信装置１２０に、印刷処理を継続できないエラーが発生しているか否かを判定する。通信装置１２０にエラーが発生している場合は、ＵＳＢポートモニタ２０８は、Ｓ５１３にて、スプーラ２０４に対し通信装置１２０にエラーが発生していることを通知する。これによりスプーラ２０４は、ＯＳに標準搭載されているエラー通知機能を用いて、通信装置１２０にエラーが発生していることをユーザに通知する。具体的には、スプーラ２０４は、出力装置１１８に、通信装置１２０にエラーが発生していることを通知する画面を表示させる。このとき、ＯＳが、トースト（情報通知用のウィンドウ）機能に対応している場合は、スプーラ２０４は、出力装置１１８にトーストをポップアップ表示させることによって通信装置１２０にエラーが発生していることを通知する。一方、ＯＳがトースト機能に対応していない場合は、スプーラ２０４は、ジョブキューの状態をユーザに表示させる画面やウィンドウを介して、通信装置１２０にエラーが発生していることを通知する。
【００３７】
ＵＳＢポートモニタ２０８は、Ｓ５１２にて通信装置１２０にエラーが発生していないと判定した場合、又はＳ５１３の処理の後に、Ｓ５１４にて現在時刻の情報を取得する。
【００３８】
ＵＳＢポートモニタ２０８は、Ｓ５１５にて、Ｓ５１４で取得した現在時刻とＳ５０４でＪｏｂＰｒｏｐｅｒｔｙＢａｇ２１０に保存した印刷終了処理の初回開始時刻とを比較し、所定の時間以上の差があるか否か（タイムアウトしたか否か）を判定する。タイムアウトしている場合、ＵＳＢポートモニタ２０８は、Ｓ５２２に進み印刷終了処理を終了させる。これにより、取得されたステータス情報に印刷中止情報が含まれず、且つジョブ終了情報が取得されない状態が、予期しない理由で長時間続いた場合でも、ジョブキュー２０５内の次のジョブを開始することが可能になる。一方、タイムアウトしていない場合、ＵＳＢポートモニタ２０８は、Ｓ５２４に進み一定時間処理を停止させた後に、Ｓ５２３に進み印刷終了処理のリトライをスプーラ２０４に通知する。なお、スプーラ２０４は、印刷終了処理のリトライ通知を受信した場合、即座にＵＳＢポートモニタ２０８に印刷終了処理の実行を指示してしまう。そこで、Ｓ５２４にて一定時間ＵＳＢポートモニタ２０８の処理を停止することで、通信装置１２０に対する極小間隔でのアクセス（Ｓ５０７）の繰り返しによる過剰な負荷発生を防止することができる。
【００３９】
続いて、Ｓ５０８にてＵＳＢポートモニタ２０８が通信装置１２０からの情報の取得に失敗した場合は、Ｓ５１６に進み、ステータス情報を要求するためのコマンド（リクエストコマンド）を通信装置１２０に対し送信する。これは、Ｓ５０７における情報の読み出しが失敗した原因が、通信装置１２０が通信不能状態に陥っていることであるか否かを検知するためである。そのため、ここでは、通信装置１２０に対して情報を送信可能か否かを検知できれば良いため、送信する情報は、ステータス情報のリクエストコマンドに限定されない。
【００４０】
その後、ＵＳＢポートモニタ２０８は、Ｓ５１７にて、Ｓ５１６におけるリクエストコマンド送信処理が成功したか否かを判定する。具体的には、ＵＳＢポートモニタ２０８は、送信に成功したデータサイズの情報を取得できたか否かを判定する。ＵＳＢポートモニタ２０８は、取得できたと判定した場合、リクエストコマンド送信処理が成功したと判定し、取得できなかったと判定した場合、リクエストコマンド送信処理が失敗したと判定する。なお、リクエストコマンド送信処理が成功した場合、ＵＳＢポートモニタ２０８は、次にＳ５０７の処理を行う際に、通信装置１２０からステータス情報を読み出して取得することができるようになる。
【００４１】
ＵＳＢポートモニタ２０８は、リクエストコマンドの送信に失敗したと判定した場合は、Ｓ５１９に進みリクエストコマンドの送信に失敗した合計回数の情報を更新する。なお、リクエストコマンドの送信に失敗した合計回数の情報は、ＪｏｂＰｒｏｐｅｒｔｙＢａｇ２１０に保存されている。その後、ＵＳＢポートモニタ２０８は、Ｓ５２０にて、リクエストコマンドの送信に失敗した合計回数が規定の回数を超えているか否かを判定する。ＵＳＢポートモニタ２０８は、リクエストコマンドの送信に失敗した合計回数が規定の回数を超えていないと判定した場合は、Ｓ５２３に進み、ｅｎｄＰｒｉｎｔＪｏｂ関数のリトライをスプーラ２０４に通知する。一方、ＵＳＢポートモニタ２０８は、リクエストコマンドの送信に失敗した合計回数が規定の回数を超えていると判定した場合は、Ｓ５２１に進み、通信装置１２０が通信不能状態に陥っていることをスプーラ２０４に対し通知する。通知を受けたスプーラ２０４は、ＯＳに標準搭載されているエラー通知機能を用いて、ユーザに通信装置１２０が通信不能状態に陥っていることを通知する。具体的には、スプーラ２０４は、出力装置１１８に、通信装置１２０が通信不能状態に陥っていることを通知する画面を表示させる。このとき、ＯＳが、トースト機能に対応している場合は、スプーラ２０４は、出力装置１１８にトーストをポップアップ表示させることによって通信装置１２０にエラーが発生していることを通知する。一方、ＯＳがトースト機能に対応していない場合は、スプーラ２０４は、ジョブキューの状態をユーザに表示させる画面やウィンドウを介して、通信装置１２０にエラーが発生していることを通知する。
【００４２】
その後、ＵＳＢポートモニタ２０８は、Ｓ５２２に進み、印刷終了処理を終了させる。
【００４３】
ＵＳＢポートモニタ２０８は、リクエストコマンドの送信に成功したとＳ５１７で判定した場合は、Ｓ５１８にて、リクエストコマンドの送信に失敗した合計回数を０回に更新する。その後、ＵＳＢポートモニタ２０８は、Ｓ５２３に進み印刷終了処理のリトライをスプーラ２０４に通知する。以上の処理により、ＵＳＢポートモニタ２０８は、印刷終了処理を実行している間に、通信装置１２０がオフライン状態（通信不能状態）に遷移してしまった場合でも、適切にジョブの処理を完了させることが可能となる。このため、通信装置１２０が再度オンライン状態（通信可能状態）に復帰した場合は、ジョブキュー内の次の印刷ジョブの処理を速やかに開始することが可能である。
【００４４】
上述のように、本実施形態では、印刷終了処理においてジョブ完了情報を取得できるまで、スプーラ２０４は、ジョブキュー２０５から印刷ジョブを削除しない。また、ＵＳＢポートモニタ２０８は、印刷終了処理においてジョブ完了情報を取得できるまで、当該印刷ジョブに関する情報を通信装置１２０から取得し続ける。そのため、本実施形態のように、通信装置１２０が印刷処理を完了するタイミングとジョブキュー２０５から印刷ジョブが削除されるタイミングを同期させることで、スプーラ２０４は、処理が完了するまで印刷ジョブの状態を把握することができる。
【００４５】
また、従来の形態では、通信装置１２０が印刷処理を完了するまで印刷ジョブ送信処理を繰り返すことでジョブ保持処理を実現していた。印刷ジョブ送信処理を繰り返すためには、送信する分割ジョブが最後の分割ジョブである場合に、送信に成功した分割ジョブのデータサイズとして正確でない情報をスプーラ２０４に対して送信する必要がある。そのため、従来の形態では、正確な送信データサイズを送信しないタイミングを判定するために、送信する分割ジョブが最後の分割ジョブであるか否かを解析（送信データ解析処理を実行）していた。一方、本実施形態では、通信装置１２０が印刷処理を完了するまで、印刷ジョブ送信処理を繰り返すのではなく、印刷終了処理（すなわち、印刷ジョブ送信処理後の処理）を繰り返すことでジョブ保持処理を実現する。印刷終了処理を繰り返すためには、送信する分割ジョブが最後の分割ジョブである場合にスプーラ２０４に正確でない送信データサイズを送信するという処理は必要ない。そのため、本実施形態では、送信データ解析処理を行わずにジョブ保持処理を実現でき、ジョブ保持処理にかかる負担を軽減することができる。引いては、印刷ジョブの送信が完了するのにかかる時間を短縮し、印刷ジョブの送信にかかるスループットの向上を図ることができる。
【００４６】
なお、Ｖ４ドライバには、ＯＳが備えるトースト機能を利用できる機能が備わっている。トースト機能とは、例えば通信装置１２０の状態やジョブの処理状態を、ユーザに効果的に通知できる機能であるため、トースト機能を有効に活用するためには、ジョブ保持処理によってジョブの状態を監視できるようにすることが好ましい。しかしながら、Ｖ４ドライバのようなランゲージモニタを構成要素として含まないプリンタドライバには、プログラム言語の違い等により、Ｖｅｒｓｉｏｎ３ドライバのようなランゲージモニタを構成要素として含むプリンタドライバよりも処理速度が遅い。なお、Ｖｅｒｓｉｏｎ３ドライバとは、Ｍｉｃｒｏｓｏｆｔ社のＷｉｎｄｏｗｓ（登録商標）で採用されるドライバであり、Ｖ４ドライバより前のバージョンのドライバである。また、従来のジョブ保持処理で行われていた送信データ解析処理には、多くのリソースが必要とされるため、Ｖ４ドライバが、従来のようにジョブ保持処理を実行する場合、送信データ解析処理に非常に多くの時間がかかってしまう。その結果、例えば印刷速度が低下してしまう等の課題が生じる。本実施形態では、印刷データの解析処理を実行せずにジョブ保持処理を実現できるため、Ｖ４ドライバのような処理速度が遅いドライバを用いる形態においても、印刷速度の低下を抑制しつつジョブ保持処理を実現できる。すなわち、本実施形態は、Ｖ４ドライバのような処理速度が遅いドライバを用いる形態において特に有効である。
【００４７】
＜実施形態２＞
実施形態１では、通信装置１２０からジョブの終了情報を取得するまで印刷終了処理を繰り返すことで、ジョブ保持処理を実現する形態について説明した。しかしながら、通信装置１２０や情報処理装置１１０にインストールされるＯＳの種類によっては、通信装置１２０からジョブの終了情報を取得できない場合がある。そこで、本実施形態では、ジョブの終了情報を取得せずにジョブ保持処理を実現する形態について説明する。本実施形態では、情報処理装置１１０は印刷ジョブ毎に一意の識別情報を付加して通信装置１２０に送信する。また、通信装置１２０は処理中の印刷ジョブに付された識別情報や処理が完了した印刷ジョブに付された識別情報の一覧を、リクエストに応じてホストに返却する。情報処理装置１１０は、実施形態１と同様に処理の完了を検知するまで処理対象のジョブを保持し続けるが、本実施形態では、通信装置１２０から返却された識別情報に基づいて処理の完了を検知する。本実施形態では、このようにしてジョブ保持処理を実現することにより、課題を解決する。なお、以後、本実施形態において特に言及が無い点は、実施形態１と同等の構成であるものとする。
【００４８】
図６は、本実施形態におけるコマンド生成フィルタ２０７が実行する印刷ジョブ生成処理のフローを示す。なお、印刷開始処理は、ＣＰＵ１１２が、ＲＯＭ１１３や外部記憶装置１１５等に記憶されている制御プログラムをＲＡＭ１１６にロードし、その制御プログラムを実行することで実現される。ここでは、ＣＰＵ１１２は、コマンド生成フィルタ２０７に対応するプログラムを実行することで印刷ジョブ生成処理を実現する。
【００４９】
始めにコマンド生成フィルタ２０７は、ＯＳが備えるコマンド生成フィルタ制御機能により起動され処理を開始する（Ｓ６０１）。次に、コマンド生成フィルタ２０７は、アプリケーション２０１が作成した印刷データをＯＳのコマンド生成フィルタ制御機能から受信する（Ｓ６０２）。次に、コマンド生成フィルタ２０７は、受信した印刷データに対し、該印刷データを一意に識別するための識別情報を付加する（Ｓ６０３）。図７は印刷データに付加される識別情報の例を示す。図７に示す識別情報は数値、ハイフネーションおよびアルファベットにより表現されているが、識別情報の構成はこの例に限定されるものではない。次に、コマンド生成フィルタ２０７は、受信した印刷データに付加された印刷設定情報に従って、印刷データに対し変換を施し、通信装置１２０が解釈可能な印刷コマンドに変換することで、識別情報を含む印刷ジョブを生成する（Ｓ６０４）。なお、コマンド生成フィルタ２０７はＳ６０４の処理に先立ち、受信した印刷データに付加された印刷設定情報に従って、印刷データのページ順序の変更や、複数ページを１ページとして再構成するページ構成処理を追加してもよい。また、コマンド生成フィルタ２０７は、印刷データに対し変換を施し、印刷ジョブを生成してから識別情報を付加しても良い。
【００５０】
図８はコマンド生成フィルタ２０７により生成される印刷ジョブを示す概略図である。コマンド生成フィルタ２０７により生成される印刷ジョブは、識別情報格納部８０１と制御コマンド格納部８０２から成る。識別情報格納部には、Ｓ６０３にて付加される識別情報が格納される。印刷コマンド格納部には、コマンド生成フィルタ２０７が受信した印刷データに対し所定の変換を施すことで得られる、当該印刷データに基づく画像を通信装置１２０に印刷させるための制御を実行するコマンドが格納される。すなわち、通信装置１２０は、制御コマンド格納部に格納されるコマンドに基づいて動作することで、画像を印刷することができる。
【００５１】
続いて、コマンド生成フィルタ２０７は、識別情報を含む印刷ジョブを外部記憶装置１１５やＲＡＭ１１６等の記憶領域に一旦出力し（Ｓ６０５）、Ｓ６０６にて処理を終了する。その後、コマンド生成フィルタ２０７により出力された印刷ジョブは、スプーラ２０４の印刷ジョブ送信処理により通信装置１２０へ送信される。
【００５２】
図９は本実施形態においてＵＳＢポートモニタ２０８が実行する印刷ジョブ送信処理のフローを示す。
【００５３】
まず、ＵＳＢポートモニタ２０８は、スプーラ２０４からの指示により、ポートモニタ拡張ファイル２０９に対応するプログラムの記載に従ってｗｒｉｔｅＰｒｉｎｔＤａｔａ関数を呼び出し、印刷ジョブ送信処理を開始する（Ｓ９０１）。なお、スプーラ２０４は、実施形態１と同様に、コマンド生成フィルタ２０７により出力された印刷ジョブを、所定のサイズに分割する。そして、分割した印刷ジョブのうち未入力の印刷ジョブをｗｒｉｔｅＰｒｉｎｔＤａｔａ関数の引数の１つとして入力する。
【００５４】
次に、ＵＳＢポートモニタ２０８は、Ｓ９０２にてエラー報知処理を行う。なお、エラー報知処理は、第１実施形態において説明した処理と同様であるため、詳細の説明を省略する。
【００５５】
ＵＳＢポートモニタ２０８は、エラー報知処理が終了すると、Ｓ９０３にて、スプーラ２０４から、分割ジョブを受信する。なお、本実施形態では、上述したように、印刷ジョブには識別情報が含まれ、さらに、その印刷ジョブはスプーラ２０４によって分割される。ここで、スプーラ２０４は、印刷ジョブと識別情報を区別せずに分割するため、例えば、識別情報が含まれない分割ジョブや、一部しか識別情報が含まれない分割ジョブ等が生じる。
【００５６】
ＵＳＢポートモニタ２０８は、Ｓ９０４にて、処理対象の印刷ジョブの印刷ジョブ送信処理において、後述のＳ９０６の処理で既に識別情報を検知したか否かを判定する。具体的には、ＵＳＢポートモニタ２０８は、ＪｏｂＰｒｏｐｅｒｔｙＢａｇ２１０が管理する記憶領域内に、既に識別情報を検知したことを示す情報が含まれているか否かを判定する。なお、処理対象の印刷ジョブの印刷ジョブ送信処理における最初のＳ９０４の処理においては、当然、ＪｏｂＰｒｏｐｅｒｔｙＢａｇ２１０が管理する記憶領域内に、既に識別情報を検知したことを示す情報は含まれていない。そのため、ＵＳＢポートモニタ２０８は、既に識別情報を検知していないと判定する。また、既に識別情報を検知したことを示す情報は、識別情報そのものであっても良いし、識別情報を検知したことを示すフラグ等であっても良い。
【００５７】
ＵＳＢポートモニタ２０８は、Ｓ９０４の判定にて、既に識別情報を検知したと判定した場合はＳ９０８に進み、ＪｏｂＰｒｏｐｅｒｔｙＢａｇ２１０が管理する記憶領域に未送信の分割ジョブが保存されているか否かを判定する。ＪｏｂＰｒｏｐｅｒｔｙＢａｇ２１０が管理する記憶領域に未送信の分割ジョブが保存されている場合は、ＵＳＢポートモニタ２０８は、Ｓ９０９にて当該分割ジョブを通信装置１２０へ送信する。ＪｏｂＰｒｏｐｅｒｔｙＢａｇ２１０が管理する記憶領域に未送信の分割ジョブが保存されていない場合は、ＵＳＢポートモニタ２０８は、Ｓ９１０にて、Ｓ９０３でスプーラ２０４から受信した分割ジョブを通信装置１２０に送信する。その後、ＵＳＢポートモニタ２０８は、送信に成功した分割ジョブのサイズ情報をスプーラ２０４に通知する（Ｓ９１１）。Ｓ９１１により、スプーラ２０４は、印刷ジョブのうちどれだけのデータが送信されたかを判断することが可能となる。その後、ＵＳＢポートモニタ２０８は、Ｓ９１４にて処理を終了する。
【００５８】
一方、ＵＳＢポートモニタ２０８は、Ｓ９０４の判定にて、既に識別情報を検知していないと判定した場合は、Ｓ９０５に進む。
【００５９】
Ｓ９０５では、ＵＳＢポートモニタ２０８は、ＪｏｂＰｒｏｐｅｒｔｙＢａｇ２１０が管理する記憶領域に格納されている分割ジョブとＳ９０３でスプーラ２０４から受信した分割ジョブを結合する。これは、以前の印刷ジョブ送信処理において、一部しか識別情報が含まれない分割ジョブを受信していた場合には、ＪｏｂＰｒｏｐｅｒｔｙＢａｇ２１０が管理する記憶領域に、一部しか識別情報が含まれない分割ジョブが格納されているためである。ＵＳＢポートモニタ２０８は、Ｓ９０５にて、以前受信した分割ジョブと今回受信した分割ジョブとを結合することで、分割された複数の識別情報を、１つの完全な識別情報に復元することができる。なお、処理対象の印刷ジョブの印刷ジョブ送信処理における最初のＳ９０５の処理においては、当然、ＪｏｂＰｒｏｐｅｒｔｙＢａｇ２１０が管理する記憶領域内に、分割ジョブは含まれていない。そのため、ＵＳＢポートモニタ２０８は、処理対象の印刷ジョブの印刷ジョブ送信処理における最初のＳ９０５の処理においては、分割ジョブを結合することなく次の処理に進む。
【００６０】
その後、ＵＳＢポートモニタ２０８は、Ｓ９０５で結合した、又はＳ９０３で受信した分割ジョブに識別情報が含まれているか否かを判定する（Ｓ９０６）。ＵＳＢポートモニタ２０８は、識別情報が含まれている（識別情報を復元できた）と判定した場合は、Ｓ９０７にて、分割ジョブに含まれる識別情報及び既に識別情報を検知したことを示す情報をＪｏｂＰｒｏｐｅｒｔｙＢａｇ２１０が管理する記憶領域へ格納する。
【００６１】
その後、ＵＳＢポートモニタ２０８は、Ｓ９０８以降の処理を実行する。
【００６２】
ＵＳＢポートモニタ２０８は、Ｓ９０６にて、識別情報が含まれていないと判定した場合は、Ｓ９１２にて、Ｓ９０５で結合した、又はＳ９０３で受信した分割ジョブをＪｏｂＰｒｏｐｅｒｔｙＢａｇ２１０が管理する記憶領域へ格納する。その後、ＵＳＢポートモニタ２０８は、ＪｏｂＰｒｏｐｅｒｔｙＢａｇ２１０が管理する記憶領域に格納した分割ジョブのサイズをスプーラ２０４へ通知する（Ｓ９１３）。その後、ＵＳＢポートモニタ２０８は、Ｓ９１４にて印刷ジョブ送信処理を終了する。なお、ＵＳＢポートモニタ２０８は、スプーラ２０４からの指示により、全ての分割ジョブを送信するまで、印刷ジョブ送信処理を繰り返す。すなわち、ＵＳＢポートモニタ２０８は、分割ジョブ数と同じ回数、印刷ジョブ送信処理を繰り返す。また、全ての分割ジョブの送信が完了したか否かは、スプーラ２０４が管理している。ＵＳＢポートモニタ２０８は、全ての分割ジョブ（１つの印刷ジョブ）の送信が完了した場合には、スプーラ２０４から通知されることで、以下の印刷終了処理を実行する。
【００６３】
図１１は、本実施系におけるＵＳＢポートモニタ２０８が実行する印刷終了処理のフローを示す。なお、Ｓ１１０１〜Ｓ１１０６、Ｓ１１１５〜Ｓ１１２８の処理は実施形態１にて説明したＳ５０１〜Ｓ５０６、Ｓ５１１〜Ｓ５２４と同様の処理であるため、説明を省略する。
【００６４】
ＵＳＢポートモニタ２０８は、Ｓ１１０７にて、通信装置１２０から情報を読み取って取得する。なお、このとき通信装置１２０から取得する情報は、例えば、通信装置１２０のステータスを示す情報（ステータス情報）、通信装置１２０の能力情報等である。また、本実施形態においては、印刷ジョブの処理の完了後及び、印刷ジョブの処理中であればステータス情報が通信装置１２０から取得される。なお、例えば通信装置１２０との通信経路において通信障害が生じていたり、通信装置１２０がオフラインになっている場合は、いずれの情報も取得されない。
【００６５】
その後、ＵＳＢポートモニタ２０８は、Ｓ１１０８にて、通信装置１２０からの情報を取得したか否かを判定し、取得したと判定した場合はＳ１１０９にて、通信装置１２０から取得した情報の種別解析処理を行う。
【００６６】
ＵＳＢポートモニタ２０８は、Ｓ１１０９における種別解析処理によって、通信装置１２０から取得した情報が、通信装置１２０のステータス情報でないと解析した場合は、Ｓ１１２７に進む。Ｓ１１２７では、ＵＳＢポートモニタ２０８は、スプーラ２０４に対し印刷終了処理を再度実行（リトライ）することを通知する。スプーラ２０４は、リトライが通知された場合、ＵＳＢポートモニタ２０８に、印刷終了処理を再度実行させる。またスプーラ２０４はリトライを通知された場合は、印刷終了処理の対象のジョブを削除せずにジョブキュー２０５内に保持しておく。そして、ＵＳＢポートモニタ２０８は、印刷終了処理を再度実行する場合は、再度Ｓ１１０１からの処理を行う。
【００６７】
ＵＳＢポートモニタ２０８は、Ｓ１１０９における種別解析処理によって、通信装置１２０から取得した情報が通信装置１２０のステータス情報であると解析した場合は、Ｓ１１１０に進む。Ｓ１１１０では、ＵＳＢポートモニタ２０８は、取得したステータス情報を参照して、通信装置１２０のステータスを解析する処理（ステータス解析処理）を行う。ＵＳＢポートモニタ２０８は、Ｓ１１１０において、ステータス情報を解析し、通信装置１２０にて通信装置１２０が処理中の印刷ジョブに付加されている識別情報を取得する。なお、例えば、印刷ジョブの処理がまだ開始されていなかったり、印刷ジョブの処理が既に終了している場合は、通信装置１２０が印刷ジョブの処理を実行中でない場合がある。この場合には、ステータス情報に識別情報は含まれないため、ＵＳＢポートモニタ２０８は、識別情報を取得できない。
【００６８】
その後、ＵＳＢポートモニタ２０８は、Ｓ１１１１にて、ＪｏｂＰｒｏｐｅｒｔｙＢａｇ２１０が管理する記憶領域に印刷ジョブ送信処理時に保存した識別情報が、取得したステータス情報に含まれていたか否かを判定する。具体的には、ＵＳＢポートモニタ２０８は、印刷ジョブ送信処理時に保存した識別情報とＳ１１１０にて取得した識別情報を比較し、両者が一致しているか否かを判定する。なお、ＵＳＢポートモニタ２０８が印刷ジョブ送信処理にて送信した印刷ジョブを、通信装置１２０が処理中であれば、両者が一致する。ＵＳＢポートモニタ２０８は、両者の識別情報が一致していると判定した場合は、Ｓ１１１５に進む。一方、ＵＳＢポートモニタ２０８が印刷ジョブ送信処理にて送信した印刷ジョブの処理を、通信装置１２０が完了しており、且つ他の情報処理装置から送信された印刷ジョブの処理を、通信装置１２０が処理しているのであれば、両者は一致しない。ＵＳＢポートモニタ２０８は、両者の識別情報が一致していないと判定した場合、印刷ジョブの履歴情報取得のためのリクエストコマンドを通信装置１２０に対し送信する（Ｓ１１１２）。なお、上述したように、取得したステータス情報にいずれの識別情報も含まれていない場合がある。その場合も、ＵＳＢポートモニタ２０８は、Ｓ１１１２に進み、印刷ジョブの履歴情報取得のためのリクエストコマンドを通信装置１２０に対し送信する。
【００６９】
Ｓ１１１２の処理の後、ＵＳＢポートモニタ２０８は、通信装置１２０から印刷ジョブの履歴情報を読み出して取得する（Ｓ１１１３）。図１２は印刷ジョブの履歴情報の一例を示す。印刷ジョブの履歴情報は、通信装置１２０にて処理が終了した各印刷ジョブが、どのような状態で終了したかを、印刷ジョブに付加された識別情報と共に一覧で示すものである。
【００７０】
そして、Ｓ１１１４にて、ＵＳＢポートモニタ２０８は、ＪｏｂＰｒｏｐｅｒｔｙＢａｇ２１０が管理する記憶領域に保存した識別情報に対応する印刷ジョブが、取得した履歴情報に含まれているか否かを判定する。なお、ＪｏｂＰｒｏｐｅｒｔｙＢａｇ２１０が管理する記憶領域に保存した識別情報に対応する印刷ジョブの処理が既に終了していた場合は、履歴情報に当該印刷ジョブの情報が含まれる。そのため、ＵＳＢポートモニタ２０８は、ＪｏｂＰｒｏｐｅｒｔｙＢａｇ２１０が管理する記憶領域に保存した識別情報に対応する印刷ジョブが、取得した履歴情報に含まれていると判定した場合はＳ１１２６に進む。そして、ＵＳＢポートモニタ２０８は、Ｓ１１２６にて、スプーラ２０４に対し印刷終了処理が完了したことを通知する。その後、ＵＳＢポートモニタ２０８は、Ｓ１１２８にて、印刷終了処理を終了することを決定する。一方、ＪｏｂＰｒｏｐｅｒｔｙＢａｇ２１０が管理する記憶領域に保存した識別情報に対応する印刷ジョブの処理がまだ通信装置１２０にて開始されていない場合は、履歴情報に当該印刷ジョブの情報が含まれない。ＵＳＢポートモニタ２０８は、ＪｏｂＰｒｏｐｅｒｔｙＢａｇ２１０が管理する記憶領域に保存した識別情報に対応する印刷ジョブが、取得した履歴情報に含まれていない場合は、Ｓ１１１５に進み印刷処理の中止判定処理を行う。なお、印刷ジョブの履歴情報には、例えば、ジョブ名やジョブの送信日時等の情報が含まれていても良く、ＵＳＢポートモニタ２０８は、それらの情報によって、印刷ジョブ送信処理において送信した印刷ジョブが履歴情報に含まれているか否かを判定しても良い。
【００７１】
以上のように、本実施形態では、通信装置１２０が処理中の印刷ジョブに付された識別情報を取得し、取得した識別情報の解析結果又は識別情報を取得できたか否かによって、情報処理装置１１０が送信した印刷ジョブが終了したか否かを判定する。このような形態とすることで、通信装置１２０からジョブの終了情報を取得できない形態においても、情報処理装置１１０が送信した印刷ジョブが終了したか否かを判定することができる。すなわち、通信装置１２０からジョブの終了情報を取得できない形態においても、送信データ解析処理を回避した効率的な印刷ジョブの制御方法を実現することが可能となる。
【００７２】
＜実施形態３＞
本発明は、前述の実施形態の機能を実現するソフトウェアのプログラムコードを記録した記録媒体をシステムあるいは装置に供給し、そのシステムあるいは装置のＣＰＵ等が記録媒体に格納されたプログラムコードを読み出し実行することによっても達成される。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することとなり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。
【００７３】
プログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、ハードディスク、ＳＳＤ、光ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、磁気テープ、不揮発性のメモリカード、ＲＯＭ、ＤＶＤなどを用いることができる。
【００７４】
また、コンピュータが読み出したプログラムコードを実行することにより、前述した実施例の機能が実現される。しかしそれだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼動しているＯＳなどが実際の処理の一部または全部を行い、その処理によって前述した実施例の機能が実現される場合も含まれることは言うまでもない。  
【図１】
0006639269.tif 000002
【図２】
0006639269.tif 000003
【図３】
0006639269.tif 000004
【図４】
0006639269.tif 000005
【図５】
0006639269.tif 000006
【図６】
0006639269.tif 000007
【図７】
0006639269.tif 000008
【図８】
0006639269.tif 000009
【図９】
0006639269.tif 000010
【図１０】
0006639269.tif 000011
【図１１】
0006639269.tif 000012
【図１２】
0006639269.tif 000013