以下、本発明を適用した好適な実施形態を、添付図面を参照しながら説明する。
以下の説明で引用される関数(情報)の内、特に詳しい説明を付加していないものに関しては、2004年7月15日現在、Microsoft Developer Network (MSDN)のサイトhttp://msdn.microsoft.com/library/default.aspでインターネット上で公開されている関数(情報)であるので、必要以上の説明を省略する。
また以下において、USBとはUniversal Serial Busの略であり、双方向通信が可能な公知のインタフェースであるので、その詳細説明は省略する。また以下において、UPnPUniversal Plug and Playの略であり、その仕様の詳細については、UPnP Forumによって標準化されているUniversal Plug and Play Device Architecture V 1.0の規格に記載されているので、ここでは本発明に関連する部分のみ説明し、それ以外の部分に関する説明は省略する。
<第1の実施の形態>
図1は、本発明の第1の実施形態に係る情報処理装置及び周辺装置からなる周辺装置制御システムの構成を示すブロック図である。
同図において、1、2は情報処理装置であり、一般的なパーソナルコンピュータ(以下、PCと略す場合がある)で構成される。PC1、PC2は図3で後述するようなハードウェアで構成され、OS(Operating System)として米国マイクロソフト社のWindows (登録商標)XPがインストールされている。PC1とPC2はEthernet(登録商標)で構成されるネットワーク4を介して接続され、互いに双方向通信が可能である。3はプリンタであり、カラーインクジェットプリンタで構成され、本実施形態における周辺装置である。プリンタ3はXYZ社製のkmmnというモデル名のプリンタである。尚、本発明における周辺装置としては、プリンタ、複写機、ファクシミリ、またはこれらの複合機などの画像形成装置、スキャナ、デジタルカメラであってもよい。
プリンタ3は図4で後述するようなハードウェアで構成され、PC1とUSBインタフェース9を介して接続されており、互いに双方向通信が可能である。36は図5で後述するランゲージモニタ(以降、LMと略す場合がある)であり、Windows(登録商標)用のダイナミックリンクライブラリで構成される。6はランゲージモニタ用リソースファイル(以降、LMリソースと略す場合がある)であり、Windows(登録商標)用のダイナミックリンクライブラリで構成され、文字列リソース等が格納されている。表示プログラムの一例である30はアプリケーションであり、Windows(登録商標)用の実行可能形式のファイル(*.EXE)で構成される。アプリケーションの一例としては、アプリケーション30は図8で後述するようなステータスモニタが挙げられる。また、表示プログラムは、ユーザインタフェースを提供するデバイスドライバプログラムの一部であってもよい。
アプリケーション(ステータスモニタ)30はMMN社製である。本実施形態の周辺装置制御システムでは、PC1がサーバ、PC2がクライアントとなるような関係を持ち、PC1はプリンタ3を共有プリンタとしてネットワーク4を介して他の情報処理装置から印刷することができるようなプリントサーバの機能を備えている。今、PC1には日本語版のWindows(登録商標) XPが、PC2には米語(US English)版のWindows(登録商標) XPがインストールされているものとする。PC2は前記MSDNのサイトで公開されているPrinting and Print Spooler Interfacesを利用して、PC1内のLM36へデータ(情報)を送ったり、LM36からデータ(情報)を受け取ったりすることができる。これはWindows(登録商標) XPの公知の機能であるので、その詳細説明は省略する。
図3はPCのハードウェア構成の一例を表すブロック図である。PC1及びPC2、並びに後述のPC70及びPC71は何れも同図に示すようなハードウェア構成を持つが、ここではPC1を例にして説明する。PC1はランダムアクセスメモリ部(RAM1201)、記憶部であるハードディスクドライブ部(HDD1202)、入力部の一例であるキーボード部(KBD1203)、制御部のCPU1204、表示部の一例である表示用ディスプレイ(LCD1205)、通信制御部の一例であるネットワークボード(NB1207)、以上のPC1の構成要素を互いに接続するバス1206から構成される。なお、記憶部は、可搬性CD−ROMまたは内部据付のROMなどであってもよい。図1に示すPC1の各モジュール(LM36、LMリソース6)は、HDD1202に記憶され、必要に応じてRAM1201に読み出されてCPU1204により実行される。これにより、CPU1204が、図1に示す各モジュールの機能を実現する。
図4はプリンタのハードウェア構成を表すブロック図である。プリンタ3は同図に示すようなハードウェア構成を持つ。同図において、15はマイクロプロセッサ等から構成されるCPUであり、プリンタ3の中央処理装置として、ROM16に記憶されているプログラムに従って、RAM17、通信部18、記録部19を制御する。
ROM16にはプリンタドライバ50(図5で後述する)の制御に従ってプリンタ3が記録(印刷)処理や、状態をPC1へ伝える処理を行うプログラムが記憶されている。
RAM17は主にPC1から送られて、それをもとに記録部19によって印刷される印字データが一時的に記憶される。通信部18にはUSBインタフェース9用の接続ポートが含まれており、USBの通信を制御する。記録部19は、インクジェット方式の記録ヘッド、各カラーインク、キャリッジ、記録紙搬送機構等から構成される記録ユニットと、前記印字データをもとに前記記録ヘッドにて印字用パルスを発生させる為のASIC等から構成される電気回路とから構成される。印刷可能なアプリケーション上での印刷操作によって、アプリケーションで開かれているファイルの表示内容(画像データ)が、EMF形式のスプールファイルとしてPC1のHDD1202に一時的に格納され、プリンタドライバ50を介してプリンタ3制御用コマンドを含む印字データに変換された後、USBインタフェース9を介してプリンタ3に送られる。プリンタ3にて受信された印字データは、記録部19によって印字用パルスに変換されて、記録紙上に印刷される。
図5はPC1におけるプリンタドライバの構成を表すブロック図である。同図において、プリンタドライバ50はPC1にインストールされているドライバであり、32〜38で示す複数のモジュールを備えている。アプリケーション30は印刷指令やプリンタの状態表示が可能なアプリケーションソフトウェアであり、例えば、Windows(登録商標) XP OS に標準で同梱されているテキストエディタであるNotepad(Notepad.exe)等に相当する。尚、本実施形態では、アプリケーション30は図8で後述するようなステータスモニタである。31はGDI(Graphics Device Interface)であり、Windows(登録商標) XP OSの一部である。32はプリンタキューで、Windows(登録商標) XP OSのSpoolerの一部であり、印刷ジョブをキューイングする。次にプリンタドライバ50の構成を説明する。33はプリントプロセッサであり、印刷レイアウトの変更や印刷画像の特殊処理を行う。34はグラフィックスドライバで、プリンタドライバ50の画像処理のコアとして動作し、GDI31から送られて来る描画命令に基づき印刷用の画像処理を行い、印刷制御コマンドを作成する。35はUIモジュールで、プリンタドライバ50のユーザインタフェースの提供及び制御を行う。36はランゲージモニタで、データの通信I/Fとしてデータの送受信を制御する。37はポートモニタであり、LM36から送られてくるデータを適切なポートに対して送信したり、プリンタ3から送られてくるデータを、クラスドライバ38を介して受信したりする。クラスドライバ38は、最もポートに近いローレベルのモジュールであり、本発明ではUSBのプリンタクラスのドライバに相当し、ポート(本発明ではUSBポート)を制御する。プリンタドライバ50はマルチ言語対応のドライバであるので、マルチ言語対応のOSであるWindows(登録商標) XPがサポートしている全ての言語に対応しており、これら全ての言語用の文字列リソース等を備えている。
尚、PC1に日本語版のWindows(登録商標) XPがインストールされているので、日本語版OS上におけるプリンタドライバ50の仕様により、PC1上のプリンタドライバ50は日本語と米語(US English)をサポートしている。また、プリンタドライバ50はプリンタ3の製造元であるXYZ社製のものである。
図8は米語版のOS環境下におけるプリンタの状態をモニタするステータスモニタを表す図である。同図のステータスモニタは、PC2にインストールされているアプリケーション30であり、今、PC2には米語(US English)版のWindows(登録商標) XPがインストールされているので、米語表示になっている。同図において、46はステータスモニタのメインウィンドウであり、プリンタ3(XYZ社製のkmmnというモデル名のプリンタ)の現在の状態を表している。47はインク情報(Ink Information)表示部であり、プリンタ3のインクの状態を表す。同図に示す通り、プリンタ3には黒(Black)、シアン(Cyan)、マゼンタ(Magenta)、黄(Yellow)の4色のColor(色)のインクが装着されており、それぞれのName(名称)がCI-B Black Ink、CI-C Cyan Ink、CI-M Magenta Ink、CI-Y Yellow Ink、State(状態)がFull(満タン)、Low(残りわずか)、Out(無し)、Full(満タン)であることを表している。48はプリンタ情報(Printer Information)表示部であり、プリンタがOnline(オンライン)の状態であることを表している。
図10はLMリソース6の格納先及び格納状態を表す図である。同図はPC1でWindows(登録商標) XP OSがC:\ドライブにインストールされている例を表す。LMリソース6はWindows(登録商標)用のダイナミックリンクライブラリで構成され、LM_RES.DLLというファイルである。図5で前述したように、プリンタドライバ50はマルチ言語対応のドライバであるので、LMリソース6はサポートしている全言語分の文字列リソースを備えている。これらの各言語用の文字列リソースは、同図に示すように、それぞれの各言語毎に別々に用意されているフォルダに同一ファイル名(LM_RES.DLL)でそれぞれ格納されている。例えば、日本語用のLMリソース6はC:\WINDOWS\system32\spool\drivers\w32x86\3\のJPフォルダに、米語(US English)用のLMリソース6はUSフォルダに格納されている。
図14、図15はアプリケーション(ステータスモニタ)30がプリンタ3からインクの情報及び状態を取得する時に使用するスキーマを表す図である。これらのスキーマは、アプリケーション30がPrinting and Print Spooler Interfacesを介してLM36経由でプリンタ3からインクの情報及び状態を取得する時に、Windows(登録商標) XP OSで使用できるCOMインタフェースIBidiSpl のAPI関数IBidiSpl::SendRecv()をコールする際に引数として指定される。
図14において、InkInfoはインクの情報を表すPropertyであり、スキーマのフルパスの指定は\Printer.InkInfoである。[Color]は色の情報を表すPropertyであり、スキーマのフルパスの指定は\Printer.InkInfo.[Color]、設定可能な値は、黒を表すBlack、シアンを表すCyan、マゼンタを表すMagenta、黄を表すYellowの何れかである。例えば、黒インクの情報を取得したい場合は、\Printer.InkInfo.Blackと指定する。Installedは[Color]色のインクが搭載されているか否かを表すValueであり、データ型はBoolean、スキーマのフルパスの指定は\Printer.InkInfo.[Color]:Installed、設定可能な値は、搭載されていること表すTrue、搭載されていないを表すFalseの何れかである。Stateは[Color]色のインクの残量の状態を表すValueであり、データ型はString、スキーマのフルパスの指定は\Printer.InkInfo.[Color]:State、設定可能な値は、インク満タンを表すFull、インク残りわずかを表すLow、インク無しを表すOut、インク残量不明を表すUnknownの何れかである。
図15において、DisplayNameはある言語に翻訳(ローカライズ)された[Color]色のインクの名称を表すPropertyであり、スキーマのフルパスの指定は、\Printer.InkInfo.[Color].DisplayNameである。Languageは言語IDを表すPropertyであり、スキーマのフルパスの指定は、\Printer.InkInfo.[Color].DisplayName.[Language]、設定可能な値は、Windows(登録商標) XP OSで使用できるAPI関数GetUserDefaultLangID()等をコールして取得した言語ID(unsigned short型)を文字列(char *)に変換した文字列、例えば、米語(US English)を表す1033、日本語を表す1041等や、アプリケーション30から言語IDを指定せずLM36またはプリンタ3に最適な言語を自動選択させる時に指定するAutoの何れかである。Nameはある言語に翻訳(ローカライズ)された[Color]色のインクの名称を表すValueであり、データ型はUnicode string、スキーマのフルパスの指定は\Printer.InkInfo.[Color].DisplayName:Nameである。設定可能な値の例は、同図のExamplesのようなUnicodeの文字列である。
図14、図15において、Installed、State、Name等のValueはLM36またはプリンタ3からアプリケーション30へ返される値である。このように、図14、図15で定義されているスキーマを使って、アプリケーション(ステータスモニタ)30はプリンタ3に搭載されているインクの情報及び状態を取得することができる。
図16は図14、図15で定義されているスキーマを使ってインクの情報及び状態を列挙(Enumeration)する時のスキーマ及び値を表す図である。同図において、アプリケーション(ステータスモニタ)30から\Printer.InkInfoのスキーマを指定してIBidiSpl::SendRecv()関数をコールすると(Query (Schema)欄)、プリンタ3の全インクの情報及び状態のスキーマ(Retrieve (Schema))と値(Retrieve (Value))がセットで返される。同図の例では、プリンタ3に黒、シアン、マゼンタ、黄のインクが搭載されていて、インクの残量の状態がそれぞれ、インク満タン(Full)、インク残りわずか(Low)、インク無し(Out)、インク満タン(Full)であり、米語(US English)に翻訳(ローカライズ)されたインクの名称がそれぞれ、"CI-B Black Ink"、"CI-C Cyan Ink"、"CI-M Magenta Ink"、"CI-Y Yellow Ink"、日本語に翻訳(ローカライズ)されたインクの名称がそれぞれ、"CI-B 黒 インク"、"CI-C シアン インク"、"CI-M マゼンタ インク"、"CI-Y 黄 インク"であることを表している。
図17は、図14、図15で定義されているスキーマを使ってインクの名称を取得(Get)する時のスキーマ及び値を表す図である。同図において、例えば、黒インクの米語(US English)の名称を取得する場合、アプリケーション(ステータスモニタ)30から\Printer.InkInfo.Black.DisplayName.1033:Nameのスキーマを指定してIBidiSpl::SendRecv()関数をコールすると(Query (Schema)欄)、プリンタ3に搭載されている黒インクの名称のスキーマ(Retrieve (Schema))として\Printer.InkInfo.Black.DisplayName.1033:Nameと、値(Retrieve (Value))として"CI-B Black Ink"がセットで返されていることがわかる。
例えば、シアンインクの日本語の名称を取得する場合、アプリケーション(ステータスモニタ)30から\Printer.InkInfo.Cyan.DisplayName.1041:Nameのスキーマを指定してIBidiSpl::SendRecv()関数をコールすると(Query (Schema)欄)、プリンタ3に搭載されているシアンインクの名称のスキーマ(Retrieve (Schema))として\Printer.InkInfo.Cyan.DisplayName.1041:Nameと、値(Retrieve (Value))として"CI-C シアン インク"がセットで返されていることがわかる。
例えば、最適な言語の自動選択を指定して黄インクの名称を取得する場合、アプリケーション(ステータスモニタ)30から\Printer.InkInfo.Yellow.DisplayName.Auto:Nameのスキーマを指定してIBidiSpl::SendRecv()関数をコールすると(Query (Schema)欄)、プリンタ3に搭載されている黄インクの名称のスキーマ(Retrieve (Schema))として\Printer.InkInfo.Yellow.DisplayName.Auto:Nameと、値(Retrieve (Value))として"CI-Y Yellow Ink"がセットで返されていることがわかる。
図18は、本実施形態を実現する為に新たに定義する関数の仕様を表す図である。現時点において、このような関数はWindows(登録商標) XP OSで使用できるAPI関数としては存在しない。Windows(登録商標) XP OSで使用できるAPI関数LoadLibrary()の仕様が、
HMODULE
LoadLibrary(
LPCTSTR lpFileName
);
であるのに対し、新たに定義する関数では、言語IDを指定する引数LANGID languageIdが追加されている。LoadLibraryForMultiLanguage()関数は、languageIdで指定された言語IDに該当する、lpFileNameで指定されたファイル名のリソースファイル(モジュール)をロードし、そのモジュールのハンドルを返す、という仕様である。例えば、LM36がこの関数を使ってLMリソース6をロードする場合、
LoadLibraryForMultiLanguage("LM_RES.DLL", languageId);
とコールすると、OSが、図10に示す各言語毎に別々に用意されているフォルダに格納されているLM_RES.DLLファイルの中から、languageIdで指定された言語IDに該当するフォルダ内のLM_RES.DLLファイルをロードし、そのモジュールのハンドルが返される。
図22はLMリソース6のIDと文字列のテーブルを表す図である。同図において、(A)の米語(US English)用LMリソース6では、ID1、ID2、ID3、ID4に対し、それぞれ、CI-B Black Ink、CI-C Cyan Ink、CI-M Magenta Ink、CI-Y Yellow Inkが、マッピングされている。(B)の日本語用LMリソース6では、ID1、ID2、ID3、ID4に対し、それぞれ、CI-B 黒 インク、CI-C シアン インク、CI-M マゼンタ インク、CI-Y 黄 インク、がマッピングされている。これらはプリンタ3用のXYZ社製のインクの名称であり、プリンタ3及びインクの製造元であるXYZ社で定めている正式な名称である。
図23はPC1(PC70)がプリンタ3からインク情報を取得する時のデータを表す図である。実際にPC1(PC70)とプリンタ3との間で送受信されるデータはバイナリデータであるが、同図では理解しやすくすることを考えて、ASCII文字コードでエンコードした後のテキストデータとして表している。同図において、PC1(PC70)が要求コマンドをプリンタ3にUSBインタフェース9を介して発行すると、インク情報がプリンタ3からPC1(PC70)にUSBインタフェース9を介して返される。このインク情報は次の内容を表している。
<色> <型名> <状態>
黒 CI-B 満タン
シアン CI-C 残りわずか
マゼンタ CI-M 無し
黄 CI-Y 満タン
以下、図26〜図28のフローチャートを用いて、本実施形態の動作について説明する。
図26はアプリケーション(ステータスモニタ)30がプリンタ3のインク情報を取得して図8のインク情報表示部47の表示を更新する処理を表すフローチャートである。以下では、黒インクの情報を取得してインク情報表示部47の表示を更新する例を挙げて説明する。
同図において、アプリケーション30がプリンタ3のインク情報を取得してインク情報表示部47の表示を更新する処理をスタートさせ(S2601)、アプリケーション30がWindows(登録商標) XP OSで使用できるAPI関数GetUserDefaultLangID()をコールして言語ID(unsigned short型)を確認し、PC2には米語(US English)版のWindows(登録商標) XPがインストールされているので言語IDが米語の言語IDを表す1033であることが確認され、この言語IDをもとに、図15で定義されている\Printer.InkInfo.Black.DisplayName.1033:Nameのスキーマを引数としてCOMインタフェースIBidiSpl のAPI関数IBidiSpl::SendRecv()をコールしてインク情報の取得を開始すると(S2602)、Printing and Print Spooler Interfacesを介して、LM36がエクスポートしているSendRecvBidiDataFromPort()関数がスプーラ(Windows(登録商標) XP OSの機能の一部なので、図や詳細説明は省略)からコールされて、この関数における処理が開始される(S2603)。
LM36のSendRecvBidiDataFromPort()関数内において、図23に示すように、PC1から要求コマンドを発行してプリンタ3から返されるインク情報を取得し(S2604)、SendRecvBidiDataFromPort()関数の引数として指定されている\Printer.InkInfo.Black.DisplayName.1033:Nameのスキーマから言語IDを確認し、言語IDが1033であり米語(US English)を表す言語IDであることが確認され(S2605)、言語IDがAutoではないので(S2606)、Windows(登録商標) XP OSで使用できるAPI関数LoadLibrary()でロードされたLMリソース6から、前記言語IDをもとに図22の(A)に示すIDと文字列のテーブルを使って文字列リソースの取得を試み(S2608)、該当する文字列リソースが有るので(S2609)、取得した文字列リソースをもとに、前記取得したインク情報をSendRecvBidiDataFromPort()関数の引数として指定されている\Printer.InkInfo.Black.DisplayName.1033:Nameのスキーマの定義に従って変換し(S2611)、SendRecvBidiDataFromPort()関数の引数として図17に示すようなスキーマの定義に変換されたインク情報を返し、LM36のSendRecvBidiDataFromPort()関数の処理を終了する(S2612)。
アプリケーション30において、IBidiSpl::SendRecv()関数がリターンされ、引数として図17に示すようなスキーマの定義で返されたインク情報を取得し(S2613)、図8のインク情報表示部47の情報を更新し(S2614)、アプリケーション30がプリンタ3のインク情報を取得してインク情報表示部47の表示を更新する処理を終了する(S2615)。
ステップS2606において言語IDがAutoの場合、図28で後述する文字列リソースの自動取得の処理を行い(S2607)、ステップS2611に進む。ステップS2609において該当する文字列リソースが無い場合、図27で後述する文字列リソースの検索と取得の処理を行い(S2610)、ステップS2611に進む。通常、アプリケーション30は、ステップS2601からスタートするプリンタ3のインク情報を取得してインク情報表示部47の表示を更新する処理を、例えば、
\Printer.InkInfo.Cyan.DisplayName.1033:Name
\Printer.InkInfo.Black:State
というようにインクの色や残量の状態を表すスキーマを変えながら繰り返すことにより、インク情報表示部47に表示する全情報を取得し、表示を更新する。そして、例えば5秒に1回等、ある一定時間の間隔でこれら一連の処理を繰り返すことで、プリンタ3に搭載されているインクの情報及び状態をインク情報表示部47にリアルタイムに表示することができる。ステップS2614においてインク情報表示部47のName(名称)を更新する場合、ステップS2613において図15で定義されたスキーマのName(\Printer.InkInfo.[Color].DisplayName:Name)で返された値(文字列)をそのまま使ってステップS2614においてインク情報表示部47の情報を更新する。
図27は文字列リソースの検索と取得の処理を表すフローチャートである。同図において、文字列リソースの検索と取得の処理が開始されると(S2701)、図26で指定されたスキーマ内の言語IDをWindows(登録商標) XP OSで定義された言語ID(LANGID)(unsigned short型)に変換し、このWindows(登録商標) XP OSで定義された言語IDは、例えば、
メジャー言語属性 マイナー言語属性
英語 米語(US English)
英語 カナダ英語
というように定義されるメジャー言語属性とマイナー言語属性を持っているので、同一のメジャー言語属性で異なるマイナー言語属性の言語IDを確認し(S2702)、近い言語IDが有る場合(S2703)、Windows(登録商標) XP OSで使用できるAPI関数LoadLibrary()でロードされたLMリソース6から、前記言語IDをもとに図22に示すようなIDと文字列のテーブルを使って文字列リソースの取得を試み(S2704)、該当する文字列リソースが有る場合(S2705)、取得した文字列リソースを返し、関数をリターン(終了)する(S2708)。
ステップS2703において近い言語IDが無い場合、Windows(登録商標) XP OSで使用できるAPI関数GetSystemDefaultLangID()をコールして言語ID(unsigned short型)を確認し(S2706)、Windows(登録商標) XP OSで使用できるAPI関数LoadLibrary()でロードされたLMリソース6から、前記言語IDをもとに図22に示すようなIDと文字列のテーブルを使って文字列リソースを取得し(S2707)、取得した文字列リソースを返し、関数をリターン(終了)する(S2708)。ステップS2705において該当する文字列リソースが無い場合、ステップS2702に進み、同一のメジャー言語属性で異なるマイナー言語属性の言語IDが有るか無いの確認を繰り返す。
図28は文字列リソース自動取得の処理を表すフローチャートである。同図において、文字列リソース自動取得の処理が開始されると(S2801)、PC2の言語IDを確認し、PC2には米語(US English)版のWindows(登録商標) XPがインストールされているので言語IDが米語の言語IDを表す1033であることが確認され(S2802)、Windows(登録商標) XP OSで使用できるAPI関数LoadLibrary()でロードされたLMリソース6から、前記言語IDをもとに図22の(A)に示すIDと文字列のテーブルを使って文字列リソースの取得を試み(S2803)、該当する文字列リソースが有る場合(S2804)、取得した文字列リソースを返し、関数をリターン(終了)する(S2806)。ステップS2804において該当する文字列リソースが無い場合、図27の文字列リソースの検索と取得の処理を行い(S2805)、取得した文字列リソースを返し、関数をリターン(終了)する(S2806)。
図31はLM36がエクスポートしているSendRecvBidiDataFromPort()関数における言語IDを確認して文字列リソースを取得する一連の処理のサンプルプログラムを表す図である。
同図は、コメントに記述してある通り、図26の各ステップの一部に相当する処理を実装する際のプログラムの一例である。各処理に関しては、Windows(登録商標) XP OSで使用できるAPI関数やC言語の標準関数であるので、ここではその説明を省略する。
図32はLM36がエクスポートしているSendRecvBidiDataFromPort()関数における言語IDを確認して文字列リソースを取得する一連の処理のサンプルプログラムを表す図である。
同図は、コメントに記述してある通り、図26の各ステップの一部に相当する処理を実装する際のプログラムの一例である。同図から、LMリソース6をロードする際に、図18に示す新たに定義されたLoadLibraryForMultiLanguage()関数を使っていることがわかる。それ以外の各処理に関しては、Windows(登録商標) XP OSで使用できるAPI関数やC言語の標準関数であるので、ここではその説明を省略する。同図と図31を見比べるとわかるように、新たに定義されたLoadLibraryForMultiLanguage()関数を使うことで、ランゲージモニタの実装作業が容易になり、コーディングミスを防ぐことができる。
<第2の実施の形態>
次に、本発明の第2の実施形態について説明する。
図19は、本発明の第2の実施形態に係る情報処理装置及び周辺装置からなる周辺装置制御システムの構成を示すブロック図である。同図において、1、2は図1のPC1、PC2と同一である。40は情報処理装置であり、一般的なパーソナルコンピュータで構成される。PC40は図3に示すようなハードウェアで構成され、OSとしてWindows(登録商標) XPがインストールされている。PC1、PC2、PC40はEthernet(登録商標)で構成されるネットワーク4を介して接続され、互いに双方向通信が可能である。3は図1のプリンタ3と同一である。36は図5のLM36と同一である。6は図1のLMリソース6と同一である。9は図1のUSBインタフェース9と同一である。30は図1のアプリケーション(ステータスモニタ)30と同一である。41はアプリケーションであり、Windows(登録商標)用の実行可能形式のファイル(*.EXE)で構成される。アプリケーション41の一例としては、図9で後述するようなステータスモニタが挙げられる。
アプリケーション(ステータスモニタ)41はMMN社製である。本実施形態の周辺装置制御システムでは、PC1がサーバ、PC2、PC40がクライアントとなるような関係を持ち、PC1はプリンタ3を共有プリンタとしてネットワーク4を介して他の情報処理装置から印刷することができるようなプリントサーバの機能を備えている。今、PC40には日本語版のWindows(登録商標) XPがインストールされているものとする。PC2、PC40は前記MSDNのサイトで公開されているPrinting and Print Spooler Interfacesを利用して、PC1内のLM36へデータ(情報)を送ったり、LM36からデータ(情報)を受け取ったりすることができる。これはWindows(登録商標) XPの公知の機能であるので、その詳細説明は省略する。
図9は日本語版のOS環境下におけるプリンタの状態をモニタするステータスモニタを表す図である。同図のステータスモニタは、図19のPC40にインストールされているアプリケーション41であり、今、PC40には日本語版のWindows(登録商標) XPがインストールされているので、日本語語表示になっている。同図において、51はステータスモニタのメインウィンドウであり、プリンタ3(XYZ社製のkmmnというモデル名のプリンタ)の現在の状態を表している。52はインク情報表示部であり、プリンタ3のインクの状態を表す。同図に示す通り、プリンタ3には黒、シアン、マゼンタ、黄の4色の色のインクが装着されており、それぞれの名称がCI-B 黒 インク、CI-C シアン インク、CI-M マゼンタ インク、CI-Y 黄 インク、状態が満タン、残りわずか、無し、満タンであることを表している。53はプリンタ情報表示部であり、プリンタがオンラインの状態であることを表している。プリンタ3の状態としては第1の実施形態の図8と全く同じ状態を表しており、言語が日本語に翻訳(ローカライズ)されているという点だけが異なる。
以下、図29のフローチャートを用いて、本実施形態の動作について説明する。図29はアプリケーション(ステータスモニタ)30がプリンタ3のインク情報を取得して図8のインク情報表示部47の表示を更新する処理を表すフローチャートである。以下では、黒インクの情報を取得してインク情報表示部47の表示を更新する例を挙げて説明する。
同図において、アプリケーション30がプリンタ3のインク情報を取得してインク情報表示部47の表示を更新する処理をスタートさせ(S2901)、アプリケーション30がWindows(登録商標) XP OSで使用できるAPI関数GetUserDefaultLangID()をコールして言語ID(unsigned short型)を確認し、PC2には米語(US English)版のWindows(登録商標) XPがインストールされているので言語IDが米語の言語IDを表す1033であることが確認され、この言語IDをもとに、図15で定義されている\Printer.InkInfo.Black.DisplayName.1033:Nameのスキーマを引数としてCOMインタフェースIBidiSpl のAPI関数IBidiSpl::SendRecv()をコールしてインク情報の取得を開始すると(S2902)、PC1のOSが前記スキーマから言語IDを確認し、言語IDが1033であり米語(US English)を表す言語IDであることが確認され(S2903)、スプーラ(Windows(登録商標) XP OSの公知の機能の一部なので、図や詳細説明は省略)がこの言語IDの属性を持つ印刷用のスレッドを作成し(S2904)、Printing and Print Spooler Interfacesを介して、LM36がエクスポートしているSendRecvBidiDataFromPort()関数がスプーラから前記スレッドでコールされて、この関数における処理が開始される(S2905)。
LM36のSendRecvBidiDataFromPort()関数内において、図23に示すように、PC1から要求コマンドを発行してプリンタ3から返されるインク情報を取得し(S2906)、Windows(登録商標) XP OSで使用できるAPI関数LoadLibrary()でロードされたLMリソース6から、図22の(A)に示すIDと文字列のテーブルを使って文字列リソースを取得し(S2907)、取得した文字列リソースをもとに、前記取得したインク情報をSendRecvBidiDataFromPort()関数の引数として指定されている\Printer.InkInfo.Black.DisplayName.1033:Nameのスキーマの定義に従って変換し(S2908)、SendRecvBidiDataFromPort()関数の引数として図17に示すようなスキーマの定義に変換されたインク情報を返し、LM36のSendRecvBidiDataFromPort()関数の処理を終了する(S2909)。
アプリケーション30において、IBidiSpl::SendRecv()関数がリターンされ、引数として図17に示すようなスキーマの定義で返されたインク情報を取得し(S2910)、図8のインク情報表示部47の情報を更新し(S2911)、アプリケーション30がプリンタ3のインク情報を取得してインク情報表示部47の表示を更新する処理を終了する(S2912)。
通常、アプリケーション30は、ステップS2901からスタートするプリンタ3のインク情報を取得してインク情報表示部47の表示を更新する処理を、例えば、
\Printer.InkInfo.Cyan.DisplayName.1033:Name
\Printer.InkInfo.Black:State
というようにインクの色や残量の状態を表すスキーマを変えながら繰り返すことにより、インク情報表示部47に表示する全情報を取得し、表示を更新する。そして、例えば5秒に1回等、ある一定時間の間隔でこれら一連の処理を繰り返すことで、プリンタ3に搭載されているインクの情報及び状態をインク情報表示部47にリアルタイムに表示することができる。
ステップS2911においてインク情報表示部47のName(名称)を更新する場合、ステップS2910において図15で定義されたスキーマのName(\Printer.InkInfo.[Color].DisplayName:Name)で返された値(文字列)をそのまま使ってステップS2911においてインク情報表示部47の情報を更新する。LM36のSendRecvBidiDataFromPort()関数がスプーラから前記言語ID(米語)の属性を持つ印刷用のスレッドでコールされるので、ステップS2907においてLoadLibrary()関数でロードされるLMリソース6は、このスレッドの言語IDに該当する図10に示す
C:\WINDOWS\system32\spool\drivers\w32x86\3\US\LM_RES.DLL
である。
このような処理は現時点のWindows(登録商標) XP OSには実装されておらず、新たに提案する処理である。これにより、ランゲージモニタ(LM36)における実装としては、現時点のWindows(登録商標) XP OSで使用できるAPI関数LoadLibrary()を普通に使うことによりランゲージモニタ用リソースファイル(LMリソース6)をロードできるので、容易に実装できる。ステップS2903、S2904はOSにおける処理を表しているが、現時点のWindows(登録商標) XP OSにはこのような処理は実装されておらず、新たに提案する処理である。
このように、クライアント(PC2)側のユーザが使用しているアプリケーション(アプリケーション30)が使用している言語(言語ID)を使って、サーバ(PC1)側のスプーラがこの言語IDの属性を持つ印刷用のスレッドを作成し、このスレッドでランゲージモニタ(LM36)のSendRecvBidiDataFromPort()関数をコールするので、クライアント(PC2)とサーバ(PC1)の言語(言語ID)が一致していない場合においても、ランゲージモニタ(LM36)は特別な制御をすることなく容易な実装で、クライアント(PC2)上のアプリケーション(アプリケーション30)に、そのアプリケーションが使用している言語(言語ID)を使って、図8に示すような正確な表示を行うことができる。例えば、PC40上のアプリケーション(ステータスモニタ)41がプリンタ3のインク情報を取得して図9のインク情報表示部52の表示を更新する処理が開始された場合も、上述したような処理が行われ、PC40上のアプリケーション41において図9に示すような内容が表示される。
図33はLM36がエクスポートしているSendRecvBidiDataFromPort()関数における文字列リソースを取得する一連の処理のサンプルプログラムを表す図である。同図は、コメントに記述してある通り、図29のステップS2907に相当する処理を実装する際のプログラムの一例である。各処理に関しては、Windows(登録商標) XP OSで使用できるAPI関数やC言語の標準関数であるので、ここではその説明を省略する。同図と図31、図32を見比べるとわかるように、スプーラが言語IDの属性を持つ印刷用のスレッドを作成して、このスレッドでランゲージモニタ(LM36)のSendRecvBidiDataFromPort()関数をコールするので、ランゲージモニタにおいて言語IDを確認する処理が不要となり、ランゲージモニタの実装作業が容易になるので、コーディングミスを防ぐことができる。
図34はアプリケーション(ステータスモニタ)30がプリンタ3からインクの情報及び状態を取得する時に使用するスキーマを表す図である。これらのスキーマは、アプリケーション30がPrinting and Print Spooler Interfacesを介してLM36経由でプリンタ3からインクの情報及び状態を取得する時に、Windows(登録商標) XP OSで使用できるCOMインタフェースIBidiSpl のAPI関数IBidiSpl::SendRecv()をコールする際に引数として指定される。
同図において、InkInfoはインクの情報を表すPropertyであり、スキーマのフルパスの指定は\Printer.InkInfoである。[Color]は色の情報を表すPropertyであり、スキーマのフルパスの指定は\Printer.InkInfo.[Color]、設定可能な値は、黒を表すBlack、シアンを表すCyan、マゼンタを表すMagenta、黄を表すYellowの何れかである。例えば、黒インクの情報を取得したい場合は、\Printer.InkInfo.Blackと指定する。Installedは[Color]色のインクが搭載されているか否かを表すValueであり、データ型はBoolean、スキーマのフルパスの指定は\Printer.InkInfo.[Color]:Installed、設定可能な値は、搭載されていること表すTrue、搭載されていないを表すFalseの何れかである。Stateは[Color]色のインクの残量の状態を表すValueであり、データ型はString、スキーマのフルパスの指定は\Printer.InkInfo.[Color]:State、設定可能な値は、インク満タンを表すFull、インク残りわずかを表すLow、インク無しを表すOut、インク残量不明を表すUnknownの何れかである。DisplayNameはある言語に翻訳(ローカライズ)された[Color]色のインクの名称を表すValueであり、データ型はUnicode string、スキーマのフルパスの指定は\Printer.InkInfo.[Color]:DisplayNameである。設定可能な値の例は、同図のExamplesのようなUnicodeの文字列である。
図35は図34で定義されているスキーマを使ってインクの情報及び状態を列挙(Enumeration)する時のスキーマ及び値を表す図である。同図において、アプリケーション(ステータスモニタ)30から\Printer.InkInfoのスキーマを指定してIBidiSpl::SendRecv()関数をコールすると(Query (Schema)欄)、プリンタ3の全インクの情報及び状態のスキーマ(Retrieve (Schema))と値(Retrieve (Value))がセットで返される。同図の例では、プリンタ3に黒、シアン、マゼンタ、黄のインクが搭載されていて、インクの残量の状態がそれぞれ、インク満タン(Full)、インク残りわずか(Low)、インク無し(Out)、インク満タン(Full)であり、インクの名称がそれぞれ、CI-B Black Ink、CI-C Cyan Ink、CI-M Magenta Ink、CI-Y Yellow Inkであることを表している。
図36は図14で定義されているスキーマを使ってインクの型名を取得(Get)する時のスキーマ及び値を表す図である。同図において、例えば、黒インクの型名を取得する場合、アプリケーション(ステータスモニタ)30から\Printer.InkInfo.Black:DisplayNameのスキーマを指定してIBidiSpl::SendRecv()関数をコールすると(Query (Schema)欄)、プリンタ3に搭載されている黒インクの型名のスキーマ(Retrieve (Schema))として\Printer.InkInfo.Black:DisplayNameと、値(Retrieve (Value))としてCI-B Black Inkがセットで返されていることがわかる。
図20はPC2がサポートしているUPnPデバイスのXML Device Descriptionの記述内容を表す図である。ここで、同図の左端の番号は行番号を表す。同図において、2〜17行目はroot要素を表し、PC2がUPnP Forumで標準化されているデバイスに準拠していることが記述されている。7〜16行目はdevice要素を表す。8行目はdeviceType要素であり、PC2がUPnP Forumで標準化されているBasic Device V1.0のデバイスであることが記述されている。9行目はfriendlyName要素である。10行目はmanufacturer要素であり、製造業者名が記述されている。11行目はmanufacturerURL要素であり、製造業者のWebサイトのホームページのURLが記述されている。12行目はmodelDescription要素であり、エンドユーザ用の識別名が記述されている。13行目はmodelName要素であり、機種名が記述されている。14行目はserialNumber要素であり、製造番号が記述されている。15行目はlanguageID要素であり、PC2のOSで使用されている言語の言語IDが記述されている。実際にはPC2のOSが、Windows(登録商標) XP OSで使用できるAPI関数GetSystemDefaultLangID()をコールして取得した言語ID(unsigned short型)を文字列(char *)に変換した文字列を記述する。このlanguageID要素は現時点のWindows(登録商標) XP OSには実装されておらず、新たに提案する要素である。
同図に示すようなlanguageID要素を利用することにより、PC1のOSはPC2、PC40で使用されている言語IDを取得することができるので、図29のステップS2903において、前記スキーマから言語IDを確認する代わりにこのlanguageID要素から言語IDを確認することができる。この場合、図15に示すような言語IDを含むスキーマが不要となり、図34に示すような言語IDを含まない簡単なスキーマを使うことで容易に実現することができる。
図24はPC1がプリンタ3からインク情報を取得する時のデータを表す図である。実際にPC1とプリンタ3との間で送受信されるデータはバイナリデータであるが、同図では理解しやすくすることを考えて、Shift JISコードでエンコードした後のテキストデータとして表している。
同図は、各言語に翻訳(ローカライズ)されたインクの名称をプリンタ3内部に格納している場合を表す図である。尚、同図では、インクの名称のデータとして、プリンタ3が日本語と米語(US English)のデータを備えている例を示す。同図において、PC1が要求コマンドをプリンタ3にUSBインタフェース9を介して発行すると、インク情報がプリンタ3からPC1にUSBインタフェース9を介して返される。このインク情報は次の内容を表している。
<色> <型名> <名称(日本語)> <名称(米語)> <状態>
黒 CI-B CI-B 黒 インク CI-B Black Ink 満タン
シアン CI-C CI-C シアン インク CI-C Cyan Ink 残りわずか
マゼンタ CI-M CI-M マゼンタ インク CI-M Magenta Ink 無し
黄 CI-Y CI-Y 黄 インク CI-Y Yellow Ink 満タン
第1の実施の形態、第2の実施の形態では、各言語に翻訳(ローカライズ)されたインクの名称の文字列を、LMリソース6に全言語分格納している例を説明したが、この例に限られることなく、同図に示すように、全言語分のインクの名称の文字列をプリンタ3内部に格納することでも実現可能である。
以上説明したように、各言語に翻訳(ローカライズ)されたインクの名称の文字列を、従来例ではMMN社製のアプリケーションリソース8に格納していたのに対し、上記実施形態ではXYZ社製のLMリソース6に格納することで、アプリケーション30、41上のインク情報表示部47、52に正確なインクの名称を表示することができる。
以下、図37に示すメモリマップを参照して、上記実施形態に係る情報処理装置及び周辺装置からなる周辺装置制御システムで読み出し可能なデータ処理プログラムの構成について説明する。
図37は、本実施形態に係る周辺装置制御システムで読み出し可能な各種データ処理プログラムを格納する記憶媒体のメモリマップを示す図である。なお、特に図示しないが、記憶媒体に記憶されるプログラム群を管理する情報、例えばバージョン情報,作成者等もこの記憶媒体に記憶され、かつ、プログラム読み出し側のOS等に依存する情報、例えばプログラムを識別表示するアイコン等も記憶される場合もある。
同図において、64は記憶媒体であり、ここではハードディスクで構成されているものとする。65はディレクトリ情報管理部であり、各種プログラムに従属するデータがこのディレクトリ情報管理部65で管理されている。66はプログラム格納部であり、各種プログラムを情報処理装置にインストールするためのプログラムや、インストールするプログラムが圧縮されている場合に解凍するためのプログラム等も記憶される場合がある。
上記実施形態における図26、図27、図28、図29にそれぞれ示す各フローチャートの実行によって実現できる各機能が、外部からインストールされるプログラムによって、情報処理装置によって実現されるようにしてもよい。そして、その場合、CD−ROMやフラッシュメモリやフレキシブルディスク等の記憶媒体により、あるいはネットワークを介して外部の記憶媒体から、プログラムを含む情報群が情報処理装置や周辺装置に供給される場合でも、本発明は適用されるものである。
上記実施形態では、アプリケーション30の一例としてステータスモニタを挙げたが、この例に限られることなく、例えば周辺装置から情報を取得して、それを利用するような任意のアプリケーションで実現可能であり、有効である。
また、上記実施形態では、アプリケーション(ステータスモニタ)30でプリンタ3に搭載されているインクの情報及び状態をモニタする例を説明したが、この例に限られることなく、例えば、周辺装置の動作状態や、警告、エラーの状態、オプションの装着状態等の任意の情報や状態の取得に有効活用できる。
また、上記実施形態では、図20に示すようにUPnPを利用して実現しているが、これに限られることなく、同様な機能を備えるプロトコル等を利用して、実現することができる。また、実現するにあたっては、標準化された規格を利用することで、より汎用的なシステムを容易に実現することができる。
また、上記実施形態では、プリンタの例としてカラーインクジェットプリンタを使用したが、この例に限られることなく、例えば、モノクロLBP等の任意のプリンタを使用することができる。
また、上記実施形態では、クライアントやサーバとしてパーソナルコンピュータを想定したが、この例に限られることなく、例えばDVDビデオプレーヤー、ゲーム、セットトップボックス、インターネット家電等、同様な使用方法が可能な任意の端末に対して実現することができ、有効である。
また、上記実施形態では、周辺装置としてプリンタを例示しているが、周辺装置として他に、複写機、ファクシミリ、スキャナ、デジタルカメラ、およびこれらの複合機能を備える装置などのいずれかが、本発明の適用対象となり得る。
また、上記実施形態では、OSに例としてWindows(登録商標) XPを使用したが、これらのOSに限られることなく、任意のOSを使用することができる。
また、上記実施形態では、ネットワーク4の構成例としてEthernet(登録商標)を用いたが、この例に限られることなく、他の任意のネットワーク構成であってもよい。
また、上記実施形態では、PC1とプリンタ3との間のインタフェースとして、USBインタフェースを用いたが、このインタフェースに限られることなく、例えば、Ethernet(登録商標)、無線LAN、IEEE1394、Bluetooth、IrDA、パラレル、シリアル等の任意のインタフェースを用いるようにしてもよい。
また、上記実施形態では、ネットワーク4を介して接続されたPC2(クライアント)上のアプリケーション30から、PC1(サーバ)を介してプリンタ3に搭載されているインク情報を取得する例を挙げて説明したが、この例に限られることなく、例えば、PC1のOSがマルチユーザをサポートし、各ユーザが自分の使用する言語を任意に設定でき、ユーザが設定した自分の使用する言語(例えば米語)がOSで設定されている言語(例えば日本語)とは異なる場合においても、PC1上のアプリケーションがPrinting and Print Spooler Interfacesを介してランゲージモニタ経由でプリンタに搭載されているインク情報を取得することができるので、このようなネットワークを介さない、USBインタフェースのようなローカルで接続された環境においても、実現可能であり、有効である。
以上のように、上記実施形態によれば、MMN社のようなサードパーティが、XYZ社製のプリンタ用のアプリケーション(ステータスモニタ)を開発してユーザに配布(販売)する場合等において、例えば、各言語に翻訳(ローカライズ)されたインクの名称の文字列を、XYZ社製のLMリソースに格納することで、前記アプリケーション上にXYZ社で定義された正しいインクの名称を含むインク情報を正確に表示することができる。従って、ユーザがインクの装着時や購入時等に混乱することを防止することができ、操作ミスや誤購入を防ぐことができる。また、ユーザの操作性を向上することができる。
また、新たに図18に示すLoadLibraryForMultiLanguage()関数を定義することで、ランゲージモニタの実装作業が容易になる。
さらに、スプーラが言語IDの属性を持つ印刷用のスレッドを作成して、このスレッドでランゲージモニタのSendRecvBidiDataFromPort()関数をコールするので、ランゲージモニタににおいて言語IDによって処理を切り換えるような特別な処理を実装する必要がなく、実装作業が容易になる。
次に、本発明の他の実施形態について説明する。
図2は、本実施形態に係る情報処理装置及び周辺装置からなる周辺装置制御システムのシステムの構成部分を表すブロック図である。同図において、70、71は情報処理装置であり、一般的なパーソナルコンピュータで構成される。PC70、PC71は図3に示すようなハードウェアで構成され、OS(Operating System)として米国マイクロソフト社のWindows (登録商標)XPがインストールされている。PC70とPC71はEthernet(登録商標)で構成されるネットワーク4を介して接続され、互いに双方向通信が可能である。3はプリンタであり、カラーインクジェットプリンタで構成され、周辺装置の一例として挙げている。プリンタ3はXYZ社製のkmmnというモデル名のプリンタである。尚、本発明に適用可能な周辺装置としては、プリンタ、複写機、ファクシミリ、またはこれらの複合機などの画像形成装置、スキャナ、デジタルカメラ等が挙げられる。
プリンタ3は図4に示すようなハードウェアで構成され、PC70とUSBインタフェース9を介して接続されており、互いに双方向通信が可能である。5はランゲージモニタ(以降、LMと略す場合がある)であり、Windows(登録商標)用のダイナミックリンクライブラリで構成される。45はアプリケーションであり、Windows(登録商標)用の実行可能形式のファイル(*.EXE)で構成される。アプリケーション45は図6で後述するようなステータスモニタである。アプリケーション(ステータスモニタ)45はMMN社製である。
8はアプリケーション用リソースファイル(以降、アプリケーションリソースと略す場合がある)であり、Windows(登録商標)用のダイナミックリンクライブラリで構成され、文字列リソース等が格納されている。本実施形態の周辺装置制御システムでは、PC70がサーバ、PC71がクライアントとなるような関係を持ち、PC70はプリンタ3を共有プリンタとしてネットワーク4を介して他の情報処理装置から印刷することができるようなプリントサーバの機能を備えている。今、PC70には日本語版のWindows(登録商標) XPが、PC71には米語(US English)版のWindows(登録商標) XPがインストールされているものとする。PC71はMSDNのサイトで公開されているPrinting and Print Spooler Interfacesを利用して、PC70内のLM5へデータ(情報)を送ったり、LM5からデータ(情報)を受け取ったりすることができる。これはWindows(登録商標) XPの公知の機能であるので、その詳細説明は省略する。
図6は米語版のOS環境下におけるプリンタの状態をモニタするステータスモニタを表す図である。同図のステータスモニタは、PC71にインストールされているアプリケーション45であり、今、PC71には米語(US English)版のWindows(登録商標) XPがインストールされているので、米語表示になっている。同図において、42はステータスモニタのメインウィンドウであり、プリンタ3(XYZ社製のkmmnというモデル名のプリンタ)の現在の状態を表している。43はインク情報(Ink Information)表示部であり、プリンタ3のインクの状態を表す。同図に示す通り、プリンタ3には黒(Black)、シアン(Cyan)、マゼンタ(Magenta)、黄(Yellow)の4色のColor(色)のインクが装着されており、それぞれのName(名称)がCI-B Black、CI-C Cyan、CI-M Magenta、CI-Y Yellow、State(状態)がFull(満タン)、Low(残りわずか)、Out(無し)、Full(満タン)であることを表している。44はプリンタ情報(Printer Information)表示部であり、プリンタがOnline(オンライン)の状態であることを表している。
図7はアプリケーションリソース8の格納先及び格納状態を表す図である。同図はPC2でWindows(登録商標) XP OSがC:\ドライブに、アプリケーション(ステータスモニタ)45がC:\Program Files\MMN\Status Monitor\にインストールされている例を表す。アプリケーションリソース8はWindows(登録商標)用のダイナミックリンクライブラリで構成され、APP_RES.DLLというファイルである。アプリケーション45はマルチ言語対応のドライバであるので、アプリケーションリソース8はサポートしている全言語分の文字列リソースを備えている。これらの各言語用の文字列リソースは、同図に示すように、それぞれの言語毎に別々に用意されているフォルダに同一ファイル名(APP_RES.DLL)でそれぞれ格納されている。例えば、日本語用のアプリケーションリソース8はC:\Program Files\MMN\Status Monitor\Res\のJPフォルダに、米語(US English)用のアプリケーションリソース8はUSフォルダに格納されている。
図11はアプリケーション(ステータスモニタ)45がプリンタ3からインクの情報及び状態を取得する時に使用するスキーマを表す図である。これらのスキーマは、アプリケーション45がPrinting and Print Spooler Interfacesを介してLM5経由でプリンタ3からインクの情報及び状態を取得する時に、Windows(登録商標) XP OSで使用できるCOMインタフェースIBidiSpl のAPI関数IBidiSpl::SendRecv()をコールする際に引数として指定される。
同図において、InkInfoはインクの情報を表すPropertyであり、スキーマのフルパスの指定は\Printer.InkInfoである。[Color]は色の情報を表すPropertyであり、スキーマのフルパスの指定は\Printer.InkInfo.[Color]、設定可能な値は、黒を表すBlack、シアンを表すCyan、マゼンタを表すMagenta、黄を表すYellowの何れかである。例えば、黒インクの情報を取得したい場合は、\Printer.InkInfo.Blackと指定する。Installedは[Color]色のインクが搭載されているか否かを表すValueであり、データ型はBoolean、スキーマのフルパスの指定は\Printer.InkInfo.[Color]:Installed、設定可能な値は、搭載されていること表すTrue、搭載されていないを表すFalseの何れかである。Stateは[Color]色のインクの残量の状態を表すValueであり、データ型はString、スキーマのフルパスの指定は\Printer.InkInfo.[Color]:State、設定可能な値は、インク満タンを表すFull、インク残りわずかを表すLow、インク無しを表すOut、インク残量不明を表すUnknownの何れかである。ModelNameは[Color]色のインクの型名を表すValueであり、データ型はString、スキーマのフルパスの指定は\Printer.InkInfo.[Color]:ModelNameである。設定可能な値の例は、同図のExamplesのようなASCIIの文字列である。Installed、State、ModelName等のValueはLM5またはプリンタ3からアプリケーション45へ返される値である。このように、同図で定義されているスキーマを使って、アプリケーション(ステータスモニタ)45はプリンタ3に搭載されているインクの情報及び状態を取得することができる。
図12は、図11で定義されているスキーマを使ってインクの情報及び状態を列挙(Enumeration)する時のスキーマ及び値を表す図である。同図において、アプリケーション(ステータスモニタ)45から\Printer.InkInfoのスキーマを指定してIBidiSpl::SendRecv()関数をコールすると(Query (Schema)欄)、プリンタ3の全インクの情報及び状態のスキーマ(Retrieve (Schema))と値(Retrieve (Value))がセットで返される。同図の例では、プリンタ3に黒、シアン、マゼンタ、黄のインクが搭載されていて、インクの残量の状態がそれぞれ、インク満タン(Full)、インク残りわずか(Low)、インク無し(Out)、インク満タン(Full)であり、インクの型名がそれぞれ、CI-B、CI-C、CI-M、CI-Yであることを表している。
図13は図11で定義されているスキーマを使ってインクの型名を取得(Get)する時のスキーマ及び値を表す図である。同図において、例えば、黒インクの型名を取得する場合、アプリケーション(ステータスモニタ)45から\Printer.InkInfo.Black:ModelNameのスキーマを指定してIBidiSpl::SendRecv()関数をコールすると(Query (Schema)欄)、プリンタ3に搭載されている黒インクの型名のスキーマ(Retrieve (Schema))として\Printer.InkInfo.Black:ModelNameと、値(Retrieve (Value))としてCI-Bがセットで返されていることがわかる。
図21はアプリケーションリソース8のIDと文字列のテーブルを表す図である。同図において、(A)の米語(US English)用アプリケーションリソース8では、ID1、ID2、ID3、ID4に対し、それぞれ、CI-B Black、CI-C Cyan、CI-M Magenta、CI-Y Yellow、がマッピングされている。(B)の日本語用アプリケーションリソース8では、ID1、ID2、ID3、ID4に対し、それぞれ、CI-B 黒、CI-C シアン、CI-M マゼンタ、CI-Y 黄、がマッピングされている。これらはプリンタ3用のXYZ社製のインクの名称であるが、プリンタ3の製造元XYZ社とは全く関係のないMMN社で適当に定めている名称であり、図22に示すXYZ社で定めている正式な名称とは異なっている。
以下、図25のフローチャートを用いて、本実施形態の動作について説明する。
図25はアプリケーション(ステータスモニタ)45がプリンタ3のインク情報を取得して図6のインク情報表示部43の表示を更新する処理を表すフローチャートである。
同図において、アプリケーション45がプリンタ3のインク情報を取得してインク情報表示部43の表示を更新する処理をスタートさせ(S2501)、アプリケーション45が図11で定義されている\Printer.InkInfoのスキーマを引数としてCOMインタフェースIBidiSpl のAPI関数IBidiSpl::SendRecv()をコールしてインク情報の取得を開始すると(S2502)、Printing and Print Spooler Interfacesを介して、LM5がエクスポートしているSendRecvBidiDataFromPort()関数がスプーラ(Windows(登録商標) XP OSの公知の機能の一部なので、図や詳細説明は省略)からコールされて、この関数における処理が開始される(S2503)。
LM5のSendRecvBidiDataFromPort()関数内において、図23に示すように、PC70から要求コマンドを発行してプリンタ3から返されるインク情報を取得し(S2504)、この取得したインク情報をSendRecvBidiDataFromPort()関数の引数として指定されている\Printer.InkInfoのスキーマの定義に従って変換し(S2505)、SendRecvBidiDataFromPort()関数の引数として図12に示すようなスキーマの定義に変換されたインク情報を返し、LM5のSendRecvBidiDataFromPort()関数の処理を終了する(S2506)。
アプリケーション45において、IBidiSpl::SendRecv()関数がリターンされ、引数として図12に示すようなスキーマの定義で返されたインク情報を取得し(S2507)、Windows(登録商標) XP OSで使用できるAPI関数GetUserDefaultLangID()をコールして言語ID(unsigned short型)を確認し(S2508)、PC71には米語(US English)版のWindows(登録商標) XPがインストールされているので、ステップS2508では言語IDが米語の言語IDを表す1033であることが確認され、Windows(登録商標) XP OSで使用できるAPI関数LoadLibrary()でロードされたアプリケーションリソース8から、前記言語IDをもとに図21の(A)に示すIDと文字列のテーブルを使って文字列リソースを取得し(S2509)、この文字列リソースを使って図6のインク情報表示部43の情報を更新し(S2510)、アプリケーション45がプリンタ3のインク情報を取得してインク情報表示部43の表示を更新する処理を終了する(S2511)。
通常、アプリケーション45は、ステップS2501からスタートするプリンタ3のインク情報を取得してインク情報表示部43の表示を更新する処理を、例えば5秒に1回等、ある一定時間の間隔で繰り返すことで、プリンタ3に搭載されているインクの情報及び状態をインク情報表示部43にリアルタイムに表示することができる。ステップS2510においてインク情報表示部43のName(名称)を更新する場合、ステップS2507において図11で定義されたスキーマのModelName(\Printer.InkInfo.[Color]:ModelName)で返された値から、ステップS2509において該当するインクの名称の文字列の図21に示すID(ID1、ID2、ID3、ID4)を定め、そのIDにマッピングされている文字列を取得し、この文字列を使ってステップS2510においてインク情報表示部43の情報を更新する。
図30はアプリケーション(ステータスモニタ)45における言語IDを確認して文字列リソースを取得する一連の処理のサンプルプログラムを表す図である。同図は、コメントに記述してある通り、図25の各ステップの一部に相当する処理を実装する際のプログラムの一例である。各処理に関しては、Windows(登録商標) XP OSで使用できるAPI関数やC言語の標準関数であるので、ここではその説明を省略する。
また、本発明の目的は、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体を、システム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU)が記憶媒体に格納されたプログラムコードを読み出し実行することによっても、達成されることは言うまでもない。
この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、プログラムコード自体及びそのプログラムコードを記憶した記憶媒体は本発明を構成することになる。
プログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、CD−ROM、CD−R、磁気テープ、不揮発性のメモリカード、ROM等を用いることができる。
また、コンピュータが読み出したプログラムコードを実行することにより、前述した実施形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼動しているOS(基本システム或いはオペレーティングシステム)などが実際の処理の一部又は全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPU等が実際の処理の一部又は全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
本発明の実施形態では、アプリケーション30の一例としてステータスモニタを挙げたが、この例に限られることなく、例えば周辺装置から情報を取得して、それを利用するような任意のアプリケーションで実現可能であり、有効である。
本発明の実施形態では、アプリケーション(ステータスモニタ)30でプリンタ3に搭載されているインクの情報及び状態をモニタする例を説明したが、この例に限られることなく、例えば、周辺装置の動作状態や、警告、エラーの状態、オプションの装着状態等の任意の情報や状態の取得に有効活用できる。
本発明の実施形態では、図20に示すようにUPnPを利用して実現しているが、これに限られることなく、同様な機能を備えるプロトコル等を利用して、実現することができる。また、実現するにあたっては、標準化された規格を利用することで、より汎用的なシステムを容易に実現することができる。
本発明の実施形態では、プリンタの例としてカラーインクジェットプリンタを使用したが、この例に限られることなく、例えば、モノクロLBP等の任意のプリンタを使用することができる。
本発明の実施形態では、クライアントやサーバとしてパーソナルコンピュータを想定したが、この例に限られることなく、例えばDVDビデオプレーヤー、ゲーム、セットトップボックス、インターネット家電等、同様な使用方法が可能な任意の端末に対して実現することができ、有効である。
本発明の実施形態では、周辺装置としてプリンタを例示しているが、周辺装置として他に、複写機、ファクシミリ、スキャナ、デジタルカメラ、およびこれらの複合機能を備える装置などのいずれかが、本発明の適用対象となり得る。
本発明の実施形態では、OSに例としてWindows(登録商標) XPを使用したが、これらのOSに限られることなく、任意のOSを使用することができる。
本発明の実施形態では、ネットワーク4の構成例としてEthernet(登録商標)を用いたが、この例に限られることなく、他の任意のネットワーク構成であってもよい。
本発明の実施形態では、PC1とプリンタ3との間のインタフェースとして、USBインタフェースを用いたが、このインタフェースに限られることなく、例えば、Ethernet(登録商標)、無線LAN、IEEE1394、Bluetooth、IrDA、パラレル、シリアル等の任意のインタフェースを用いるようにしてもよい。
本発明の実施形態では、ネットワーク4を介して接続されたPC2(クライアント)上のアプリケーション30から、PC1(サーバ)を介してプリンタ3に搭載されているインク情報を取得する例を挙げて説明したが、この例に限られることなく、例えば、PC1のOSがマルチユーザをサポートし、各ユーザが自分の使用する言語を任意に設定でき、ユーザが設定した自分の使用する言語(例えば米語)がOSで設定されている言語(例えば日本語)とは異なる場合においても、PC1上のアプリケーションがPrinting and Print Spooler Interfacesを介してランゲージモニタ経由でプリンタに搭載されているインク情報を取得することができるので、このようなネットワークを介さない、USBインタフェースのようなローカルで接続された環境においても、実現可能であり、有効である。