(57)【要約】【課題】低機能のプリンタを利用した周辺装置システムにおいて、プリンタドライバから正しい内容の印刷ジョブに関する通知を正確なタイミングかつ正しい順序で発行し、アプリケーションに正しい情報を正確なタイミングかつ正しい順序で伝えることで、信頼性の高い正確な周辺装置制御システムを実現する。【解決手段】情報処理装置と、周辺装置とから成る周辺装置制御システムであって、前記情報処理装置は、周辺装置から周辺装置に関する周辺装置情報を取得して、周辺装置情報からジョブ情報を生成し、ジョブ情報を通知する。その際に、通知済みの印刷中ページ番号及び印刷済みページ番号と、現在印刷中のページ番号とに基づいて未発行の通知を作成し、発行する。【選択図】図１３
2008310701.tif 000002
【特許請求の範囲】
【請求項１】
第１の情報処理装置と、周辺装置とから成る周辺装置制御システムであって、
前記第１の情報処理装置は、前記周辺装置から前記周辺装置に関する周辺装置情報を取得する取得手段と、前記周辺装置情報から通知情報を生成する通知情報生成手段と、前記通知情報を通知する通知手段を備え、
前記取得手段は、前記周辺装置からある時間間隔で前記周辺装置情報を取得し、ある時刻における第１の周辺装置情報と、別の時刻における第２の周辺装置情報から通知情報を生成し、前記通知情報を通知することを特徴とする周辺装置制御システム。
【請求項２】
第１の情報処理装置と、第２の情報処理装置と、周辺装置とから成る周辺装置制御システムであって、
前記第１の情報処理装置は、前記周辺装置と接続されていて、前記周辺装置から前記周辺装置に関する周辺装置情報を取得する取得手段と、前記周辺装置情報から通知情報を生成する通知情報生成手段と、前記通知情報を前記第２の情報処理装置に通知する通知手段を備え、
前記取得手段は、前記周辺装置からある時間間隔で前記周辺装置情報を取得し、ある時刻における第１の周辺装置情報と、別の時刻における第２の周辺装置情報から通知情報を生成し、前記通知情報を通知することを特徴とする周辺装置制御システム。
【請求項３】
前記第１の情報処理装置は前記周辺装置を制御する周辺装置制御手段を備え、
前記周辺装置制御手段は、前記周辺装置情報を取得し、この周辺装置情報から通知情報を生成し、前記通知情報を通知することを特徴とする請求項１または２記載の周辺装置制御システム。
【請求項４】
前記通知情報は補填された通知情報を含むことを特徴とする請求項１または２記載の周辺装置制御システム。
【請求項５】
前記周辺装置は印刷装置で構成され、前記通知情報は、前記周辺装置で印刷される印刷物のページ番号を含むことを特徴とする請求項４記載の周辺装置制御システム。
【請求項６】
前記周辺装置制御手段は、前記周辺装置へのデータの書き込みを制御する書き込みスレッドと、前記周辺装置からのデータの読み出しを制御する読み出しスレッドにより前記周辺装置を制御し、前記書き込みスレッドと前記読み出しスレッド間で情報の共有を行う情報共有手段を備えることを特徴とする請求項３記載の周辺装置制御システム。
【請求項７】
前記周辺装置制御手段は、前記周辺装置情報と前記情報共有手段で共有される共有情報から、前記通知情報を生成することを特徴とする請求項６記載の周辺装置制御システム。
【請求項８】
前記周辺装置制御手段は、前記通知情報の種類に応じて、前記共有情報から生成した通知情報の一部を変更して、通知することを特徴とする請求項７記載の周辺装置制御システム。
【請求項９】
前記通知情報は複数の種類で構成され、前記周辺装置制御手段は、前記通知情報を第１の通知情報群と第２の通知情報群に分け、前記第１の通知情報群に含まれる通知情報を前記書き込みスレッドから通知し、前記第２の通知情報群に含まれる通知情報を前記読み出しスレッドから通知することを特徴とする請求項６記載の周辺装置制御システム。
【請求項１０】
前記通知情報に依存関係を設けることを特徴とする請求項１または２記載の周辺装置制御システム。
【請求項１１】
前記通知手段は、ある通知情報を通知した後、ある時間が経過した後、次の通知情報を通知することを特徴とする請求項１または２記載の周辺装置制御システム。
【請求項１２】
前記通知情報は、時刻を表す時刻情報を含むことを特徴とする請求項１または２記載の周辺装置制御システム。
【請求項１３】
前記通知情報は、通知の順序を表す順序情報を含むことを特徴とする請求項１または２記載の周辺装置制御システム。
【請求項１４】
前記第１の情報処理装置または前記第２の情報処理装置は、前記通知情報を受信可能なアプリケーションを備え、前記アプリケーションは、前記時刻情報に従って通知情報の順序を並び替えることを特徴とする請求項１２記載の周辺装置制御システム。
【請求項１５】
前記第１の情報処理装置または前記第２の情報処理装置は、前記通知情報を受信可能なアプリケーションを備え、前記アプリケーションは、前記順序情報に従って通知情報の順序を並び替えることを特徴とする請求項１３記載の周辺装置制御システム。
【請求項１６】
第１の情報処理装置であって、
前記第１の情報処理装置は、周辺装置から前記周辺装置に関する周辺装置情報を取得する取得手段と、前記周辺装置情報から通知情報を生成する通知情報生成手段と、前記通知情報を通知する通知手段を備え、
前記取得手段は、前記周辺装置からある時間間隔で前記周辺装置情報を取得し、ある時刻における第１の周辺装置情報と、別の時刻における第２の周辺装置情報から通知情報を生成し、前記通知情報を通知することを特徴とする情報処理装置。
【請求項１７】
第１の情報処理装置であって、
前記第１の情報処理装置は、周辺装置と接続されていて、前記周辺装置から前記周辺装置に関する周辺装置情報を取得する取得手段と、前記周辺装置情報から通知情報を生成する通知情報生成手段と、前記通知情報を第２の情報処理装置に通知する通知手段を備え、
前記取得手段は、前記周辺装置からある時間間隔で前記周辺装置情報を取得し、ある時刻における第１の周辺装置情報と、別の時刻における第２の周辺装置情報から通知情報を生成し、前記通知情報を通知することを特徴とする情報処理装置。
【請求項１８】
第１の情報処理装置と、周辺装置とから成る周辺装置制御方法であって、
前記第１の情報処理装置は、前記周辺装置から前記周辺装置に関する周辺装置情報を取得する取得手段と、前記周辺装置情報から通知情報を生成する通知情報生成手段と、前記通知情報を通知する通知手段を備え、
前記取得手段は、前記周辺装置からある時間間隔で前記周辺装置情報を取得し、ある時刻における第１の周辺装置情報と、別の時刻における第２の周辺装置情報から通知情報を生成し、前記通知情報を通知するステップを備えることを特徴とする周辺装置制御方法。
【請求項１９】
第１の情報処理装置と、第２の情報処理装置と、周辺装置とから成る周辺装置制御方法であって、
前記第１の情報処理装置は、前記周辺装置と接続されていて、前記周辺装置から前記周辺装置に関する周辺装置情報を取得する取得手段と、前記周辺装置情報から通知情報を生成する通知情報生成手段と、前記通知情報を前記第２の情報処理装置に通知する通知手段を備え、
前記取得手段は、前記周辺装置からある時間間隔で前記周辺装置情報を取得し、ある時刻における第１の周辺装置情報と、別の時刻における第２の周辺装置情報から通知情報を生成し、前記通知情報を通知するステップを備えることを特徴とする周辺装置制御方法。
【請求項２０】
第１の情報処理装置と、周辺装置とから成る周辺装置制御方法を、コンピュータに実行させるためのプログラムであって、
前記第１の情報処理装置は、前記周辺装置から前記周辺装置に関する周辺装置情報を取得する取得手段と、前記周辺装置情報から通知情報を生成する通知情報生成手段と、前記通知情報を通知する通知手段を備え、
前記取得手段は、前記周辺装置からある時間間隔で前記周辺装置情報を取得し、ある時刻における第１の周辺装置情報と、別の時刻における第２の周辺装置情報から通知情報を生成し、前記通知情報を通知するステップを備えることを特徴とするプログラム。
【請求項２１】
第１の情報処理装置と、第２の情報処理装置と、周辺装置とから成る周辺装置制御方法を、コンピュータに実行させるためのプログラムであって、
前記第１の情報処理装置は、前記周辺装置と接続されていて、前記周辺装置から前記周辺装置に関する周辺装置情報を取得する取得手段と、前記周辺装置情報から通知情報を生成する通知情報生成手段と、前記通知情報を前記第２の情報処理装置に通知する通知手段を備え、
前記取得手段は、前記周辺装置からある時間間隔で前記周辺装置情報を取得し、ある時刻における第１の周辺装置情報と、別の時刻における第２の周辺装置情報から通知情報を生成し、前記通知情報を通知するステップを備えることを特徴とするプログラム。
【請求項２２】
第１の情報処理装置と、周辺装置とから成る周辺装置制御方法を、コンピュータに実行させるためのプログラムを記憶する記憶媒体であって、
前記第１の情報処理装置は、前記周辺装置から前記周辺装置に関する周辺装置情報を取得する取得手段と、前記周辺装置情報から通知情報を生成する通知情報生成手段と、前記通知情報を通知する通知手段を備え、
前記取得手段は、前記周辺装置からある時間間隔で前記周辺装置情報を取得し、ある時刻における第１の周辺装置情報と、別の時刻における第２の周辺装置情報から通知情報を生成し、前記通知情報を通知するステップを備えることを特徴とする記憶媒体。
【請求項２３】
第１の情報処理装置と、第２の情報処理装置と、周辺装置とから成る周辺装置制御方法を、コンピュータに実行させるためのプログラムを記憶する記憶媒体であって、
前記第１の情報処理装置は、前記周辺装置と接続されていて、前記周辺装置から前記周辺装置に関する周辺装置情報を取得する取得手段と、前記周辺装置情報から通知情報を生成する通知情報生成手段と、前記通知情報を前記第２の情報処理装置に通知する通知手段を備え、
前記取得手段は、前記周辺装置からある時間間隔で前記周辺装置情報を取得し、ある時刻における第１の周辺装置情報と、別の時刻における第２の周辺装置情報から通知情報を生成し、前記通知情報を通知するステップを備えることを特徴とする記憶媒体。
【請求項２４】
他のプログラムに対して印刷の進捗を通知するプリンタ制御装置であって、
最後に通知した印刷中のページ番号と、最後に通知した印刷済のページ番号とを保存する保存手段と、
プリンタから現在印刷中のページ番号を一定時間ごとに取得する取得手段と、
前記現在印刷中のページ番号と前記最後に通知した印刷中のページ番号とに基づいて、印刷中のページ番号の通知が発行されていないページ、および、印刷済みのページ番号の通知が発行されていないページの存在を判定し、存在する場合には、該当するページごとに印刷中の通知および印刷済みの通知をその順序で発行する発行手段と
を備えることを特徴とするプリンタ制御装置。
【請求項２５】
印刷が中断された場合には、印刷の終了の指示に対して、中断されたことを示す通知を発行する手段をさらに備えることを特徴とする請求項２４に記載のプリンタ制御装置。
【請求項２６】
前記発行手段により発行される通知に、タイムスタンプと、発行の順序を示す情報とがさらに含まれることを特徴とする請求項２４または２５に記載のプリンタ制御装置。
【請求項２７】
前記発行手段は、通知の発行の後、一定時間の待機することを特徴とする請求項２４または２５に記載のプリンタ制御装置。
【請求項２８】
コンピュータにより実行される、他のプログラムに対して印刷の進捗を通知するプリンタ制御プログラムであって、
最後に通知した印刷中のページ番号と、最後に通知した印刷済のページ番号とを保存する保存工程と、
プリンタから現在印刷中のページ番号を一定時間ごとに取得する取得工程と、
前記現在印刷中のページ番号と前記最後に通知した印刷中のページ番号とに基づいて、印刷中のページ番号の通知が発行されていないページ、および、印刷済みのページ番号の通知が発行されていないページの存在を判定し、存在する場合には、該当するページごとに印刷中の通知および印刷済みの通知をその順序で発行する発行工程と
をコンピュータにより実行させることを特徴とするプリンタ制御プログラム。
【請求項２９】
他のプログラムに対して印刷の進捗を通知するプリンタ制御方法であって、
保存手段が、最後に通知した印刷中のページ番号と、最後に通知した印刷済のページ番号とを保存する保存工程と、
取得手段が、プリンタから現在印刷中のページ番号を一定時間ごとに取得する取得工程と、
発行手段が、前記現在印刷中のページ番号と前記最後に通知した印刷中のページ番号とに基づいて、印刷中のページ番号の通知が発行されていないページ、および、印刷済みのページ番号の通知が発行されていないページの存在を判定し、存在する場合には、該当するページごとに印刷中の通知および印刷済みの通知をその順序で発行する発行工程と
をコンピュータにより実行させることを特徴とするプリンタ制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、周辺装置制御システム、情報処理装置、周辺装置制御方法、プリンタ制御装置及びプリンタ制御方法に関する。
【背景技術】
【０００２】
近年、ネットワークの基盤が整備されるに従い、ネットワーク対応型のプリンタ、複写機、ファクシミリ、スキャナ、デジタルカメラ、及びこれらの複合機能を備える装置（周辺装置）が急速に普及しつつある。これに伴い、周辺装置の使用状況をその進行状態も含め正確に把握する必要があるケースが生じている。例えば、プリンタの出力枚数に応じて課金するアプリケーションなどがその一例である。周辺装置の使用状況に応じて課金するアプリケーションの例としては、課金アプリケーションの例が挙げられる。
【０００３】
ここで周辺装置の例としてＬＢＰや複写機等の高機能なプリンタを用いる場合は、課金アプリケーションが、プリンタから発行される印刷ジョブに関する通知の内容に従って、印刷が終了したページに対して課金を行うような印刷システムが存在する。このような印刷システムでは高機能なプリンタが使用されるので、プリンタ自身が各ページの印刷状況をモニタし、その状況に応じて適切な印刷ジョブに関する通知を発行することができる。そのため前記アプリケーションにおいて正確に課金を行うことが可能である。
【０００４】
一方、周辺装置の例としてインクジェットプリンタ等の低機能のプリンタは印刷ジョブに関する通知機能を備えていない。この場合プリンタと接続されている情報処理装置にインストールされている、プリンタを制御する為に必要なプリンタドライバを使って、印刷ジョブに関する通知を発行するような印刷システムが考案されている（例えば特許文献１等参照）。特許文献１には、通知端末装置からポーリングによりプリンタの状態情報を取得して、通知端末装置から報知端末装置にその状態情報を通知することが記載されている。
【特許文献１】特許第３８４１０２３号
【発明の開示】
【発明が解決しようとする課題】
【０００５】
このような低機能のプリンタを利用した印刷システムにおいては、例えば４秒毎の定期的な割り込み関数であるＲｅａｄＰｏｒｔ関数を使って印刷ジョブの状態を監視する。またＷｒｉｔｅＰｏｒｔ関数等により書き込みを行った際にも、印刷ジョブの状態を得ることができる。しかしジョブ状態の監視はポーリングによって行われ、印刷処理の進行とは必ずしも同期しないため、次のような問題点があった。
【０００６】
（１）情報処理装置が、たとえば印刷データ量が少ないページなどについて、そのページの印刷状況をモニタすることができない場合がある。モニタできなかったページの「ページ開始」通知や「ページ終了」通知を発行できない。共有情報はランゲージモニタ（後述する）により管理される情報で、プリンタの状態、たとえば印刷処理の進捗情報すなわちジョブ状態を含んでいる。ただし、ランゲージモニタは、ライト処理やリード処理の関数が実行された場合にプリンタからジョブ状態を取得し、状態に変化があった場合に、ジョブ状態を通知情報（ジョブ情報とも呼ぶ。）として、関数の呼出し元に返す。そのため、互いに直近の２つの関数の合間に、ジョブ状態の１項目が複数回変化したとしても、その項目の値は、先の関数で捕捉された状態から後の関数で捕捉された状態へと１回変化しただけであるかのように関数の呼び出し元に通知される。
【０００７】
たとえば共通情報からジョブ状態を読み取るためのＲｅａｄＰｏｒｔ関数を４秒おきに実行するものとしよう。２回のＲｅａｄＰｏｒｔ関数処理の間にたとえば或るページの印刷が開始され、印刷が完了してしまうと、そのページに関しては印刷開始の通知（「ページ開始」通知）も、印刷終了の通知（「ページ終了」通知）も発行されることはない。
【０００８】
（２）オペレータによって印刷ジョブがキャンセルされた時、正常に印刷が開始または終了されているページの「ページ開始」通知や「ページ終了」通知が発行される前に「印刷キャンセル」通知が発行される。そのため、印刷ジョブに関する通知の順序が不正確になってしまう。例えば、或るページＰの印刷が終了し、次のページＱの印刷が開始された後、ページＰの「ページ終了」通知とページＱの「ページ開始」通知とが発行される前に、印刷がキャンセルされたものとしよう。その場合、キャンセル指示のためのＷｒｉｔｅＰｏｒｔ関数によりキャンセル情報がセットされ、ＷｒｉｔｅＰｏｒｔ関数に対して「印刷キャンセル」通知が発行される。そしてその後に実行されるＲｅａｄＰｏｒｔ関数に対して、ページＰの「ページ終了」通知とページＱの「ページ開始」通知とが発行される。しかもそれらページはキャンセル前に終了或いは開始されているにもかかわらず、その「ページ終了」通知と「ページ開始」通知に含まれるキャンセル情報は「キャンセルされた」ことを示すことになる。
【０００９】
（３）また、プリンタドライバから発行される印刷ジョブに関する通知が、ＯＳ内における処理等の影響を受けて、アプリケーションで受信される際に、発行された順序と異なる順序で受信されるケースがある、という問題点もあった。
【００１０】
本発明では上記従来例に鑑みたもので、上記問題点を解消したプリンタ制御装置及びプリンタ制御プログラム及びプリンタ制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
上記目的を達成するために本発明は以下の構成を備える。すなわち、第１の情報処理装置と、周辺装置とから成る周辺装置制御システムであって、前記第１の情報処理装置は、前記周辺装置から前記周辺装置に関する周辺装置情報を取得する取得手段と、前記周辺装置情報から通知情報を生成する通知情報生成手段と、前記通知情報を通知する通知手段を備え、前記取得手段は、前記周辺装置からある時間間隔で前記周辺装置情報を取得し、ある時刻における第１の周辺装置情報と、別の時刻における第２の周辺装置情報から通知情報を生成し、前記通知情報を通知する手段を備える。
【００１２】
また、他の側面によれば、本発明は、第１の情報処理装置と、第２の情報処理装置と、周辺装置とから成る周辺装置制御システムであって、前記第１の情報処理装置は、前記周辺装置と接続されていて、前記周辺装置から前記周辺装置に関する周辺装置情報を取得する取得手段と、前記周辺装置情報から通知情報を生成する通知情報生成手段と、前記通知情報を前記第２の情報処理装置に通知する通知手段を備え、前記取得手段は、前記周辺装置からある時間間隔で前記周辺装置情報を取得し、ある時刻における第１の周辺装置情報と、別の時刻における第２の周辺装置情報から通知情報を生成し、前記通知情報を通知する。
【００１３】
また、他の側面によれば、本発明は、第１の情報処理装置であって、前記第１の情報処理装置は、周辺装置から前記周辺装置に関する周辺装置情報を取得する取得手段と、前記周辺装置情報から通知情報を生成する通知情報生成手段と、前記通知情報を通知する通知手段を備え、前記取得手段は、前記周辺装置からある時間間隔で前記周辺装置情報を取得し、ある時刻における第１の周辺装置情報と、別の時刻における第２の周辺装置情報から通知情報を生成し、前記通知情報を通知する。
【００１４】
また、他の側面によれば、本発明は、第１の情報処理装置であって、前記第１の情報処理装置は、周辺装置と接続されていて、前記周辺装置から前記周辺装置に関する周辺装置情報を取得する取得手段と、前記周辺装置情報から通知情報を生成する通知情報生成手段と、前記通知情報を第２の情報処理装置に通知する通知手段を備え、前記取得手段は、前記周辺装置からある時間間隔で前記周辺装置情報を取得し、ある時刻における第１の周辺装置情報と、別の時刻における第２の周辺装置情報から通知情報を生成し、前記通知情報を通知する。
【００１５】
また、他の側面によれば、本発明は、以下の構成も備える。すなわち、他のプログラムに対して印刷の進捗を通知するプリンタ制御装置であって、
最後に通知した印刷中のページ番号と、最後に通知した印刷済のページ番号とを保存する保存手段と、
プリンタから現在印刷中のページ番号を一定時間ごとに取得する取得手段と、
前記現在印刷中のページ番号と前記最後に通知した印刷中のページ番号とに基づいて、印刷中のページ番号の通知が発行されていないページ、および、印刷済みのページ番号の通知が発行されていないページの存在を判定し、存在する場合には、該当するページごとに印刷中の通知および印刷済みの通知をその順序で発行する発行手段とを備える。
【発明の効果】
【００１６】
本発明によれば、次のような効果が得られる。
（１）情報処理装置がモニタできない印刷データ量の少ないページの印刷状況に関しても、「ページ開始」通知や「ページ終了」通知等の通知を正しく発行することができる。
（２）オペレータによって印刷ジョブがキャンセルされた時、正常に印刷が開始または終了されているページの「ページ開始」通知や「ページ終了」通知が発行された後に「印刷キャンセル」通知を発行することができる。そのため印刷ジョブに関する通知を正確なタイミングかつ正しい順序で発行することができる。
（３）印刷ジョブに関する通知の内容が正しい通知を発行することができる。
（４）プリンタドライバから発行される印刷ジョブに関する通知が、ＯＳ内における処理等の影響を受けて、アプリケーションで受信される際に、発行された順序と異なる順序で受信されるケースにおいても、正しい順序に変換して正確に処理する。こうすることで信頼性の高い周辺装置制御システムを実現することができる。
【発明を実施するための最良の形態】
【００１７】
以下、本発明の実施の形態を、図面を参照して説明する。以下で引用される関数（情報）の内、詳しい説明をしていないものに関しては、「ｍｓｄｎ（ｒ）ｓｕｂｓｃｒｉｐｔｉｏｎｓ  Ｌｉｂｒａｒｙ  Ｄｉｓｃ  １  Ｊａｎｕａｒｙ  ２００７  日本語版ＤＶＤ」に収録の「ＭＳＤＮ  Ｌｉｂｒａｒｙ  ｆｏｒ  Ｖｉｓｕａｌ  Ｓｔｕｄｉｏ  ２００５  −  日本語版  −」のヘルプに記載されている。そこでその説明を省略する。
【００１８】
以下において、ＵＳＢとはＵｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓの略であり、双方向通信が可能な公知のインタフェースであるので、その詳細説明は省略する。以降のタイミングチャート（図７、図９、図１１、図１３等に示す）及び通知内容を表す図（図８、図１０、図１２、図１４等に示す）において、次のような省略記号を使用する。
【００１９】
タイミングチャートにおけるＰ１は、通知内容におけるｐａｇｅＰｒｉｎｔｉｎｇに相当し、図５のジョブ情報における印刷中の印刷物のページ番号１０８に相当する。タイミングチャートにおけるＰ２は、通知内容におけるｐａｇｅＰｒｉｎｔｅｄに相当し、図５のジョブ情報における印刷済みの印刷物のページ番号１０９に相当する。タイミングチャートにおけるＣＩは、通知内容におけるｃａｎｃｅｌｌｅｄに相当し、図５のジョブ情報におけるキャンセル情報１１１に相当する。
【００２０】
［第１の実施の形態］
図１は、本発明に係る情報処理装置及び周辺装置からなる周辺装置制御システムの一実施形態におけるシステムの構成部分を表すブロック図である。同図において、情報処理装置１、２は、一般的なパーソナルコンピュータ（以降、ＰＣと略す場合がある）で構成される。ＰＣ１、ＰＣ２は図２で後述するようなハードウェアで構成され、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）として米国マイクロソフト社のＷｉｎｄｏｗｓ  Ｖｉｓｔａ（登録商標）がインストールされている。ＰＣ１とＰＣ２はＥｔｈｅｒｎｅｔ（登録商標）で構成されるネットワーク４を介して接続され、互いに双方向通信が可能である。３はプリンタであり、カラーインクジェットプリンタで構成され、本発明における周辺装置の一例としている。プリンタ３はＡＢＣ社製のＫｍｍｎというモデル名とした。尚、本発明における周辺装置としては、プリンタ、複写機、ファクシミリ、スキャナ、デジタルカメラ、及びこれらの複合機能を備える装置等であってもよい。プリンタ３は図３で後述するようなハードウェアで構成され、ＰＣ１とＵＳＢインタフェース９を介して接続されており、互いに双方向通信が可能である。図４で後述するランゲージモニタ３６、４８は、Ｗｉｎｄｏｗｓ（登録商標）用のダイナミックリンクライブラリで構成される。アプリケーション３０、４７は、Ｗｉｎｄｏｗｓ用の実行可能形式のファイル（＊．ＥＸＥ）で構成される。本発明のアプリケーションの一例としては、アプリケーション３０、４７は図１８に示すような課金アプリケーション（Ｐｈｏｔｏ  Ａｌｂｕｍ  Ｃｒｅａｔｏｒ）である。
【００２１】
本発明の周辺装置制御システムでは、次のような２つの印刷システムの例を挙げているが、以降では、ローカル印刷の例を中心に説明する。
（１）ＰＣ１内のアプリケーション３０からＵＳＢインタフェース９を介してプリンタ３に印刷するローカル印刷システム。このシステムでは、ＰＣ１が第１の情報処理装置に相当する。
（２）ＰＣ１がサーバ、ＰＣ２がクライアントとなるような関係を持ち、ＰＣ１はプリンタ３を共有プリンタとしてネットワーク４を介して他の情報処理装置（ＰＣ２）から印刷することができるプリントサーバの機能を備えるネットワーク印刷システム。なおこの印刷機能をネットワーク印刷と呼ぶ。ここでサーバは第１の情報処理装置に、クライアントは第２の情報処理装置に相当する。
【００２２】
本発明の周辺装置制御システムは、前記ＭＳＤＮのサイトで公開されているＡｓｙｎｃｈｒｏｎｏｕｓ  Ｐｒｉｎｔｉｎｇ  Ｎｏｔｉｆｉｃａｔｉｏｎ  Ｉｎｔｅｒｆａｃｅｓを利用した印刷ジョブに関する通知機能を備えている。ＰＣ２はこのＡｓｙｎｃｈｒｏｎｏｕｓ  Ｐｒｉｎｔｉｎｇ  Ｎｏｔｉｆｉｃａｔｉｏｎ  Ｉｎｔｅｒｆａｃｅｓを利用して、ＰＣ１内のＬＭ３６から通知される情報を受け取ることができる。このＡｓｙｎｃｈｒｏｎｏｕｓ  Ｐｒｉｎｔｉｎｇ  Ｎｏｔｉｆｉｃａｔｉｏｎ  Ｉｎｔｅｒｆａｃｅｓを利用した通知機能に関しては、Ｗｉｎｄｏｗｓ  Ｖｉｓｔａ（登録商標）の公知の機能であるので、その詳細説明は省略する。
【００２３】
＜ＰＣのハードウェア＞
図２はＰＣのハードウェア構成の一例を表すブロック図である。ＰＣ１、ＰＣ２は何れも同図に示すようなハードウェア構成を持つが、ここではＰＣ１を例にして説明する。ＰＣ１は、ランダムアクセスメモリ部（ＲＡＭ１２０１）、記憶部であるハードディスクドライブ部（ＨＤＤ１２０２）、入力部の一例であるキーボード部（ＫＢＤ１２０３）、制御部のＣＰＵ１２０４を有する。さらに、表示部の一例である表示用ディスプレイ（ＬＣＤ１２０５）、通信制御部の一例であるネットワークボード（ＮＢ１２０７）、以上のＰＣ１の構成要素を互いに接続するバス１２０６を有する。なお、記憶部は、可搬性ＣＤ−ＲＯＭまたは内部据付のＲＯＭなどであってもよい。図１に示すＰＣ１の各モジュール（ＬＭ３６）は、ＨＤＤ１２０２に記憶され、必要に応じてＲＡＭ１２０１に読み出されてＣＰＵ１２０４により実行される。これにより、ＣＰＵ１２０４が、図１に示す各モジュールの機能を実現する。
【００２４】
＜プリンタのハードウェア＞
図３はプリンタのハードウェア構成を表すブロック図である。プリンタ３は同図に示すようなハードウェア構成を持つ。同図において、マイクロプロセッサ等から構成されるＣＰＵ１５は、プリンタ３の中央処理装置として、ＲＯＭ１６に記憶されているプログラムに従って、ＲＡＭ１７、通信部１８、記録部１９を制御する。ＲＯＭ１６にはプリンタドライバ５０（図４で後述する）の制御に従ってプリンタ３が記録（印刷）処理や、状態をＰＣ１へ伝える処理を行うプログラムが記憶されている。プリンタドライバは、プリンタを制御するプリンタ制御プログラムとも呼ぶことができる。また、ＣＰＵによりプリンタ制御プログラムが実行されているコンピュータを、プリンタ制御装置と呼ぶこともできる。ＲＡＭ１７は主にＰＣ１から送られて、それをもとに記録部１９によって印刷される印字データが一時的に記憶される。通信部１８にはＵＳＢインタフェース９用の接続ポートが含まれており、ＵＳＢの通信を制御する。記録部１９は、インクジェット方式の記録ヘッド、各カラーインク、キャリッジ、記録紙搬送機構等から構成される記録ユニットと、前記印字データをもとに前記記録ヘッドにて印字用パルスを発生させる為のＡＳＩＣ等から構成される電気回路とから構成される。印刷可能なアプリケーション上での印刷操作によって、アプリケーションで開かれているファイルの表示内容（画像データ）が、ＥＭＦ形式のスプールファイルとしてＰＣ１のＨＤＤ１２０２に一時的に格納される。そしてプリンタドライバ５０を介してプリンタ３制御用コマンドを含む印字データに変換された後、ＵＳＢインタフェース９を介してプリンタ３に送られる。プリンタ３にて受信された印字データは、記録部１９によって印字用パルスに変換されて、記録紙上に印刷される。
【００２５】
＜プリンタドライバの構成＞
図４はＰＣ１におけるプリンタドライバの構成を表す図である。同図において、ＰＣ１にインストールされているプリンタドライバ５０は、複数のモジュール３３〜３８から構成される。印刷可能なアプリケーション３０は、例えば、Ｗｉｎｄｏｗｓ  Ｖｉｓｔａ（登録商標）ＯＳに標準で同梱されているテキストエディタであるＮｏｔｅｐａｄ（Ｎｏｔｅｐａｄ．ｅｘｅ）等に相当する。尚、本発明では、アプリケーション３０は図１８に示すような課金アプリケーション（Ｐｈｏｔｏ  Ａｌｂｕｍ  Ｃｒｅａｔｏｒ）である。Ｇｒａｐｈｉｃｓ  Ｄｅｖｉｃｅ  Ｉｎｔｅｒｆａｃｅ（ＧＤＩ）３１は、Ｗｉｎｄｏｗｓ  Ｖｉｓｔａ（登録商標）  ＯＳの一部である。プリンタキュー３２は、スプーラ４０の一部として構成され、印刷ジョブがキューイングされる。キューイングされた印刷ジョブは、プリンタキューフォルダ（ここでは説明を省略する）に表示される。プリントプロセッサ３３は、印刷レイアウトの変更や印刷画像の特殊処理が行われる。グラフィックスドライバ３４は、プリンタドライバの画像処理のコアとして、ＧＤＩ３１から送られて来る描画命令をもとに印刷用の画像処理を行い、印刷制御コマンドを作成する。ＵＩモジュール３５は、プリンタドライバのユーザインタフェースの提供及び制御を行う。ランゲージモニタ３６は、データの通信Ｉ／Ｆとしてデータの送受信を制御する。ポートモニタ３７は、ランゲージモニタ３６から送られて来るデータを適切なポートに対して送信したり、プリンタ３から送られて来るデータをクラスドライバ３８を介して受信したりする処理を行う。クラスドライバ３８は、最もポートに近いローレベルのモジュールであり、本発明ではＵＳＢのプリンタクラスのドライバに相当し、ポート（本発明ではＵＳＢポート）を制御する。プリンタドライバ５０はプリンタ３の製造元であるＡＢＣ社製のものである。
【００２６】
＜ジョブ情報の内容＞
図５はジョブ情報（ＪｏｂＩｎｆｏ）を表す図である。ジョブ情報は、共有情報５１に含まれる。ジョブ情報のことを通知情報と呼ぶ場合もある。同図において、ジョブ情報（ＪｏｂＩｎｆｏ）１００は、印刷ジョブに関する通知機能でＬＭ３６からアプリケーション３０に通知される情報（ジョブ状態通知）を含んでいる。アプリケーション３０は、ジョブ情報（通知情報）を受信可能である。印刷ジョブに関する通知機能のバージョン（Ｖｅｒ）１０１は、ＬＭ３６からアプリケーション３０に通知される情報の整合性を確認する目的等に利用される。ジョブ情報のサイズ（ｓｉｚｅ）１０２は、バイト単位で表されたジョブ情報１００のデータサイズである。通知ＩＤ（ｆｕｎｃＩｄ）１０３は、印刷ジョブに関する通知の種類（タイミング）を表す。プリンタ名（ｐｒｉｎｔｅｒ）１０４は、印刷ジョブが印刷されているプリンタのプリンタ名である。ユーザー名（ｕｓｅｒ）１０５は、印刷ジョブの所有者を表す。印刷ジョブＩＤ（ｊｏｂＩｄ）１０６は、印刷ジョブに割り当てられた固有のＩＤである。ドキュメント名（ｄｏｃｕｍｅｎｔ）１０７は、印刷ジョブのドキュメント名を表す。印刷中のページ番号（ｐａｇｅＰｒｉｎｔｉｎｇ）１０８は、プリンタで印刷中のページ番号を表す。印刷済のページ番号（ｐａｇｅＰｒｉｎｔｅｄ）１０９は、プリンタで印刷が完了しているページ番号を表す。通信モード（ｃｏｍｍＭｏｄｅ）１１０は、ＰＣ１とプリンタ３の通信モードを示し、０は不明、１は片方向通信、２は双方向通信を意味している。キャンセル情報（ｃａｎｃｅｌｅｄ）１１１は、印刷ジョブがキャンセル（すなわち中断）されたか否かを示し、０はキャンセル無し、１はキャンセル有りを意味する。本実施形態ではキャンセルされた場合が'１'で表されているが、この例に限られることなく、例えばキャンセルされたページ番号を含むような情報で表してもよい。印刷失敗情報（ｆａｉｌｅｄＰｒｉｎｔ）１１２は、印刷ジョブが失敗したか否かを示し、０は成功、１は失敗を意味している。本実施形態では失敗した場合が'１'で表されているが、この例に限られることなく、例えば失敗したページ番号を含むような情報で表してもよい。印刷ジョブの失敗の例としては、例えば紙詰まり等が挙げられる。拡張情報（ｅｘｔｅｎｄｅｄＩｎｆｏ）１１３は、拡張のために利用される。本実施形態では拡張情報は無いので、拡張情報が無いことを表すＮＵＬＬが常にセットされている。
【００２７】
図６は通知の種類と通知ＩＤのマップを表す図である。同図に示す通り、各通知の種類（タイミング）に対して、通知ＩＤ（ｆｕｎｃＩｄ）１０３にセットされる値がそれぞれ定義されている。
【００２８】
＜前提技術のジョブ状態通知のタイミング＞
図７は印刷ジョブに関する通知機能の前提技術のタイミングチャートである。同図は、図１に示すような周辺装置制御システムのランゲージモニタ（以降、ＬＭと略す場合がある）３６における制御を表す。同図において、関数５２、５３、５４、５５はスプーラ４０のプロセスから生成されたライトスレッドによりコールされる関数の処理を表し、スプーラ４０から関数５２、５３、５４、５５の順にコールされる。関数５２はＳｔａｒｔＤｏｃＰｏｒｔ関数であり、印刷ジョブの開始時にスプーラ４０からコールされ、ＬＭ３６やプリンタ３における印刷開始時の初期化処理等が行われる。関数５３、５４はＷｒｉｔｅＰｏｒｔ関数であり、グラフィックスドライバ３４で生成された印刷制御コマンドがスプーラ４０からこの関数によりＬＭ３６に渡され、ＬＭ３６がプリンタ３にその印刷制御コマンドを送信する。関数５５はＥｎｄＤｏｃＰｏｒｔ関数であり、印刷ジョブの終了時にスプーラ４０からコールされ、ＬＭ３６やプリンタ３における印刷終了時の初期化処理等が行われる。関数５６、５７、５８、５９はＲｅａｄＰｏｒｔ関数であり、ＬＭ３６がＳｔａｒｔＤｏｃＰｏｒｔ５２関数内で生成したリードスレッドの割り込み関数の処理を表す。関数５６、５７、５８、５９の順に４秒毎の定期的な割り込みとしてコールされる。共有情報５１には、印刷ジョブに関する通知機能で通知するジョブ情報（ＪｏｂＩｎｆｏ）１００や通知の制御の為に使用する情報等が保存されている。共有情報５１は、スプーラ４０のプロセスから生成されたライトスレッドとＬＭ３６により生成されたリードスレッドの複数のスレッドからアクセスされ、これらのスレッドから同一の情報を参照可能である。共有情報は、リードスレッドとライトスレッドのスレッド間で情報の共有を行う情報共有手段により実現されている。ジョブ状態通知６０、６１、６２、６３、６４、６５は印刷ジョブに関する通知であり、それぞれ図６で示す通知の種類の内の何れかに該当する。ジョブ状態通知６０は「印刷開始」通知であり、印刷ジョブの開始のタイミングで発行される通知である。ジョブ状態通知６１は１ページ目の「ページ開始」通知であり、プリンタ３が印刷ジョブの１ページ目の印刷を開始したタイミングで発行される通知である。ジョブ状態通知６２は２ページ目の「ページ終了」通知であり、プリンタ３が印刷ジョブの２ページ目の印刷を終了したタイミングで発行される通知である。ジョブ状態通知６３は３ページ目の「ページ開始」通知であり、プリンタ３が印刷ジョブの３ページ目の印刷を開始したタイミングで発行される通知である。ジョブ状態通知６４は３ページ目の「ページ終了」通知であり、プリンタ３が印刷ジョブの３ページ目の印刷を終了したタイミングで発行される通知である。ジョブ状態通知６５は「印刷完了」通知であり、印刷ジョブの完了のタイミングで発行される通知である。同図では、各通知におけるジョブ情報（ＪｏｂＩｎｆｏ）１００の中から、印刷中のページ番号１０８、印刷済のページ番号１０９、キャンセル情報１１１をピックアップして記載している。同図における印刷ジョブに関する通知では、全ての通知においてキャンセル情報１１１が'０'である。これは、印刷ジョブがキ���ンセルされずに印刷が完了したことを表している。
【００２９】
図８は印刷ジョブに関する通知の内容を表す前提技術の図である。同図では、ＬＭ３６が発行する印刷ジョブに関する通知のジョブ情報（ＪｏｂＩｎｆｏ）１００の内容が記されている。上から下に向けて発行された通知の順で各通知のジョブ情報（ＪｏｂＩｎｆｏ）１００の内容が記されている。ジョブ情報（ＪｏｂＩｎｆｏ）１００の内容に関しては、図５に示す。同図は、図７のタイミングチャートの例で発行される印刷ジョブに関する通知の内容を表す。
【００３０】
図９は印刷ジョブに関する通知機能の前提技術のタイミングチャートである。同図において、図７と重複する内容に関してはここでは説明を省略する。印刷キャンセルオペレーション６７は、オペレータによって印刷ジョブがキャンセルされたことを表す。この時点において、共有情報５１内のジョブ情報（ＪｏｂＩｎｆｏ）１００のキャンセル情報１１１に'１'がセットされる。ジョブ状態通知６６は「印刷キャンセル」通知であり、印刷ジョブがキャンセルされたタイミングで発行される通知である。この「印刷キャンセル」通知６６が存在する点と、「ページ終了」通知６２、「ページ開始」通知６３、「印刷完了」通知６５におけるキャンセル情報１１１が'１'となっている点が、図７とは異なる。
【００３１】
図１０は印刷ジョブに関する通知の内容を表す前提技術の図である。同図では、ＬＭ３６が発行する印刷ジョブに関する通知のジョブ情報（ＪｏｂＩｎｆｏ）１００の内容が記されている。上から下に向けて発行された通知の順で各通知のジョブ情報（ＪｏｂＩｎｆｏ）１００の内容が記されている。ジョブ情報（ＪｏｂＩｎｆｏ）１００の内容に関しては、図５に示す。同図は、図９のタイミングチャートの例で発行される印刷ジョブに関する通知の内容を表す。「印刷キャンセル」通知６６が存在する点、「ページ終了」通知６２、「ページ開始」通知６３におけるキャンセル情報１１１が'１'になっている点が、図８とは異なる。さらに、「印刷完了」通知６５における印刷済のページ番号（ＰａｇｅＰｒｉｎｔｅｄ）１０９が'２'及びキャンセル情報１１１が'１'となっている点が、図８とは異なる。
【００３２】
＜本実施形態に係るジョブ状態通知のタイミング＞
図１１は印刷ジョブに関する通知機能のタイミングチャートの一例である。同図は、図１に示すような周辺装置制御システムのＬＭ３６における制御を表す。同図において、関数５２、５３、５４、５５は、スプーラ４０のプロセスから生成されたライトスレッドによりコールされる関数の処理を表し、スプーラ４０から関数５２、５３、５４、５５の順にコールされる。ＳｔａｒｔＤｏｃＰｏｒｔ関数５２は、印刷ジョブの開始時にスプーラ４０からコールされ、ＬＭ３６やプリンタ３における印刷開始時の初期化処理等が行われる。ＷｒｉｔｅＰｏｒｔ関数５３、５４により、グラフィックスドライバ３４で生成された印刷制御コマンドがスプーラ４０からＬＭ３６に渡され、ＬＭ３６がプリンタ３にその印刷制御コマンドを送信する。ＥｎｄＤｏｃＰｏｒｔ関数５５は、印刷ジョブの終了時にスプーラ４０からコールされ、ＬＭ３６やプリンタ３における印刷終了時の初期化処理等が行われる。リード処理５６、５７、５８、５９は、ＬＭ３６がＳｔａｒｔＤｏｃＰｏｒｔ５２関数内で生成したリードスレッドの割り込み関数であるＲｅａｄＰｏｒｔ関数の処理を表し、リード処理５６、５７、５８、５９の順に４秒毎の定期的な割り込みとしてコールされる。共有情報５１には、印刷ジョブに関する通知機能で通知するジョブ情報（ＪｏｂＩｎｆｏ）１００や通知の制御の為に使用する情報等が保存されている。共有情報５１は、スプーラ４０のプロセスから生成されたライトスレッドとＬＭ３６により生成された複数のリードスレッドからアクセスされ、これらのスレッドから同一の情報を参照可能である。このように、ジョブ情報（通知情報）は、ライトスレッドから通知される第１の通知情報群とリードスレッドから通知される第２の通知情報群に分けられる。
【００３３】
ジョブ状態通知７０、７１、７２、７３、７４、７５、７６、７７は印刷ジョブに関する通知であり、それぞれ図６で示す通知の種類の内の何れかに該当する。ジョブ状態通知は、ジョブ情報に変化があった後、最初に実行される関数の返し値として関数の呼出し元に返される。さらに本実施形態では、或る関数の実行と次の関数の実行との間に、ジョブの進捗状況の変化が複数回生じた場合には、最新のジョブ情報にのみ基づいてジョブ状態通知を発行するのではない。本実施形態では、プリンタの進捗に応じてジョブ情報が更新されていたとすれば発行されているはずのジョブ状態通知を補完的に発行する。
【００３４】
図１１において、ジョブ状態通知７０は「印刷開始」通知であり、印刷ジョブの開始後に関数５２に対して発行される通知である。ジョブ状態通知７１は１ページ目の「ページ開始」通知であり、プリンタ３が印刷ジョブの１ページ目の印刷を開始した後に実行された関数５６に対して発行される通知である。関数５３，５７のタイミングではプリンタの状態は変化がないのでジョブ情報も変化せず、ジョブ状態通知は発行されない。
【００３５】
ジョブ状態通知７２は１ページ目の「ページ終了」通知であり、プリンタ３が印刷ジョブの１ページ目の印刷を終了した後に実行された関数５８に対して発行される通知である。ジョブ状態通知７３は２ページ目の「ページ開始」通知であり、プリンタ３が印刷ジョブの２ページ目の印刷を開始した後に実行された関数５８に対して発行される通知である。ジョブ状態通知７４は２ページ目の「ページ終了」通知であり、プリンタ３が印刷ジョブの２ページ目の印刷を終了した後に実行された関数５８に対して発行される通知である。ジョブ状態通知７５は３ページ目の「ページ開始」通知であり、プリンタ３が印刷ジョブの３ページ目の印刷を開始した後に実行された関数５８に対して通知である。
【００３６】
ジョブ状態通知７６は３ページ目の「ページ終了」通知であり、プリンタ３が印刷ジョブの３ページ目の印刷を終了した後に実行された関数５９に対して発行される通知である。ジョブ状態通知７７は「印刷完了」通知であり、印刷ジョブの完了の後に実行された関数５５に対して発行される通知である。
【００３７】
図１１では、各通知におけるジョブ情報（ＪｏｂＩｎｆｏ）１００の中から、印刷中のページ番号１０８、印刷済のページ番号１０９、キャンセル情報１１１をピックアップして記載している。同図における印刷ジョブに関する通知では、全ての通知においてキャンセル情報１１１が'０'である。これは、印刷ジョブがキャンセルされずに印刷が完了したことを表している。
【００３８】
図１２は印刷ジョブに関するジョブ状態通知の内容を表す図である。図１２では、ＬＭ３６が発行する印刷ジョブに関する通知のジョブ情報（ＪｏｂＩｎｆｏ）１００の内容がジョブ状態通知に記されている。上から順に発行された通知７０〜７７の順で各通知のジョブ情報（ＪｏｂＩｎｆｏ）１００の内容が記されている。ジョブ情報（ＪｏｂＩｎｆｏ）１００の内容に関しては、図５に示す。同図は、図１１のタイミングチャートの例で発行される印刷ジョブに関する通知の内容を表す。
【００３９】
図１３は印刷ジョブに関する通知機能のタイミングチャートの一例である。同図において、図１１と重複する内容に関してはここでは説明を省略する。印刷キャンセルオペレーション６７は、オペレータによって印刷ジョブがキャンセルされたことを表す。この時点において、共有情報５１内のジョブ情報（ＪｏｂＩｎｆｏ）１００のキャンセル情報（ＣＩ）１１１に'１'がセットされる。「印刷キャンセル」通知７８は、印刷ジョブがキャンセルされた直後に実行された関数５５に対して発行されるジョブ状態通知である。この「印刷キャンセル」通知７８が存在する点と、「印刷完了」通知７７におけるキャンセル情報１１１が'１'となっている点が、図１１とは異なる。
【００４０】
図１４は印刷ジョブに関する通知の内容を表す図である。同図では、ＬＭ３６が発行する印刷ジョブに関する通知のジョブ情報（ＪｏｂＩｎｆｏ）１００の内容が記されている。上から順に発行されたジョブ状態通知の順で各通知のジョブ情報（ＪｏｂＩｎｆｏ）１００の内容が記されている。ジョブ情報（ＪｏｂＩｎｆｏ）１００の内容に関しては、図５に示す。同図は、図１３のタイミングチャートの例で発行される印刷ジョブに関する通知の内容を表す。「印刷キャンセル」通知７８が存在する点が図１２とは異なる。また、「印刷完了」通知７７における印刷済のページ番号（ｐａｇｅＰｒｉｎｔｅｄ）１０９が'２'及びキャンセル情報１１１が'１'となっている点が、図１２の「印刷完了」通知７７とは異なる。
【００４１】
＜プリンタ状態コマンド＞
図３５はプリンタ３の状態を表すプリンタ状態コマンドの内容を表す図である。プリンタ状態コマンド８０は、ＵＳＢインタフェース９を介してＰＣ１からプリンタ３に発行されるデータ取得要求に対して、プリンタ３から返される。データ取得要求は、ランゲージモニタ３６が関数を実行する都度プリンタに対して発行される。プリンタ状態コマンドはプリンタ３の状態を表すコマンドである。このプリンタ状態コマンド８０から、プリンタ３の状態情報を取得することができる。プリンタ状態コマンド８０に含まれる印刷中のページ情報コマンド８１は、プリンタ３で印刷中のページ番号を表す。同図ではプリンタ３で１ページを印刷中の状態を表している。その他の状態を表すコマンド群８２には、プリンタ３の様々な状態情報が含まれている。ここでは各コマンドの詳細説明を省略する。
【００４２】
図１８は課金アプリケーション（ここではＰｈｏｔｏ  Ａｌｂｕｍ  Ｃｒｅａｔｏｒ）のユーザーインタフェース（以降、ＵＩと略す場合がある）を表す図である。アプリケーション３０、４７が課金アプリケーション（Ｐｈｏｔｏ  Ａｌｂｕｍ  Ｃｒｅａｔｏｒ）に相当する。図１８において、４２はメインウィンドウである。プリンタ表示部４３には、ＰＣ１内にＵＳＢインタフェースを介して接続されているプリンタまたはネットワーク４上にＰＣを介して接続されている共有プリンタが全て表示される。尚、同図では、図１に図示されていないプリンタも表示している例を示す。この例ではＡＢＣ社製のＫｍｍｎというモデル名のプリンタ３が選択されている状態を表している。印刷ジョブ情報表示部４４は、プリンタ表示部４３で選択されているプリンタに対して発行された全ての印刷ジョブに関する情報が表示される。この例では、印刷ジョブのオーナー（Ｏｗｎｅｒ）、ドキュメント名（Ｄｏｃｕｍｅｎｔ  Ｎａｍｅ）、印刷ジョブＩＤ（ＩＤ）、状態（Ｓｔａｔｕｓ）が表示されている。さらに、Ｋｏｉｃｈｉさんから発行されたＰｈｏｔｏ  Ａｌｂｕｍというドキュメントが選択されている状態を表している。印刷状況表示部４５は、印刷ジョブ情報表示部４４で選択されている印刷ジョブの印刷状況が表示される。この例では、ページ（Ｐａｇｅ）、状態（Ｓｔａｔｕｓ）、課金の状況（Ｃｈａｒｇｅ  ［Ｙｅｎ］）の内訳と合計（Ｔｏｔａｌ）、及び情報（Ｉｎｆｏｒｍａｔｉｏｎ）が特に無い状態を表している。キャンセルボタン４６は、このボタンを押すことで印刷キャンセルオペレーション６７が実行され、印刷ジョブ情報表示部４４で選択されている印刷ジョブをキャンセルすることができる。
【００４３】
＜共有情報５１の内容＞
図３６は、共有情報５１に含まれている情報の詳細を表す前提技術の図である。同図において、ページ番号１２０は最後に取得した印刷中のページ番号（ＬａｓｔＰｒｉｎｔｉｎｇＰａｇｅ）、ページ番号１２１は現在印刷中のページ番号（ＣｕｒｒｅｎｔＰｒｉｎｔｉｎｇＰａｇｅ）である。また、ページ番号１２２は「ページ開始」通知で通知した（あるいは通知する）印刷中のページ番号（ｐａｇｅＰｒｉｎｔｉｎｇＳｅｎｔ）である。共有情報５１には、ジョブ情報（ＪｏｂＩｎｆｏ）１００、ＬａｓｔＰｒｉｎｔｉｎｇＰａｇｅ１２０、ＣｕｒｒｅｎｔＰｒｉｎｔｉｎｇＰａｇｅ１２１、ｐａｇｅＰｒｉｎｔｉｎｇＳｅｎｔ１２２が含まれている。
【００４４】
これに対して図３７は、本実施形態における共有情報５１に含まれている情報の詳細を表す図である。同図において、図３６と重複する内容に関してはここでは説明を省略する。ページ番号１２３は「ページ終了」通知で通知した（あるいは通知する）印刷済のページ番号（ｐａｇｅＰｒｉｎｔｅｄＳｅｎｔ）であり、共有情報５１に含まれている。このｐａｇｅＰｒｉｎｔｅｄＳｅｎｔ１２３は印刷ジョブに関する通知機能の各通知に対して、通知の順序に関する依存関係を設けて制御する為に必要とされる情報であり、本実施形態の特徴の一つである。
【００４５】
なおこれから説明するフローチャートにおいて、印刷ジョブに関する通知を発行する処理が記載されているケースがある。本実施形態ではＯＳ内のＩＰｒｉｎｔＡｓｙｎｃＮｏｔｉｆｙＣｈａｎｎｅｌ：：ＳｅｎｄＮｏｔｉｆｉｃａｔｉｏｎメソッドにより、その処理を実行するものとする。
【００４６】
＜本実施形態のＳｔａｒｔＤｏｃＰｏｒｔ関数＞
図１９はＬＭ３６におけるＳｔａｒｔＤｏｃＰｏｒｔ関数の処理を表すフローチャートである。同図に記されている処理は全てＬＭ３６における処理である。スプーラ４０からこの関数がコールされると（Ｓ１９０１）、リードスレッドを開始し（Ｓ１９０２）、印刷ジョブに関する通知機能用の通知チャネルを初期化する（Ｓ１９０３）。通知チャネルの初期化では、ＯＳ内のＣｒｅａｔｅＰｒｉｎｔＡｓｙｎｃＮｏｔｉｆｙＣｈａｎｎｅｌ関数をコールして、印刷ジョブに関する通知機能用の通知チャネルを開いて初期設定を行う。通知処理を初期化する（Ｓ１９０４）。通知処理の初期化では、共有情報５１の初期化を行う。プリンタ３を初期化し（Ｓ１９０６）、ジョブ情報（ＪｏｂＩｎｆｏ：通知情報）１００を生成する（Ｓ１９０７）。ここがジョブ情報生成あるいは通知情報生成の処理に相当する。ここで、図１２、図１４の「印刷開始」通知７０のジョブ情報（ＪｏｂＩｎｆｏ）１００の内容を表すＪｏｂＩｎｆｏ：７０の情報をセットする。「印刷開始」通知を発行し（Ｓ１９０８）、この「印刷開始」通知で通知した内容を共有情報５１のジョブ情報（ＪｏｂＩｎｆｏ）１００に保存し（Ｓ１９０９）、ＳｔａｒｔＤｏｃＰｏｒｔ関数の処理を終了してスプーラ４０に戻る（Ｓ１９１０）。
【００４７】
＜前提技術のＷｒｉｔｅＰｏｒｔ関数＞
図２０はＬＭ３６におけるＷｒｉｔｅＰｏｒｔ関数の処理を表す前提技術のフローチャートである。同図に記されている各処理は、全てＬＭ３６における処理である。スプーラ４０からこの関数がコールされると（Ｓ２００１）、プリンタ３に印刷制御コマンドを送信し（Ｓ２００２）、オペレータによる印刷キャンセルオペレーション６７の有無を判定する（Ｓ２００３）。印刷ジョブがキャンセルされた場合（Ｓ２００４）、ジョブ情報（ＪｏｂＩｎｆｏ）１００をロードする（Ｓ２００５）。そして、通知ＩＤ（ｆｕｎｃＩｄ）１０３に「印刷キャンセル」を表す値をセットし（Ｓ２００６）、キャンセル情報（ｃａｎｃｅｌｅｄ）１１１に'１'をセットし（Ｓ２００７）、「印刷キャンセル」通知を発行する（Ｓ２００８）。この「印刷キャンセル」通知で通知した内容を共有情報５１のジョブ情報（ＪｏｂＩｎｆｏ）１００に保存し（Ｓ２００９）、ＷｒｉｔｅＰｏｒｔ関数の処理を終了してスプーラ４０に戻る（Ｓ２０１１）。ステップＳ２００４において印刷ジョブがキャンセルされていない場合、図２２に示すページ情報の通知の処理を実行し（Ｓ２０１０）、ＷｒｉｔｅＰｏｒｔ関数の処理を終了してスプーラ４０に戻る（Ｓ２０１１）。
【００４８】
＜本実施形態のＲｅａｄＰｏｒｔ関数＞
図２１はＬＭ３６におけるＲｅａｄＰｏｒｔ関数の処理を表すフローチャートである。同図に記されている各処理は、全てＬＭ３６における処理である。スプーラ４０からこの関数がコールされると（Ｓ２１０１）、プリンタ状態コマンド８０により、プリンタ３からプリンタの状態情報を取得する（Ｓ２１０２）。これはプリンタから印刷中のページ番号を取得する取得手段に相当する。取得した情報の中に印刷中のページ情報コマンド８１として含まれている現在印刷中のページ番号をＣｕｒｒｅｎｔＰｒｉｎｔｉｎｇＰａｇｅ１２１に保存する（Ｓ２１０３）。図２５に示すページ情報の通知の処理を実行し（Ｓ２１０４）、ＲｅａｄＰｏｒｔ関数の処理を終了してスプーラ４０に戻る（Ｓ２１０５）。
【００４９】
＜前提技術のページ情報通知処理＞
図２２はＬＭ３６におけるページ情報の通知の処理を表す前提技術のフローチャートである。同図に記されている各処理は、全てＬＭ３６における処理である。図２０のステップＳ２０１０または図２１のステップＳ２１０４が実行されると、この処理がコールされる。ページ情報の通知の処理が開始されると（Ｓ２２０１）、共有情報５１からジョブ情報（ＪｏｂＩｎｆｏ）１００をロードし（Ｓ２２０２）、ＣｕｒｒｅｎｔＰｒｉｎｔｉｎｇＰａｇｅ１２１をロードする（Ｓ２２１８）。またＬａｓｔＰｒｉｎｔｉｎｇＰａｇｅ１２０をロードする（Ｓ２２０３）。ＣｕｒｒｅｎｔＰｒｉｎｔｉｎｇＰａｇｅ１２１とＬａｓｔＰｒｉｎｔｉｎｇＰａｇｅ１２０の差をＰａｇｅ＿ｄｉｆｆに代入する（Ｓ２２０４）。Ｐａｇｅ＿ｄｉｆｆが０より大きい、すなわち、この例でとり得る値としては１以上の場合（Ｓ２２０５）、通知ＩＤ（ｆｕｎｃＩｄ）１０３に「ページ終了」を表す値をセットする（Ｓ２２０６）。印刷中のページ番号（ｐａｇｅＰｒｉｎｔｉｎｇ）１０８にＣｕｒｒｅｎｔＰｒｉｎｔｉｎｇＰａｇｅ１２１をセットしり（Ｓ２２０７）。また、印刷済のページ番号（ｐａｇｅＰｒｉｎｔｅｄ）１０９にＣｕｒｒｅｎｔＰｒｉｎｔｉｎｇＰａｇｅ１２１から１を引いた値をセットする（Ｓ２２０８）。「ページ終了」通知を発行し（Ｓ２２０９）、この「ページ終了」通知で通知した内容を共有情報５１のジョブ情報（ＪｏｂＩｎｆｏ）１００に保存し（Ｓ２２１０）、ページ情報の通知の処理を終了してコール元に戻る（Ｓ２２１７）。ステップＳ２２０５においてＰａｇｅ＿ｄｉｆｆが０以下、すなわち、この例でとり得る値としては０の場合、式１の値を判定する。式１は、（ｐａｇｅＰｒｉｎｔｉｎｇＳｅｎｔ１２２＜（印刷済のページ番号（ｐａｇｅＰｒｉｎｔｅｄ）１０９＋１））かつ（ＣｕｒｒｅｎｔＰｒｉｎｔｉｎｇＰａｇｅ１２１＝（印刷済のページ番号（ｐａｇｅＰｒｉｎｔｅｄ）１０９＋１））というものである。式１が真の場合（Ｓ２２１１）、通知ＩＤ（ｆｕｎｃＩｄ）１０３に「ページ開始」を表す値をセットし（Ｓ２２１２）、印刷中のページ番号（ｐａｇｅＰｒｉｎｔｉｎｇ）１０８にＣｕｒｒｅｎｔＰｒｉｎｔｉｎｇＰａｇｅ１２１をセットする（Ｓ２２１３）。印刷済のページ番号（ｐａｇｅＰｒｉｎｔｅｄ）１０９にＣｕｒｒｅｎｔＰｒｉｎｔｉｎｇＰａｇｅ１２１から１を引いた値をセットし（Ｓ２２１４）、「ページ開始」通知を発行する（Ｓ２２１５）。印刷中のページ番号（ｐａｇｅＰｒｉｎｔｉｎｇ）１０８をｐａｇｅＰｒｉｎｔｉｎｇＳｅｎｔ１２２に保存し（Ｓ２２１６）、ステップＳ２２１０に進む。一方ステップＳ２２１１において式１が偽の場合、ページ情報の通知の処理を終了してコール元に戻る（Ｓ２２１７）。
【００５０】
＜前提技術のＥｎｄＤｏｃＰｏｒｔ関数＞
図２３はＬＭ３６におけるＥｎｄＤｏｃＰｏｒｔ関数の処理を表す前提技術のフローチャートである。同図に記されている各処理は、全てＬＭ３６における処理である。スプーラ４０からこの関数がコールされると（Ｓ２３０１）、リードスレッドを終了し（Ｓ２３０２）、印刷処理を終了し（Ｓ２３０３）、プリンタ３を初期化する（Ｓ２３０４）。そして、ジョブ情報（ＪｏｂＩｎｆｏ）１００をロードし（Ｓ２３０５）、通知ＩＤ（ｆｕｎｃＩｄ）１０３に「印刷完了」を表す値をセットし（Ｓ２３０６）、「印刷完了」通知を発行し（Ｓ２３０７）、通知処理を初期化する（Ｓ２３０８）。通知処理の初期化では、共有情報５１の初期化を行う。ＯＳ内のＩＰｒｉｎｔＡｓｙｎｃＮｏｔｉｆｙＣｈａｎｎｅｌ：：ＣｌｏｓｅＣｈａｎｎｅｌメソッドにより、印刷ジョブに関する通知機能用の通知チャネルを閉じ（Ｓ２３０９）、ＥｎｄＤｏｃＰｏｒｔ関数の処理を終了してスプーラ４０に戻る（Ｓ２３１０）。
【００５１】
＜本実施形態のＷｒｉｔｅＰｏｒｔ関数＞
図２４はＬＭ３６におけるＷｒｉｔｅＰｏｒｔ関数の処理を表すフローチャートである。同図に記されている各処理は、全てＬＭ３６における処理である。スプーラ４０からこの関数がコールされると（Ｓ２４０１）、プリンタ３に印刷制御コマンドを送信し（Ｓ２４０２）、オペレータによる印刷キャンセルオペレーション６７の有無を判定する（Ｓ２４０３）。印刷ジョブがキャンセルされた場合（Ｓ２４０４）、ジョブ情報（ＪｏｂＩｎｆｏ）１００をロードし（Ｓ２４０５）、キャンセル情報（ｃａｎｃｅｌｅｄ）１１１に'１'をセットする（Ｓ２４０６）。この内容を共有情報５１のジョブ情報（ＪｏｂＩｎｆｏ）１００に保存し（Ｓ２４０７）、ＷｒｉｔｅＰｏｒｔ関数の処理を終了してスプーラ４０に戻る（Ｓ２４０８）。一方ステップＳ２４０４において印刷ジョブがキャンセルされていない場合、ＷｒｉｔｅＰｏｒｔ関数の処理を終了してスプーラ４０に戻る（Ｓ２４０８）。
【００５２】
＜ページ情報の通知の処理＞
図２５はＬＭ３６におけるページ情報の通知の処理を表すフローチャートである。同図に記されている各処理は、全てＬＭ３６における処理である。図２１のステップＳ２１０４が実行されると、この処理がコールされる。ページ情報の通知の処理が開始されると（Ｓ２５０１）、共有情報５１からジョブ情報（ＪｏｂＩｎｆｏ）１００をロードし（Ｓ２５０２）、ｐａｇｅＰｒｉｎｔｅｄＳｅｎｔ１２３をロードする（Ｓ２５０３）。ＣｕｒｒｅｎｔＰｒｉｎｔｉｎｇＰａｇｅ１２１とｐａｇｅＰｒｉｎｔｅｄＳｅｎｔ１２３の差をＰａｇｅ＿ｄｉｆｆに代入する（Ｓ２５０４）。次にＰａｇｅ＿ｄｉｆｆが０より大きいか否かを判定する（Ｓ２５０５）。Ｐａｇｅ＿ｄｉｆｆは、現在印刷中のページ番号と最後に「ページ終了」通知で通知した印刷済みのページ番号との差である。この値が０より大きければ、ページ開始通知で印刷中であることが示されていないページ番号またはページ終了通知で印刷済みであることが通知されていないページ番号が存在する可能性がある。そこで、Ｐａｇｅ＿ｄｉｆｆが０より大きければ、すなわち、この実施形態でとり得る値としては１以上の場合、図２６に示す「ページ開始」の確認と通知の処理を実行する（Ｓ２５０６）。また図２７に示す「ページ終了」の確認と通知の処理を実行する（Ｓ２５０７）。Ｓ２５０６により、最後に「ページ開始」通知を発行したページ番号の次のページ（印刷が開始されたにもかかわらずページ開始通知が発行されていないものに限る）について「ページ開始」通知を発行する。またＳ２５０７により、最後に「ページ終了」通知を発行したページ番号の次のページ（印刷済みにもかかわらずページ終了通知が発行されていないものに限る）について「ページ終了」通知を発行する。それらを終えたなら、Ｐａｇｅ＿ｄｉｆｆから１を引いた値をＰａｇｅ＿ｄｉｆｆにセットし（Ｓ２５０８）、ステップＳ２５０５に戻る。ステップＳ２５０５においてＰａｇｅ＿ｄｉｆｆが０以下、すなわち、この実施形態でとり得る値としては０の場合、ページ情報の通知の処理を終了してコール元に戻る（Ｓ２５０９）。
【００５３】
＜「ページ開始」の確認と通知の処理＞
図２６はＬＭ３６における「ページ開始」の確認と通知の処理を表すフローチャートである。同図に記されている各処理は、全てＬＭ３６における処理である。図２５のステップＳ２５０６が実行されると、この処理がコールされる。「ページ開始」の確認と通知の処理が開始されると（Ｓ２６０１）、共有情報５１からジョブ情報（ＪｏｂＩｎｆｏ）１００をロードし（Ｓ２６０２）、ｐａｇｅＰｒｉｎｔｉｎｇＳｅｎｔ１２２をロードする（Ｓ２６０３）。ｐａｇｅＰｒｉｎｔｉｎｇＳｅｎｔ１２２とｐａｇｅＰｒｉｎｔｅｄＳｅｎｔ１２３の差をｉ＿ｐａｇｅに代入する（Ｓ２６０４）。ｐａｇｅＰｒｉｎｔｉｎｇＳｅｎｔ１２２は最後に「ページ開始」通知で通知した印刷中のページ番号である。ｐａｇｅＰｒｉｎｔｅｄＳｅｎｔ１２３は最後に「ページ終了」通知で通知した印刷済のページ番号である。或るページについて「ページ終了」が発行されると、次に、次のページについて「ページ開始」が発行されるのが通常の順序であるから、ｉ＿ｐａｇｅは０または１のいずれかである。ｉ＿ｐａｇｅが０であれば、「ページ終了」通知で通知された印刷済のページ番号の次のページについて「ページ開始」を発行する必要がある。
【００５４】
そこでｉ＿ｐａｇｅが０であるか否か判定する（Ｓ２６０５）。ｉ＿ｐａｇｅが０の場合、通知ＩＤ（ｆｕｎｃＩｄ）１０３に「ページ開始」を表す値をセットし（Ｓ２６０６）、「ページ開始」通知で最後に通知した印刷中のページ番号であるｐａｇｅＰｒｉｎｔｉｎｇＳｅｎｔ１２２に１を足す（Ｓ２６０７）。印刷中のページ番号（ｐａｇｅＰｒｉｎｔｉｎｇ）１０８にｐａｇｅＰｒｉｎｔｉｎｇＳｅｎｔ１２２をセットし（Ｓ２６０８）、印刷済のページ番号（ｐａｇｅＰｒｉｎｔｅｄ）１０９にｐａｇｅＰｒｉｎｔｅｄＳｅｎｔ１２３をセットする（Ｓ２６０９）。キャンセル情報（ｃａｎｃｅｌｅｄ）１１１に'０'をセットし（Ｓ２６１０）、「ページ開始」通知を発行する（Ｓ２６１１）。「ページ開始」通知においては、ｐａｇｅＰｒｉｎｔｉｎｇ１０８で示されているページ番号が印刷中のページ番号としてセットされている。この後印刷中のページ番号（ｐａｇｅＰｒｉｎｔｉｎｇ）１０８をｐａｇｅＰｒｉｎｔｉｎｇＳｅｎｔ１２２に保存する（Ｓ２６１２）。この「ページ開始」通知で通知した内容を共有情報５１のジョブ情報（ＪｏｂＩｎｆｏ）１００に保存し（Ｓ２６１３）、「ページ開始」の確認と通知の処理を終了してコール元に戻る（Ｓ２６１４）。このようにして、最後に「ページ開始」通知を発行したページ番号の次のページ（ページ開始通知が発行されていないものに限る）について「ページ開始」通知を発行する。
【００５５】
一方ステップＳ２６０５においてｉ＿ｐａｇｅが０以外、すなわち、この実施形態でとり得る値としては１以上の場合、「ページ開始」の確認と通知の処理を終了してコール元に戻る（Ｓ２６１４）。図１３で印刷キャンセルオペレーション６７が発生し、キャンセル情報（ｃａｎｃｅｌｅｄ）１１１に'１'がセットされている場合においても、ステップＳ２６１０においてキャンセル情報（ｃａｎｃｅｌｅｄ）１１１に'０'をセットする。こうすることで、「ページ開始」通知に含まれるジョブ情報（ＪｏｂＩｎｆｏ）１００内のキャンセル情報（ｃａｎｃｅｌｅｄ）１１１が正しい値、すなわち'０'がセットされた状態で「ページ開始」通知が発行される。この点が、本実施形態に係る発明の特徴の一つである。
【００５６】
＜「ページ終了」の確認と通知の処理＞
図２７はＬＭ３６における「ページ終了」の確認と通知の処理を表すフローチャートである。同図に記されている各処理は、全てＬＭ３６における処理である。図２５のステップＳ２５０７が実行されると、この処理がコールされる。「ページ終了」の確認と通知の処理が開始されると（Ｓ２７０１）、共有情報５１からジョブ情報（ＪｏｂＩｎｆｏ）１００をロードし（Ｓ２７０２）、Ｐａｇｅ＿ｄｉｆｆが１より大きいか判定する（Ｓ２７０３）。Ｐａｇｅ＿ｄｉｆｆが１であれば、現在印刷中のページの直前のページの印刷終了通知は発行済みである。そこで、Ｐａｇｅ＿ｄｉｆｆが１より大きい、すなわち、この実施形態でとり得る値としては２以上の場合（Ｓ２７０３）、ｐａｇｅＰｒｉｎｔｉｎｇＳｅｎｔ１２２をロードする（Ｓ２７０４）。ｐａｇｅＰｒｉｎｔｉｎｇＳｅｎｔ１２２とｐａｇｅＰｒｉｎｔｅｄＳｅｎｔ１２３の差をｉ＿ｐａｇｅに代入する（Ｓ２７０５）。ｉ＿ｐａｇｅの意味は図２６と同様である。すなわち、或るページについて「ページ終了」が発行されると、次に、次のページについて「ページ開始」が発行されるのが通常の順序であるから、ｉ＿ｐａｇｅは０または１のいずれかである。ｉ＿ｐａｇｅが１であれば、「ページ終了」通知で既に通知された印刷済のページ番号の次のページについて「ページ終了」を発行する必要がある。
【００５７】
そこでｉ＿ｐａｇｅが１であるか否か判定する（Ｓ２７０６）。ｉ＿ｐａｇｅが１であれば、通知ＩＤ（ｆｕｎｃＩｄ）１０３に「ページ終了」を表す値をセットし（Ｓ２７０７）、ｐａｇｅＰｒｉｎｔｅｄＳｅｎｔ１２３に１を足した値をｐａｇｅＰｒｉｎｔｅｄＳｅｎｔ１２３に代入する（Ｓ２７０８）。印刷中のページ番号（ｐａｇｅＰｒｉｎｔｉｎｇ）１０８にｐａｇｅＰｒｉｎｔｉｎｇＳｅｎｔ１２２をセットし（Ｓ２７０９）、印刷済のページ番号（ｐａｇｅＰｒｉｎｔｅｄ）１０９にｐａｇｅＰｒｉｎｔｅｄＳｅｎｔ１２３をセットする（Ｓ２７１０）。キャンセル情報（ｃａｎｃｅｌｅｄ）１１１に'０'をセットし（Ｓ２７１１）、「ページ終了」通知を発行する（Ｓ２７１２）。印刷済のページ番号（ｐａｇｅＰｒｉｎｔｅｄ）１０９をｐａｇｅＰｒｉｎｔｅｄＳｅｎｔ１２３に保存し（Ｓ２７１３）、この「ページ終了」通知で通知した内容を共有情報５１のジョブ情報（ＪｏｂＩｎｆｏ）１００に保存する（Ｓ２７１４）。そして「ページ終了」の確認と通知の処理を終了してコール元に戻る（Ｓ２７１５）。このようにして、最後に「ページ終了」通知を発行したページ番号の次のページ（ページ終了通知が発行されていないものに限る）について「ページ終了」通知を発行する。
【００５８】
一方、ステップＳ２７０６においてｉ＿ｐａｇｅが１以外、すなわち、この実施形態でとり得る値としては０または２以上の場合、「ページ終了」の確認と通知の処理を終了してコール元に戻る（Ｓ２７１５）。ステップＳ２７０３において、Ｐａｇｅ＿ｄｉｆｆが１以下、すなわち、この実施形態でとり得る値としては０または１の場合、「ページ終了」の確認と通知の処理を終了してコール元に戻る（Ｓ２７１５）。
【００５９】
図１３で印刷キャンセルオペレーション６７が発生し、キャンセル情報（ｃａｎｃｅｌｅｄ）１１１に'１'がセットされている場合においても、ステップＳ２７１１においてキャンセル情報（ｃａｎｃｅｌｅｄ）１１１に'０'をセットする。こうすることで、「ページ終了」通知に含まれるジョブ情報（ＪｏｂＩｎｆｏ）１００内のキャンセル情報（ｃａｎｃｅｌｅｄ）１１１が正しい値、すなわち'０'がセットされた状態で「ページ終了」通知が発行される。この点が、本実施形態に係る発明の特徴の一つである。
【００６０】
また、図２５乃至図２７によって、「ページ開始」通知および「ページ終了」通知が未発行のページの存在を判定する。存在する場合には、該当するページごとに、「ページ開始」通知および「ページ終了」通知を、その順序で発行する。ただし、現在印刷中であれば、「ページ終了」通知は発行されない。
【００６１】
＜本実施形態のＥｎｄＤｏｃＰｏｒｔ関数＞
図２８はＬＭ３６におけるＥｎｄＤｏｃＰｏｒｔ関数の処理を表すフローチャートである。同図に記されている各処理は、全てＬＭ３６における処理である。スプーラ４０からこの関数がコールされると（Ｓ２８０１）、リードスレッドを終了し（Ｓ２８０２）、印刷処理を終了し（Ｓ２８０３）、プリンタ３を初期化する（Ｓ２８０４）。そして、ジョブ情報（ＪｏｂＩｎｆｏ）１００をロードし（Ｓ２８０５）、キャンセル情報（ｃａｎｃｅｌｅｄ）１１１が'０'であるか否か判定する（Ｓ２８０６）。'０'以外の場合、通知ＩＤ（ｆｕｎｃＩｄ）１０３に「印刷キャンセル」を表す値をセットする（Ｓ２８０７）。そして「印刷キャンセル」通知を発行し（Ｓ２８０８）、この「印刷キャンセル」通知で通知した内容を共有情報５１のジョブ情報（ＪｏｂＩｎｆｏ）１００に保存する（Ｓ２８０９）。ジョブ情報（ＪｏｂＩｎｆｏ）１００をロードし（Ｓ２８１０）、通知ＩＤ（ｆｕｎｃＩｄ）１０３に「印刷完了」を表す値をセットし（Ｓ２８１１）、「印刷完了」通知を発行し（Ｓ２８１２）、通知処理を初期化する（Ｓ２８１３）。通知処理の初期化では、共有情報５１の初期化を行う。ＯＳ内のＩＰｒｉｎｔＡｓｙｎｃＮｏｔｉｆｙＣｈａｎｎｅｌ：：ＣｌｏｓｅＣｈａｎｎｅｌメソッドにより、印刷ジョブに関する通知機能用の通知チャネルを閉じ（Ｓ２８１４）、ＥｎｄＤｏｃＰｏｒｔ関数の処理を終了してスプーラ４０に戻る（Ｓ２８１５）。ステップＳ２８０６においてキャンセル情報（ｃａｎｃｅｌｅｄ）１１１が'０'の場合、ステップＳ２８１０に進む。このように、ＥｎｄＤｏｃＰｏｒｔ関数内のステップＳ２８０８において「印刷キャンセル」通知を発行する。こうすることで、オペレータによって印刷ジョブがキャンセルされた時においても、それまでに印刷が開始または終了している全てのページに関する「ページ開始」通知や「ページ終了」通知を正しい内容で発行することができる。これは本実施形態に係る発明の特徴の一つである。
【００６２】
＜アプリケーション３０における通知の受信処理＞
図２９はアプリケーション３０におけるメイン処理を表すフローチャートである。同図に記されている各処理は、全てアプリケーション３０における処理である。オペレータの操作等によりアプリケーション３０が開始されると（Ｓ２９０１）、メインウィンドウ４２を表示する（Ｓ２９０２）。ＯＳ内のＲｅｇｉｓｔｅｒＦｏｒＰｒｉｎｔＡｓｙｎｃＮｏｔｉｆｉｃａｔｉｏｎｓ関数をコールして、印刷ジョブに関する通知機能用の通知チャネルを登録する（Ｓ２９０３）。この通知チャネルの登録により、アプリケーション３０が、ＬＭ３６から発行される印刷ジョブに関する通知を受信することができる。メッセージループを作成する（Ｓ２９０４）。このメッセージループにより、アプリケーション３０が、オペレータからのキーボードやマウス操作のイベントメッセージ、ＯＳからのウィンドウやアプリケーション制御に関するイベントメッセージ等のメッセージを受け取る。そして、それぞれのメッセージに対して適切な処理を行うことができる。印刷ジョブに関する通知を受信した場合（Ｓ２９０５）、図３０、図３４に示す通知に基づく情報の取得と更新を実行する（Ｓ２９０６）。メッセージを受信した場合（Ｓ２９０７）、アプリケーションの終了メッセージの場合（Ｓ２９０８）、ＯＳ内のＵｎＲｅｇｉｓｔｅｒＦｏｒＰｒｉｎｔＡｓｙｎｃＮｏｔｉｆｉｃａｔｉｏｎｓ関数をコールする。こうして、印刷ジョブに関する通知機能用の通知チャネルの登録を解除する（Ｓ２９０９）。そしてアプリケーション３０を終了する（Ｓ２９１１）。ステップＳ２９０８においてアプリケーションの終了メッセージ以外の場合、各メッセージに対応する適切な処理を行い（Ｓ２９１０）、ステップＳ２９０５に戻る。尚、ここでは各メッセージに対応する適切な処理の詳細説明を省略する。ステップＳ２９０７においてメッセージを受信していない場合、ステップＳ２９０５に戻る。ステップＳ２９０５において印刷ジョブに関する通知を受信していない場合、ステップＳ２９０７に進む。
【００６３】
図３０はアプリケーション３０における通知に基づく情報の取得と更新の処理を表すフローチャートである。同図に記されている各処理は、全てアプリケーション３０における処理である。図２９のステップＳ２９０６が実行されると、この処理がコールされる。通知に基づく情報の取得と更新の処理が開始されると（Ｓ３００１）、通知に含まれるジョブ情報（ＪｏｂＩｎｆｏ）１００から次の情報を取得する。
・プリンタ名（ｐｒｉｎｔｅｒ）１０４（Ｓ３００２）、
・通知ＩＤ（ｆｕｎｃＩｄ）１０３（Ｓ３００３）、
・ドキュメント名（ｄｏｃｕｍｅｎｔ）１０７（Ｓ３００４）、
・ユーザー名（ｕｓｅｒ）１０５（Ｓ３００５）、
・印刷ジョブＩＤ（ｊｏｂＩｄ）１０６（Ｓ３００６）、
・印刷中のページ番号（ｐａｇｅＰｒｉｎｔｉｎｇ）１０８（Ｓ３００７）、
・印刷済のページ番号（ｐａｇｅＰｒｉｎｔｅｄ）１０９（Ｓ３００８）、
・キャンセル情報（ｃａｎｃｅｌｅｄ）１１１（Ｓ３００９）、
・印刷失敗情報（ｆａｉｌｅｄＰｒｉｎｔ）１１２（Ｓ３０１０）。
【００６４】
通知ＩＤ（ｆｕｎｃＩｄ）１０３が「ページ終了」を表す値の場合（Ｓ３０１１）、印刷済のページ番号（ｐａｇｅＰｒｉｎｔｅｄ）１０９が表すページに対して印刷済のページとして課金する（Ｓ３０１２）。プリンタ表示部４３、印刷ジョブ情報表示部４４、印刷状況表示部４５の表示内容を更新し（Ｓ３０１３）、通知に基づく情報の取得と更新の処理を終了してコール元に戻る（Ｓ３０１４）。ステップＳ３０１１において通知ＩＤ（ｆｕｎｃＩｄ）１０３が「ページ終了」を表す値以外の場合、ステップＳ３０１３に進む。
【００６５】
本発明の周辺装置制御システムでは、ライトスレッドとリードスレッドにおける印刷ジョブに関する通知処理を次の通り切り分けることで、排他的な制御を実現し、ＬＭ３６が印刷ジョブに関する通知を正確に発行することができる。すなわち、ライトスレッドでは印刷開始、印刷完了、印刷キャンセルが、リードスレッドではページ開始、ページ終了
の各通知が処理される。これは本実施形態に係る発明の特徴の一つである。
【００６６】
以上のようにして、本実施形態では、印刷処理の対象となったページについて、もれなくページ開始（すなわち当該ページの印刷の開始）とページ終了（すなわち当該ページの印刷の完了）の通知を発行することができる。また、印刷処理が途中でキャンセルされた場合であっても、ページ開始通知とページ終了通知とを正しい内容で、かつ正しい順序で発行することができる。すなわち、通知情報は必要に応じて補填され、通知される。本実施形態では、周辺装置からある時間間隔で周辺装置情報を取得し、ある時刻における第１の周辺装置情報と、別の時刻における第２の周辺装置情報から通知情報を生成し、これを情報処理装置に通知する。
［第２の実施の形態］
第１の実施の形態に記した周辺装置制御システムにおいて、ＬＭ３６から発行される各通知の発行間隔が短い場合、ＯＳ内における処理またはネットワーク４における通信状況等の影響を受ける。そのため、アプリケーション３０が受信する通知の順序が、ＬＭ３６から発行された通知の順序と異なる場合があり、通知の順序の不整合が発生するケースがある。このような通知の順序の不整合の問題を解決する手段の例を以下に記す。
【００６７】
図１５は本実施形態のジョブ情報（ＪｏｂＩｎｆｏ）を表す図である。図１５において、図５と重複する内容に関してはここでは説明を省略する。タイムスタンプ（ｔｉｍｅ）１１４は、印刷ジョブに関する通知の発行時刻を表す。順序を表す情報（ｏｒｄｅｒ）１１５は、各通知に対して順に付加され、その印刷ジョブに関する各通知の順序を表す。
【００６８】
図１６は印刷ジョブに関する通知の内容を表す図である。図１６では、ＬＭ３６が発行する印刷ジョブに関する通知のジョブ情報（ＪｏｂＩｎｆｏ）１００の内容が記されている。上から順に、発行された通知の順で各通知のジョブ情報（ＪｏｂＩｎｆｏ）１００の内容が記されている。ジョブ情報（ＪｏｂＩｎｆｏ）１００の内容に関しては、図１５に示す。同図は、図１１のタイミングチャートの例で発行される印刷ジョブに関する通知の内容を表す。図１２と比較すると、各通知に対してタイムスタンプ（ｔｉｍｅ）１１４と順序を表す情報（ｏｒｄｅｒ）１１５が付加されていることがわかる。
【００６９】
図１７は印刷ジョブに関する通知の内容を例示する図である。図１７では、アプリケーション３０が受信する印刷ジョブに関する通知のジョブ情報（ＪｏｂＩｎｆｏ）１００の内容が記されている。上から順に受信された通知の順で各通知のジョブ情報（ＪｏｂＩｎｆｏ）１００の内容が記されている。ジョブ情報（ＪｏｂＩｎｆｏ）１００の内容に関しては、図１５に示す。図１７は、図１１のタイミングチャートの例でＬＭ３６から発行された印刷ジョブに関する通知を、アプリケーション３０が受信した時の通知の内容を表す。図１７から、２ページ目の「ページ開始」通知７３（ＪｏｂＩｎｆｏ：７３）と２ページ目の「ページ終了」通知７４（ＪｏｂＩｎｆｏ：７４）の順序が逆転して、不整合が発生していることがわかる。これは、これらの通知が図２６、図２７で示すような計算により、極めて短い時間間隔で発行された結果、ＯＳ内における処理またはネットワーク４における通信状況の影響を受けたものである。
【００７０】
図３２はＬＭ３６における通知処理を表すフローチャートである。図３２に記されている各処理は、全てＬＭ３６における処理であり、次に挙げる各通知処理において、図３２の処理を実行してタイムスタンプ及び順序を表す順序情報を通知に付加することで、前記不整合の問題を解決することができる。
（１）図１９のステップＳ１９０８、
（２）図２６のステップＳ２６１１、
（３）図２７のステップＳ２７１２、
（４）図２８のステップＳ２８０８、Ｓ２８１２。
【００７１】
まず、各通知処理に対してこの処理が開始されると（Ｓ３２０１）、ＯＳから年月日及び時刻情報を取得し（Ｓ３２０２）、タイムスタンプ（ｔｉｍｅ）１１４に「年月日及び時刻」をセットする（Ｓ３２０３）。そして、順序を表す情報（ｏｒｄｅｒ）１１５をロードし（Ｓ３２０４）、順序を表す情報（ｏｒｄｅｒ）１１５に１を足した値を順序を表す情報（ｏｒｄｅｒ）１１５に代入する（Ｓ３２０５）。そして、前記各ステップにおける通知を発行し（Ｓ３２０６）、通知処理を終了してコール元に戻る（Ｓ３２０７）。
【００７２】
図３３は通知リストを表す図である。図３３において、通知リスト４９は、アプリケーション３０が、受信した印刷ジョブに関する通知の情報を管理して正確な制御を行う為のリストである。通知リスト４９は、アプリケーション３０が利用可能な保存エリアであるランダムアクセスメモリ部ＲＡＭ１２０１やハードディスクドライブ部ＨＤＤ１２０２に保存されている。図３３では、図１７に示す印刷ジョブに関する通知の内容の内、２ページ目の「ページ終了」通知７４（ＪｏｂＩｎｆｏ：７４）まで受信した状態を表している。アプリケーション３０は通知リストを参照して、順序を表す情報が連続して保存されている行までの状態を有効な情報として取り扱う。例えば図３３の例の場合、順序を表す情報１から３の行の情報を有効とし、未だ受信していない順序を表す情報４及び既に受信している順序を表す情報５の行の情報に関しては、この時点では無効として取り扱う。
【００７３】
図３４はアプリケーション３０における通知に基づく情報の取得と更新の処理を表すフローチャートである。図３４に記されている各処理は、全てアプリケーション３０における処理である。図２９のステップＳ２９０６が実行されると、第１実施形態では図３０が実行されたのに対して本実施形態では図３４がコールされる。通知に基づく情報の取得と更新の処理が開始されると（Ｓ３４０１）、ジョブ情報（ＪｏｂＩｎｆｏ）１００内の順序を表す情報（ｏｒｄｅｒ）１１５を取得し（Ｓ３４０２）、通知リスト４９に保存する（Ｓ３４０３）。ジョブ情報（ＪｏｂＩｎｆｏ）１００内のタイムスタンプ（ｔｉｍｅ）１１４を取得し（Ｓ３４０４）、通知リスト４９に保存する（Ｓ３４０５）。通知リスト４９において順序を表す情報（ｏｒｄｅｒ）を確認する（Ｓ３４０６）。ここでは確認とは、通知リスト４９を参照して、抜けの有無を判定することである。通知の抜けが有る場合（Ｓ３４０７−ＹＥＳ）、通知に基づく情報の取得と更新の処理を終了してコール元に戻る（Ｓ３４２３）。ステップＳ３４０７において通知の抜けが無い場合、通知リスト４９においタイムスタンプ（ｔｉｍｅ）を確認する（Ｓ３４０８）。ここでは確認とは、通知リスト４９を参照して、タイムスタンプの不整合を判断することである。タイムスタンプに不整合が有る場合（Ｓ３４０９−ＹＥＳ）、図１８の印刷状況表示部４５の情報（Ｉｎｆｏｒｍａｔｉｏｎ）欄に通知が正しく無い旨を表すエラーを表示する（Ｓ３４１０）。このエラーは、"Ｉｎｆｏｒｍａｔｉｏｎ：Ｎｏｔｉｆｉｃａｔｉｏｎ  ｉｓ  ｉｎｃｏｒｒｅｃｔ．"というものである。そして通知に基づく情報の取得と更新の処理を終了してコール元に戻る（Ｓ３４２３）。ここでタイムスタンプの不整合とは、例えば通知リスト４９において、順序情報（ｏｒｄｅｒ）が大きい方の通知のタイムスタンプ（ｔｉｍｅ）が、順序情報（ｏｒｄｅｒ）が小さい方の通知のタイムスタンプ（ｔｉｍｅ）より早い時刻を表している場合等が該当する。すなわち、タイムスタンプの不整合とは、順序情報で示される順序と、タイムスタンプで示される順序とが整合しない場合などをいう。尚、図３３に示す通知リスト４９では、このようなエラーのケースではなく、正常に動作しているケースを記す。ステップＳ３４０９においてタイムスタンプに不整合が無い場合、通知リスト４９に保存されているジョブ情報（ＪｏｂＩｎｆｏ）１００から次の情報を取得する。
【００７４】
・プリンタ名（ｐｒｉｎｔｅｒ）１０４（Ｓ３４１１）、
・通知ＩＤ（ｆｕｎｃＩｄ）１０３（Ｓ３４１２）、
・ドキュメント名（ｄｏｃｕｍｅｎｔ）１０７（Ｓ３４１３）、
・ユーザー名（ｕｓｅｒ）１０５（Ｓ３４１４）、
・印刷ジョブＩＤ（ｊｏｂＩｄ）１０６（Ｓ３４１５）、
・印刷中のページ番号（ｐａｇｅＰｒｉｎｔｉｎｇ）１０８（Ｓ３４１６）、
・印刷済のページ番号（ｐａｇｅＰｒｉｎｔｅｄ）１０９（Ｓ３４１７）、
・キャンセル情報（ｃａｎｃｅｌｅｄ）１１１（Ｓ３４１８）、
・印刷失敗情報（ｆａｉｌｅｄＰｒｉｎｔ）１１２（Ｓ３４１９）。
【００７５】
ジョブ情報（ＪｏｂＩｎｆｏ）１００内の通知ＩＤ（ｆｕｎｃＩｄ）１０３が「ページ終了」を表す値であるか判定する（Ｓ３４２０）。該当する場合、そのジョブ情報（ＪｏｂＩｎｆｏ）１００内の印刷済のページ番号（ｐａｇｅＰｒｉｎｔｅｄ）１０９が表すページに対して印刷済のページとして課金する（Ｓ３４２１）。プリンタ表示部４３、印刷ジョブ情報表示部４４、印刷状況表示部４５の表示内容を更新し（Ｓ３４２２）、通知に基づく情報の取得と更新の処理を終了してコール元に戻る（Ｓ３４２３）。ステップＳ３４２０において通知ＩＤ（ｆｕｎｃＩｄ）１０３が「ページ終了」を表す値以外の場合、ステップＳ３４２２に進む。このように、通知リスト４９を使って、各通知の順序を表す情報（ｏｒｄｅｒ）、あるいはタイムスタンプ（ｔｉｍｅ）を確認する。そして、ＬＭ３６から発行された通知をその発行された順序通りに適切に処理することで、前記不整合の問題を解決することができる。これは本実施形態に係る発明の特徴の一つである。尚、本実施形態ではタイムスタンプ（ｔｉｍｅ）をエラー処理に利用した。この例に限られることなく、アプリケーション３０がタイムスタンプ（ｔｉｍｅ）を利用して、ＬＭ３６から発行された通知をその発行された順序通りに適切に処理することで、前記通知の順序の不整合の問題を解決することも可能である。順序通りに適切に処理するために、たとえば各通知の順序を表す順序情報に従って通知情報の順序を並び替え、並び替えた順序で処理する。
【００７６】
［第３の実施の形態］
第２の実施の形態に記した周辺装置制御システムにおける、前記通知の順序の不整合の問題を解決する手段の他の例を以下に記す。図３１はＬＭ３６における通知処理を表すフローチャートである。図３１に記されている各処理は、全てＬＭ３６における処理であり、次に挙げる各通知処理においてこの処理を実行することで、前記通知の順序の不整合の問題を解決することができる。
（１）図１９のステップＳ１９０８、
（２）図２６のステップＳ２６１１、
（３）図２７のステップＳ２７１２、
（４）図２８のステップＳ２８０８、Ｓ２８１２。
【００７７】
各通知処理に対してこの処理が開始されると（Ｓ３１０１）、前記各ステップにおける通知を発行し（Ｓ３１０２）、一定時間（この例では１秒間）のウェイト（待機）を行い（Ｓ３１０３）、通知処理を終了してコール元に戻る（Ｓ３１０４）。このように、ステップＳ３１０３において一定時間のウェイトを行うことで、ＬＭ３６から発行された通知の順序と同じ順序でアプリケーション３０がそれぞれの通知を受信することができ、前記不整合の問題を解決することができる。このステップＳ３１０３におけるウェイト処理は、本実施形態に係る発明の特徴の一つである。
【００７８】
このように本実施形態では、ある通知情報を通知した後には、早くともそれから或る時間が経過した後でなければ、次の通知情報が通知されない。
【００７９】
［実施形態に係る発明の拡張］
以下に上述した３つの実施形態において実行されるプログラムについて、その構成を説明する。図３８に示すメモリマップを参照して、本発明に係る情報処理装置及び周辺装置からなる周辺装置制御システムで読み出し可能なデータ処理プログラムの構成について説明する。
【００８０】
図３８は、本発明に係る周辺装置制御システムで読み出し可能な各種データ処理プログラムを格納する記憶媒体のメモリマップを示す図である。なお、特に図示しないが、記憶媒体に記憶されるプログラム群を管理する情報、例えばバージョン情報や作成者等もこの記憶媒体に記憶される。さらに、プログラム読み出し側のＯＳ等に依存する情報、例えばプログラムを識別表示するアイコン等もこの記憶媒体に記憶される場合もある。図３８において、記憶媒体１３０は、ここではハードディスクで構成されているものとする。ディレクトリ情報管理部１３１には、各種プログラムに従属するデータが管理されている。プログラム格納部１３２には、各種プログラムを情報処理装置にインストールするためのプログラムや、インストールするプログラムが圧縮されている場合に解凍するためのプログラム等も記憶される場合がある。本実施形態における図１９〜図３２、図３４にそれぞれ示す各フローチャートの実行によって実現できる各機能が、外部からインストールされるプログラムによって、情報処理装置によって実現されるようにしてもよい。そして、その場合、ＣＤ−ＲＯＭやフラッシュメモリやフレキシブルディスク等の記憶媒体により、あるいはネットワークを介して外部の記憶媒体から、プログラムを含む情報群が情報処理装置や周辺装置に供給される場合でも、本発明は適用されるものである。
【００８１】
本発明は、前述した実施形態の機能を実現するプログラムコードを記録した記録媒体を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータが記憶媒体に格納されたプログラムコードを読み出し実行することによっても達成される。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコード自体およびプログラムコードを記憶した記憶媒体は本発明を構成することになる。プログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、磁気テープ、不揮発性のメモリカード、ＲＯＭ、ＥＥＰＲＯＭ等を用いることができる。
【００８２】
また、本発明には、プログラムコードの指示に基づき、コンピュータ上で稼働しているオペレーティングシステム（ＯＳ）などが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれる。さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張カードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれた場合についても、本発明は適用される。その場合、書き込まれたプログラムコードの指示に基づき、その機能拡張カードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される。
【００８３】
本発明の実施の形態では、周辺装置制御システムの例の一つとしてローカル印刷システムの例を中心に説明した。しかしこの例に限られることなく、図１に示すようなネットワーク印刷システムにおいて、ＰＣ１内のアプリケーション３０の代わりにＰＣ２内のアプリケーション４７を使うような例でも実現可能であり、有効である。
【００８４】
本実施の形態では、アプリケーション３０、４７の例として図１８に示すような課金アプリケーション（Ｐｈｏｔｏ  Ａｌｂｕｍ  Ｃｒｅａｔｏｒ）を挙げたが、この例に限られることはない。例えば周辺装置から情報を取得して、それを利用してその情報に関する通知を行うような任意のアプリケーションで実現可能であり、有効である。
【００８５】
本発明の実施の形態では、アプリケーション３０、４７が、プリンタ３で印刷される印刷ジョブに関する通知を受信する例を説明したが、この例に限られることなく任意の情報や状態の取得して通知するような周辺装置制御システムに対して有効活用できる。
【００８６】
本発明の実施の形態では、Ｗｉｎｄｏｗｓ  Ｖｉｓｔａ（登録商標）ＯＳに実装されているＡｓｙｎｃｈｒｏｎｏｕｓ  Ｐｒｉｎｔｉｎｇ  Ｎｏｔｉｆｉｃａｔｉｏｎ  Ｉｎｔｅｒｆａｃｅｓを介した通知機能を利用して実現している。しかしこの例に限られることなく、任意の通知機能を利用して、実現することができる。また、実現するにあたっては、標準化された規格を利用することで、より汎用的なシステムを容易に実現することができる。
【００８７】
本発明の実施の形態では、プリンタの例としてカラーインクジェットプリンタを使用したが、この例に限られることなく、例えば、モノクロＬＢＰ等の任意のプリンタを使用することができる。
【００８８】
本発明の実施の形態ではクライアントやサーバとしてパーソナルコンピュータを想定した。しかし、この例に限られることなく、例えばＤＶＤビデオプレーヤー、ゲーム、セットトップボックス、インターネット家電等、同様な使用方法が可能な任意の端末に対して実現することができ、有効である。
【００８９】
本発明の実施の形態では、周辺装置としてプリンタを例示している。しかし、周辺装置として他に、複写機、ファクシミリ、スキャナ、デジタルカメラ、及びこれらの複合機能を備える装置等のいずれかが、本発明の適用対象となり得る。
【００９０】
本発明の実施の形態では、ＯＳに例としてＷｉｎｄｏｗｓ  Ｖｉｓｔａ（登録商標）を使用したが、これらのＯＳに限られることなく、任意のＯＳを使用することができる。
【００９１】
本発明の実施の形態では、ネットワーク４の構成例としてＥｔｈｅｒｎｅｔを用いたが、この例に限られることなく、他の任意のネットワーク構成であってもよい。
【００９２】
本発明の実施の形態では、ＰＣ１とプリンタ３との間のインタフェースとして、ＵＳＢインタフェースを用いた。このインタフェースに限られることなく、例えば、Ｅｔｈｅｒｎｅｔ、無線ＬＡＮ、ＩＥＥＥ１３９４、Ｂｌｕｅｔｏｏｔｈ、ＩｒＤＡ、パラレル、シリアル等の任意のインタフェースを用いるようにしてもよい。
【図面の簡単な説明】
【００９３】
【図１】本発明に係る情報処理装置及び周辺装置からなる周辺装置制御システムの一実施形態におけるシステムの構成部分を表すブロック図
【図２】ＰＣのハードウェア構成の一例を表すブロック図
【図３】プリンタのハードウェア構成を表すブロック図
【図４】ＰＣ１におけるプリンタドライバの構成を表す図
【図５】ジョブ情報（ＪｏｂＩｎｆｏ）を表す図
【図６】通知の種類と通知ＩＤのマップを表す図
【図７】印刷ジョブに関する通知機能の前提技術のタイミングチャート
【図８】印刷ジョブに関する通知の内容を表す前提技術の図
【図９】印刷ジョブに関する通知機能の前提技術のタイミングチャート
【図１０】印刷ジョブに関する通知の内容を表す前提技術の図
【図１１】印刷ジョブに関する通知機能のタイミングチャート
【図１２】印刷ジョブに関する通知の内容を表す図
【図１３】印刷ジョブに関する通知機能のタイミングチャート
【図１４】印刷ジョブに関する通知の内容を表す図
【図１５】ジョブ情報（ＪｏｂＩｎｆｏ）を表す図
【図１６】印刷ジョブに関する通知の内容を表す図
【図１７】印刷ジョブに関する通知の内容を表す図
【図１８】課金アプリケーション（Ｐｈｏｔｏ  Ａｌｂｕｍ  Ｃｒｅａｔｏｒ）のユーザーインタフェースを表す図
【図１９】ＬＭ３６におけるＳｔａｒｔＤｏｃＰｏｒｔ関数の処理を表すフローチャート
【図２０】ＬＭ３６におけるＷｒｉｔｅＰｏｒｔ関数の処理を表す前提技術のフローチャート
【図２１】ＬＭ３６におけるＲｅａｄＰｏｒｔ関数の処理を表すフローチャート
【図２２】ＬＭ３６におけるページ情報の通知の処理を表す前提技術のフローチャート
【図２３】ＬＭ３６におけるＥｎｄＤｏｃＰｏｒｔ関数の処理を表す前提技術のフローチャート
【図２４】ＬＭ３６におけるＷｒｉｔｅＰｏｒｔ関数の処理を表すフローチャート
【図２５】ＬＭ３６におけるページ情報の通知の処理を表すフローチャート
【図２６】ＬＭ３６における「ページ開始」の確認と通知の処理を表すフローチャート
【図２７】ＬＭ３６における「ページ終了」の確認と通知の処理を表すフローチャート
【図２８】ＬＭ３６におけるＥｎｄＤｏｃＰｏｒｔ関数の処理を表すフローチャート
【図２９】アプリケーション３０におけるメイン処理を表すフローチャート
【図３０】アプリケーション３０における通知に基づく情報の取得と更新の処理を表すフローチャート
【図３１】ＬＭ３６における通知処理を表すフローチャート
【図３２】ＬＭ３６における通知処理を表すフローチャート
【図３３】通知リストを表す図
【図３４】アプリケーション３０における通知に基づく情報の取得と更新の処理を表すフローチャート
【図３５】プリンタ３の状態を表すプリンタ状態コマンドの内容を表す図
【図３６】共有情報５１に含まれている情報の詳細を表す前提技術の図
【図３７】共有情報５１に含まれている情報の詳細を表す図
【図３８】本発明に係る周辺装置制御システムで読み出し可能な各種データ処理プログラムを格納する記憶媒体のメモリマップを示す図
【符号の説明】
【００９４】
１・・・情報処理装置（ＰＣ）
２・・・情報処理装置（ＰＣ）
３・・・プリンタ
４・・・ネットワーク
９・・・ＵＳＢインタフェース
３０・・・アプリケーション（課金アプリケーション）
３６・・・ランゲージモニタ
４０・・・スプーラ
４２・・・メインウィンドウ
４３・・・プリンタ表示部
４４・・・印刷ジョブ情報表示部
４５・・・印刷状況表示部
４６・・・キャンセルボタン
４７・・・アプリケーション（課金アプリケーション）
４８・・・ランゲージモニタ
４９・・・通知リスト
５１・・・共有情報
５２・・・ＳｔａｒｔＤｏｃＰｏｒｔ関数
５３・・・ＷｒｉｔｅＰｏｒｔ関数
５４・・・ＷｒｉｔｅＰｏｒｔ関数
５５・・・ＥｎｄＤｏｃＰｏｒｔ関数
５６・・・ＲｅａｄＰｏｒｔ関数
５７・・・ＲｅａｄＰｏｒｔ関数
５８・・・ＲｅａｄＰｏｒｔ関数
５９・・・ＲｅａｄＰｏｒｔ関数
６７・・・印刷キャンセルオペレーション
７０・・・「印刷開始」通知
７１・・・１ページ目の「ページ開始」通知
７２・・・１ページ目の「ページ終了」通知
７３・・・２ページ目の「ページ開始」通知
７４・・・２ページ目の「ページ終了」通知
７５・・・３ページ目の「ページ開始」通知
７６・・・３ページ目の「ページ終了」通知
７７・・・「印刷完了」通知
７８・・・「印刷キャンセル」通知で
８１・・・印刷中のページ情報コマンド
１００・・・ジョブ情報（ＪｏｂＩｎｆｏ）
１０３・・・通知ＩＤ（ｆｕｎｃＩｄ）
１０４・・・プリンタ名（ｐｒｉｎｔｅｒ）
１０５・・・ユーザー名（ｕｓｅｒ）
１０６・・・印刷ジョブＩＤ（ｊｏｂＩｄ）
１０７・・・ドキュメント名（ｄｏｃｕｍｅｎｔ）
１０８・・・印刷中のページ番号（ｐａｇｅＰｒｉｎｔｉｎｇ）
１０９・・・印刷済のページ番号（ｐａｇｅＰｒｉｎｔｅｄ）
１１１・・・キャンセル情報（ｃａｎｃｅｌｅｄ）
１１２・・・印刷失敗情報（ｆａｉｌｅｄＰｒｉｎｔ）
１１４・・・タイムスタンプ（ｔｉｍｅ）
１１５・・・順序を表す情報（ｏｒｄｅｒ）
１２０・・・最後に取得した印刷中のページ番号（ＬａｓｔＰｒｉｎｔｉｎｇＰａｇｅ）
１２１・・・現在印刷中のページ番号（ＣｕｒｒｅｎｔＰｒｉｎｔｉｎｇＰａｇｅ）
１２２・・・「ページ開始」で通知した（通知する）印刷中のページ番号（ｐａｇｅＰｒｉｎｔｉｎｇＳｅｎｔ）
１２３・・・「ページ終了」で通知した（通知する）印刷済のページ番号（ｐａｇｅＰｒｉｎｔｅｄＳｅｎｔ）
１３０・・・記憶媒体
１３１・・・ディレクトリ情報管理部
１３２・・・プログラム格納部
１２０１・・・ＲＡＭ
１２０２・・・ＨＤＤ
【図１】
2008310701.tif 000003
【図２】
2008310701.tif 000004
【図３】
2008310701.tif 000005
【図４】
2008310701.tif 000006
【図５】
2008310701.tif 000007
【図６】
2008310701.tif 000008
【図７】
2008310701.tif 000009
【図８】
2008310701.tif 000010
【図９】
2008310701.tif 000011
【図１０】
2008310701.tif 000012
【図１１】
2008310701.tif 000013
【図１２】
2008310701.tif 000014
【図１３】
2008310701.tif 000015
【図１４】
2008310701.tif 000016
【図１５】
2008310701.tif 000017
【図１６】
2008310701.tif 000018
【図１７】
2008310701.tif 000019
【図１８】
2008310701.tif 000020
【図１９】
2008310701.tif 000021
【図２０】
2008310701.tif 000022
【図２１】
2008310701.tif 000023
【図２２】
2008310701.tif 000024
【図２３】
2008310701.tif 000025
【図２４】
2008310701.tif 000026
【図２５】
2008310701.tif 000027
【図２６】
2008310701.tif 000028
【図２７】
2008310701.tif 000029
【図２８】
2008310701.tif 000030
【図２９】
2008310701.tif 000031
【図３０】
2008310701.tif 000032
【図３１】
2008310701.tif 000033
【図３２】
2008310701.tif 000034
【図３３】
2008310701.tif 000035
【図３４】
2008310701.tif 000036
【図３５】
2008310701.tif 000037
【図３６】
2008310701.tif 000038
【図３７】
2008310701.tif 000039
【図３８】
2008310701.tif 000040
【手続補正書】
【提出日】平成20年8月8日(2008.8.8)
【手続補正１】
【補正対象書類名】図面
【補正対象項目名】図７
【補正方法】変更
【補正の内容】
【図７】
2008310701.tif 000041
【手続補正２】
【補正対象書類名】図面
【補正対象項目名】図９
【補正方法】変更
【補正の内容】
【図９】
2008310701.tif 000042
【手続補正３】
【補正対象書類名】図面
【補正対象項目名】図１１
【補正方法】変更
【補正の内容】
【図１１】
2008310701.tif 000043
【手続補正４】
【補正対象書類名】図面
【補正対象項目名】図１３
【補正方法】変更
【補正の内容】
【図１３】
2008310701.tif 000044