(57)【要約】【課題】プリンタの製造元と配布された表示プログラムの製造元が異なる場合であっても、プリンタに搭載されるインク名称等を上記表示プログラムに適応する情報、例えば、表示プログラムが使用する言語情報等、又は、プリンタ製造元が定義する情報を使って正確に表示可能とする。【解決手段】ＰＣ１は、ＰＣ２から、ＰＣ２に設定されている表示プログラムの表示形式を示す情報とステータスの種別を示す情報とがともに指定された要求を受信し、要求に含まれるステータスの種別を示す情報に基づき、当該種別に対応するステータスの値をプリンタ３から取得する。ＰＣ１は、要求に含まれる表示プログラムの表示形式を示す情報に対応するリソース情報を取得し、受信した要求の応答として、リソース情報と種別に対応するステータスの値とに従うステータス情報を、ＰＣ２に対して送信する。【選択図】図１
2011023019.tif 000002
【特許請求の範囲】
【請求項１】
外部装置と通信ネットワークを介して接続される情報処理装置であって、
他の情報処理装置から、当該他の情報処理装置に設定されている表示プログラムの表示形式を示す情報とステータスの種別を示す情報とがともに指定された要求を受信する受信手段と、
前記要求に含まれるステータスの種別を示す情報に基づき、当該種別に対応するステータスの値を前記外部装置から取得するステータス取得手段と、
前記要求に含まれる表示プログラムの表示形式を示す情報に対応するリソース情報を取得するリソース取得手段と、
前記受信手段で受信した要求の応答として、前記リソース取得手段により取得されたリソース情報と前記種別に対応するステータスの値とに従うステータス情報を、前記他の情報処理装置に対して送信する送信手段とを有することを特徴とする情報処理装置。
【請求項２】
表示プログラムの表示形式を示す情報毎にリソース情報を保持する保持手段を更に有することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記表示プログラムの表示形式を示す情報は、前記表示プログラムの言語属性識別情報であることを特徴とする請求項１又は２に記載の情報処理装置。
【請求項４】
前記リソース取得手段により前記表示プログラムの表示形式を示す情報に対応するリソース情報が取得できない場合、前記表示プログラムの表示形式を示す情報と類似する情報に対応するリソース情報を取得することを特徴とする請求項１に記載の情報処理装置。
【請求項５】
外部装置と通信ネットワークを介して接続される情報処理装置による情報処理方法であって、
他の情報処理装置から、当該他の情報処理装置に設定されている表示プログラムの表示形式を示す情報とステータスの種別を示す情報とがともに指定された要求を受信する受信ステップと、
前記要求に含まれるステータスの種別を示す情報に基づき、当該種別に対応するステータスの値を前記外部装置から取得するステータス取得ステップと、
前記要求に含まれる表示プログラムの表示形式を示す情報に対応するリソース情報を取得するリソース取得ステップと、
前記受信ステップで受信した要求の応答として、前記リソース取得ステップにより取得されたリソース情報と前記種別に対応するステータスの値とに従うステータス情報を、前記他の情報処理装置に対して送信する送信ステップとを含むことを特徴とする情報処理方法。
【請求項６】
外部装置と通信ネットワークを介して接続される情報処理装置による情報処理方法をコンピュータに実行させるためのプログラムであって、
他の情報処理装置から、当該他の情報処理装置に設定されている表示プログラムの表示形式を示す情報とステータスの種別を示す情報とがともに指定された要求を受信する受信ステップと、
前記要求に含まれるステータスの種別を示す情報に基づき、当該種別に対応するステータスの値を前記外部装置から取得するステータス取得ステップと、
前記要求に含まれる表示プログラムの表示形式を示す情報に対応するリソース情報を取得するリソース取得ステップと、
前記受信ステップで受信した要求の応答として、前記リソース取得ステップにより取得されたリソース情報と前記種別に対応するステータスの値とに従うステータス情報を、前記他の情報処理装置に対して送信する送信ステップとをコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワークを介して周辺装置に対する制御が可能な技術に関する。
【背景技術】
【０００２】
近年、ネットワークの基盤が整備されるに従い、ネットワーク対応型のインクジェットプリンタ、レーザビームプリンタ、複写機、ファクシミリ、スキャナ、デジタルカメラ、およびこれらの複合機能を備える画像処理装置等の周辺装置が急速に普及しつつある。これに伴い、これらの周辺装置の製造元とは全く関係の無いサードパーティから、これらの周辺装置を制御したり、状態をモニタしたりするような前記サードパーティ製のアプリケーションが、ユーザに配布（販売）されるようになってきている。
【０００３】
例えば、特許文献１には、周辺装置であるプリンタ用のインク情報をネットワークを介して当該プリンタと接続される情報処理装置内の表示プログラム（ユーザインタフェースを提供するドライバプログラム又はステータスモニタ）でリアルタイムに表示できるものが開示されている。一方で、Universal Plug and Play やWeb Seiviceの実装においては、プレゼンテーションの定義を含む形で、ステータス情報（インク種別、周辺装置のエラー等を含む）を表示プログラムやドライバが、ランゲージモニタやプリンタと授受する仕組みが提供されつつある。例えば、テキストベースの情報で、ステータス情報と、そのステータス情報をどのように表示するかを定義したプレゼンテーション情報とを、併せてランゲージモニタやプリンタからステータスモニタ等へ送信することが増えてきている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平０９−１５２９４６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上述の所定のプレゼンテーションの定義を含む形式のメッセージを用いて、ステータスをやり取りする状況においては、受け取ったメッセージをプレゼンテーションの定義を用いてそのまま表示プログラムにて表示すると問題が生ずる場合がある。例えば、アプリケーション（ステータスモニタ又はユーザインタフェースを提供するドライバ）の製造元がMMN社で、MMN社はプリンタの製造元XYZ社とは全く関係のないサードパーティであり、MMN社がXYZ社からプリンタ用のインクの正確な名称を入手することが困難であったり、不可能であったりする為に、表示されるプリンタ用のインクの名称が、プリンタの製造元XYZ社とは全く関係のないMMN社で適当に定めている名称となってしまい、XYZ社で定めている正式な名称とは異なるケースが発生し、ユーザがインクの装着時や購入時等に混乱するという問題があった。
【０００６】
また、表示プログラムが使用する言語が日本語であった場合に、英語にてインク名称が返却された場合に、表示プログラムには日本語で表示したいにもかかわらず、英語でインク名称が表示されてしまうこともあった。なお、上述のインク名称はあくまでも表示プログラムが取り扱う情報の一例であり、特に断り書きが無い限り、インクジェットプリンタに限定されるものでなく、他の周辺装置のエラー情報等、あらゆる表示可能ステータス及びエラー情報が含まれるものとする。
【０００７】
本発明は、上述の問題点の少なくともひとつを除去するためになされたたものであり、その目的とするところは、例えば、プリンタの製造元と配布された表示プログラムの製造元が異なる場合であっても、プリンタに搭載されるインク名称等を上記表示プログラムに適応する情報、例えば、表示プログラムが使用する言語情報等、又は、プリンタ製造元が定義する情報を使って正確に表示可能とすることにある。
【課題を解決するための手段】
【０００８】
本発明の情報処理装置は、外部装置と通信ネットワークを介して接続される情報処理装置であって、他の情報処理装置から、当該他の情報処理装置に設定されている表示プログラムの表示形式を示す情報とステータスの種別を示す情報とがともに指定された要求を受信する受信手段と、前記要求に含まれるステータスの種別を示す情報に基づき、当該種別に対応するステータスの値を前記外部装置から取得するステータス取得手段と、前記要求に含まれる表示プログラムの表示形式を示す情報に対応するリソース情報を取得するリソース取得手段と、前記受信手段で受信した要求の応答として、前記リソース取得手段により取得されたリソース情報と前記種別に対応するステータスの値とに従うステータス情報を、前記他の情報処理装置に対して送信する送信手段とを有することを特徴とする。
【発明の効果】
【０００９】
本発明によれば、外部装置の製造元と上記表示プログラムの製造元が異なる場合であっても、外部装置に係る情報（例えば、プリンタに搭載されるインク名称）を上記表示プログラムに適応する情報（例えば、アプリケーションが使用する言語情報等、又は、プリンタ製造元が定義する情報を使って正確に表示することなどが可能となる。
【図面の簡単な説明】
【００１０】
【図１】本発明の第１の実施形態に係る情報処理装置（ＰＣ）及び周辺装置からなる周辺装置制御システムの構成を示すブロック図である。
【図２】本発明の第３の実施形態に係る情報処理装置（ＰＣ）及び周辺装置からなる周辺装置制御システムの構成を示すブロック図である。
【図３】ＰＣのハードウェア構成を示す図である。
【図４】プリンタのハードウェア構成を示す図である。
【図５】ＰＣにおけるプリンタドライバの構成を示すブロック図である。
【図６】米語版のＯＳ環境下におけるプリンタの状態をモニタするステータスモニタを表す図である。
【図７】アプリケーションリソースの格納先及び格納状態を表す図である。
【図８】米語版のＯＳ環境下におけるプリンタの状態をモニタするステータスモニタを表す図である。
【図９】日本語版のＯＳ環境下におけるプリンタの状態をモニタするステータスモニタを表す図である。
【図１０】ＬＭリソースの格納先及び格納状態を表す図である。
【図１１】アプリケーション（ステータスモニタ）がプリンタからインクの情報及び状態を取得する時に使用するスキーマを表す図である。
【図１２】図１１で定義されているスキーマを使ってインクの情報及び状態を列挙（Enumeration）する時のスキーマ及び値を表す図である。
【図１３】図１１で定義されているスキーマを使ってインクの型名を取得（Get）する時のスキーマ及び値を表す図である。
【図１４】アプリケーション（ステータスモニタ）がプリンタからインクの情報及び状態を取得する時に使用するスキーマを表す図である。
【図１５】アプリケーション（ステータスモニタ）がプリンタからインクの情報及び状態を取得する時に使用するスキーマを表す図である。
【図１６】図１４、図１５で定義されているスキーマを使ってインクの情報及び状態を列挙（Enumeration）する時のスキーマ及び値を表す図である。
【図１７】図１４、図１５で定義されているスキーマを使ってインクの名称を取得（Get）する時のスキーマ及び値を表す図である。
【図１８】本発明の一実施形態を実現する為に新たに定義する関数の仕様を表す図である。
【図１９】本発明の第２の実施形態に係る情報処理装置（ＰＣ）及び周辺装置からなる周辺装置制御システムの構成を表すブロック図である。
【図２０】ＰＣがサポートしているＵＰｎＰデバイスのXML Device Descriptionの記述内容を表す図である。
【図２１】アプリケーションリソースのＩＤと文字列のテーブルを表す図である。
【図２２】ＬＭリソースのＩＤと文字列のテーブルを表す図である。
【図２３】ＰＣがプリンタからインク情報を取得する時のデータを表す図である。
【図２４】ＰＣがプリンタからインク情報を取得する時のデータを表す図である。
【図２５】アプリケーション（ステータスモニタ）がプリンタのインク情報を取得して図６のインク情報表示部の表示を更新する処理を表すフローチャートである。
【図２６】アプリケーション（ステータスモニタ）がプリンタのインク情報を取得して図８のインク情報表示部の表示を更新する処理を表すフローチャートである。
【図２７】文字列リソースの検索と取得の処理を表すフローチャートである。
【図２８】文字列リソース自動取得の処理を表すフローチャートである。
【図２９】アプリケーション（ステータスモニタ）がプリンタのインク情報を取得して図８のインク情報表示部の表示を更新する処理を表すフローチャートである。
【図３０】アプリケーション（ステータスモニタ）における言語ＩＤを確認して文字列リソースを取得する一連の処理のサンプルプログラムを表す図である。
【図３１】ＬＭがエクスポートしているSendRecvBidiDataFromPort()関数における言語ＩＤを確認して文字列リソースを取得する一連の処理のサンプルプログラムを表す図である。
【図３２】ＬＭがエクスポートしているSendRecvBidiDataFromPort()関数における言語ＩＤを確認して文字列リソースを取得する一連の処理のサンプルプログラムを表す図である。
【図３３】ＬＭがエクスポートしているSendRecvBidiDataFromPort()関数における文字列リソースを取得する一連の処理のサンプルプログラムを表す図である。
【図３４】アプリケーション（ステータスモニタ）がプリンタ３からインクの情報及び状態を取得する時に使用するスキーマを表す図である。
【図３５】図３４で定義されているスキーマを使ってインクの情報及び状態を列挙（Enumeration）する時のスキーマ及び値を表す図である。
【図３６】図１４で定義されているスキーマを使ってインクの型名を取得（Get）する時のスキーマ及び値を表す図である。
【図３７】周辺装置制御システムで読み出し可能な各種データ処理プログラムを格納する記憶媒体のメモリマップを示す図である。
【発明を実施するための形態】
【００１１】
以下、本発明を適用した好適な実施形態を、添付図面を参照しながら説明する。
【００１２】
以下の説明で引用される関数（情報）の内、特に詳しい説明を付加していないものに関しては、２００４年７月１５日現在、Microsoft Developer Network (MSDN)のサイトhttp://msdn.microsoft.com/library/default.aspでインターネット上で公開されている関数（情報）であるので、必要以上の説明を省略する。
【００１３】
また以下において、ＵＳＢとはUniversal Serial Busの略であり、双方向通信が可能な公知のインタフェースであるので、その詳細説明は省略する。また以下において、ＵＰｎＰUniversal Plug and Playの略であり、その仕様の詳細については、UPnP Forumによって標準化されているUniversal Plug and Play Device Architecture V 1.0の規格に記載されているので、ここでは本発明に関連する部分のみ説明し、それ以外の部分に関する説明は省略する。
【００１４】
＜第１の実施の形態＞
図１は、本発明の第１の実施形態に係る情報処理装置及び周辺装置からなる周辺装置制御システムの構成を示すブロック図である。
同図において、１、２は情報処理装置であり、一般的なパーソナルコンピュータ（以下、ＰＣと略す場合がある）で構成される。ＰＣ１、ＰＣ２は図３で後述するようなハードウェアで構成され、ＯＳ（Operating System）として米国マイクロソフト社のWindows （登録商標）XPがインストールされている。ＰＣ１とＰＣ２はＥｔｈｅｒｎｅｔ（登録商標）で構成されるネットワーク４を介して接続され、互いに双方向通信が可能である。３はプリンタであり、カラーインクジェットプリンタで構成され、本実施形態における周辺装置である。プリンタ３はXYZ社製のkmmnというモデル名のプリンタである。尚、本発明における周辺装置としては、プリンタ、複写機、ファクシミリ、またはこれらの複合機などの画像形成装置、スキャナ、デジタルカメラであってもよい。
【００１５】
プリンタ３は図４で後述するようなハードウェアで構成され、ＰＣ１とＵＳＢインタフェース９を介して接続されており、互いに双方向通信が可能である。３６は図５で後述するランゲージモニタ（以降、ＬＭと略す場合がある）であり、Windows（登録商標）用のダイナミックリンクライブラリで構成される。６はランゲージモニタ用リソースファイル（以降、ＬＭリソースと略す場合がある）であり、Windows（登録商標）用のダイナミックリンクライブラリで構成され、文字列リソース等が格納されている。表示プログラムの一例である３０はアプリケーションであり、Windows（登録商標）用の実行可能形式のファイル（*.EXE）で構成される。アプリケーションの一例としては、アプリケーション３０は図８で後述するようなステータスモニタが挙げられる。また、表示プログラムは、ユーザインタフェースを提供するデバイスドライバプログラムの一部であってもよい。
【００１６】
アプリケーション（ステータスモニタ）３０はMMN社製である。本実施形態の周辺装置制御システムでは、ＰＣ１がサーバ、ＰＣ２がクライアントとなるような関係を持ち、ＰＣ１はプリンタ３を共有プリンタとしてネットワーク４を介して他の情報処理装置から印刷することができるようなプリントサーバの機能を備えている。今、ＰＣ１には日本語版のWindows（登録商標） XPが、ＰＣ２には米語（US English）版のWindows（登録商標） XPがインストールされているものとする。ＰＣ２は前記MSDNのサイトで公開されているPrinting and Print Spooler Interfacesを利用して、ＰＣ１内のＬＭ３６へデータ（情報）を送ったり、ＬＭ３６からデータ（情報）を受け取ったりすることができる。これはWindows（登録商標） XPの公知の機能であるので、その詳細説明は省略する。
【００１７】
図３はＰＣのハードウェア構成の一例を表すブロック図である。ＰＣ１及びＰＣ２、並びに後述のＰＣ７０及びＰＣ７１は何れも同図に示すようなハードウェア構成を持つが、ここではＰＣ１を例にして説明する。ＰＣ１はランダムアクセスメモリ部（ＲＡＭ１２０１）、記憶部であるハードディスクドライブ部（ＨＤＤ１２０２）、入力部の一例であるキーボード部（ＫＢＤ１２０３）、制御部のＣＰＵ１２０４、表示部の一例である表示用ディスプレイ（ＬＣＤ１２０５）、通信制御部の一例であるネットワークボード（ＮＢ１２０７）、以上のＰＣ１の構成要素を互いに接続するバス１２０６から構成される。なお、記憶部は、可搬性ＣＤ−ＲＯＭまたは内部据付のＲＯＭなどであってもよい。図１に示すＰＣ１の各モジュール（ＬＭ３６、ＬＭリソース６）は、ＨＤＤ１２０２に記憶され、必要に応じてＲＡＭ１２０１に読み出されてＣＰＵ１２０４により実行される。これにより、ＣＰＵ１２０４が、図１に示す各モジュールの機能を実現する。
【００１８】
図４はプリンタのハードウェア構成を表すブロック図である。プリンタ３は同図に示すようなハードウェア構成を持つ。同図において、１５はマイクロプロセッサ等から構成されるＣＰＵであり、プリンタ３の中央処理装置として、ＲＯＭ１６に記憶されているプログラムに従って、ＲＡＭ１７、通信部１８、記録部１９を制御する。
【００１９】
ＲＯＭ１６にはプリンタドライバ５０（図５で後述する）の制御に従ってプリンタ３が記録（印刷）処理や、状態をＰＣ１へ伝える処理を行うプログラムが記憶されている。
【００２０】
ＲＡＭ１７は主にＰＣ１から送られて、それをもとに記録部１９によって印刷される印字データが一時的に記憶される。通信部１８にはＵＳＢインタフェース９用の接続ポートが含まれており、ＵＳＢの通信を制御する。記録部１９は、インクジェット方式の記録ヘッド、各カラーインク、キャリッジ、記録紙搬送機構等から構成される記録ユニットと、前記印字データをもとに前記記録ヘッドにて印字用パルスを発生させる為のＡＳＩＣ等から構成される電気回路とから構成される。印刷可能なアプリケーション上での印刷操作によって、アプリケーションで開かれているファイルの表示内容（画像データ）が、ＥＭＦ形式のスプールファイルとしてＰＣ１のＨＤＤ１２０２に一時的に格納され、プリンタドライバ５０を介してプリンタ３制御用コマンドを含む印字データに変換された後、ＵＳＢインタフェース９を介してプリンタ３に送られる。プリンタ３にて受信された印字データは、記録部１９によって印字用パルスに変換されて、記録紙上に印刷される。
【００２１】
図５はＰＣ１におけるプリンタドライバの構成を表すブロック図である。同図において、プリンタドライバ５０はＰＣ１にインストールされているドライバであり、３２〜３８で示す複数のモジュールを備えている。アプリケーション３０は印刷指令やプリンタの状態表示が可能なアプリケーションソフトウェアであり、例えば、Windows（登録商標） XP ＯＳ に標準で同梱されているテキストエディタであるNotepad（Notepad.exe）等に相当する。尚、本実施形態では、アプリケーション３０は図８で後述するようなステータスモニタである。３１はＧＤＩ（Graphics Device Interface）であり、Windows（登録商標） XP ＯＳの一部である。３２はプリンタキューで、Windows（登録商標） XP ＯＳのSpoolerの一部であり、印刷ジョブをキューイングする。次にプリンタドライバ５０の構成を説明する。３３はプリントプロセッサであり、印刷レイアウトの変更や印刷画像の特殊処理を行う。３４はグラフィックスドライバで、プリンタドライバ５０の画像処理のコアとして動作し、ＧＤＩ３１から送られて来る描画命令に基づき印刷用の画像処理を行い、印刷制御コマンドを作成する。３５はＵＩモジュールで、プリンタドライバ５０のユーザインタフェースの提供及び制御を行う。３６はランゲージモニタで、データの通信Ｉ／Ｆとしてデータの送受信を制御する。３７はポートモニタであり、ＬＭ３６から送られてくるデータを適切なポートに対して送信したり、プリンタ３から送られてくるデータを、クラスドライバ３８を介して受信したりする。クラスドライバ３８は、最もポートに近いローレベルのモジュールであり、本発明ではＵＳＢのプリンタクラスのドライバに相当し、ポート（本発明ではＵＳＢポート）を制御する。プリンタドライバ５０はマルチ言語対応のドライバであるので、マルチ言語対応のＯＳであるWindows（登録商標） XPがサポートしている全ての言語に対応しており、これら全ての言語用の文字列リソース等を備えている。
【００２２】
尚、ＰＣ１に日本語版のWindows（登録商標） XPがインストールされているので、日本語版ＯＳ上におけるプリンタドライバ５０の仕様により、ＰＣ１上のプリンタドライバ５０は日本語と米語（US English）をサポートしている。また、プリンタドライバ５０はプリンタ３の製造元であるXYZ社製のものである。
【００２３】
図８は米語版のＯＳ環境下におけるプリンタの状態をモニタするステータスモニタを表す図である。同図のステータスモニタは、ＰＣ２にインストールされているアプリケーション３０であり、今、ＰＣ２には米語（US English）版のWindows（登録商標） XPがインストールされているので、米語表示になっている。同図において、４６はステータスモニタのメインウィンドウであり、プリンタ３（XYZ社製のkmmnというモデル名のプリンタ）の現在の状態を表している。４７はインク情報（Ink Information）表示部であり、プリンタ３のインクの状態を表す。同図に示す通り、プリンタ３には黒（Black）、シアン（Cyan）、マゼンタ（Magenta）、黄（Yellow）の４色のColor（色）のインクが装着されており、それぞれのName（名称）がCI-B Black Ink、CI-C Cyan Ink、CI-M Magenta Ink、CI-Y Yellow Ink、State（状態）がFull（満タン）、Low（残りわずか）、Out（無し）、Full（満タン）であることを表している。４８はプリンタ情報（Printer Information）表示部であり、プリンタがOnline（オンライン）の状態であることを表している。
【００２４】
図１０はＬＭリソース６の格納先及び格納状態を表す図である。同図はＰＣ１でWindows（登録商標） XP ＯＳがC:\ドライブにインストールされている例を表す。ＬＭリソース６はWindows（登録商標）用のダイナミックリンクライブラリで構成され、LM_RES.DLLというファイルである。図５で前述したように、プリンタドライバ５０はマルチ言語対応のドライバであるので、ＬＭリソース６はサポートしている全言語分の文字列リソースを備えている。これらの各言語用の文字列リソースは、同図に示すように、それぞれの各言語毎に別々に用意されているフォルダに同一ファイル名（LM_RES.DLL）でそれぞれ格納されている。例えば、日本語用のＬＭリソース６はC:\WINDOWS\system32\spool\drivers\w32x86\3\のＪＰフォルダに、米語（US English）用のＬＭリソース６はＵＳフォルダに格納されている。
【００２５】
図１４、図１５はアプリケーション（ステータスモニタ）３０がプリンタ３からインクの情報及び状態を取得する時に使用するスキーマを表す図である。これらのスキーマは、アプリケーション３０がPrinting and Print Spooler Interfacesを介してＬＭ３６経由でプリンタ３からインクの情報及び状態を取得する時に、Windows（登録商標） XP ＯＳで使用できるＣＯＭインタフェースIBidiSpl のＡＰＩ関数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]色のインクの名称を表すPropertyであり、スキーマのフルパスの指定は、\Printer.InkInfo.[Color].DisplayNameである。Languageは言語ＩＤを表すPropertyであり、スキーマのフルパスの指定は、\Printer.InkInfo.[Color].DisplayName.[Language]、設定可能な値は、Windows（登録商標） XP ＯＳで使用できるＡＰＩ関数GetUserDefaultLangID()等をコールして取得した言語ＩＤ（unsigned short型）を文字列（char *）に変換した文字列、例えば、米語（US English）を表す1033、日本語を表す1041等や、アプリケーション３０から言語ＩＤを指定せずＬＭ３６またはプリンタ３に最適な言語を自動選択させる時に指定するAutoの何れかである。Nameはある言語に翻訳（ローカライズ）された[Color]色のインクの名称を表すValueであり、データ型はUnicode string、スキーマのフルパスの指定は\Printer.InkInfo.[Color].DisplayName:Nameである。設定可能な値の例は、同図のExamplesのようなUnicodeの文字列である。
【００２８】
図１４、図１５において、Installed、State、Name等のValueはＬＭ３６またはプリンタ３からアプリケーション３０へ返される値である。このように、図１４、図１５で定義されているスキーマを使って、アプリケーション（ステータスモニタ）３０はプリンタ３に搭載されているインクの情報及び状態を取得することができる。
【００２９】
図１６は図１４、図１５で定義されているスキーマを使ってインクの情報及び状態を列挙（Enumeration）する時のスキーマ及び値を表す図である。同図において、アプリケーション（ステータスモニタ）３０から\Printer.InkInfoのスキーマを指定してIBidiSpl::SendRecv()関数をコールすると（Query (Schema)欄）、プリンタ３の全インクの情報及び状態のスキーマ（Retrieve (Schema)）と値（Retrieve (Value)）がセットで返される。同図の例では、プリンタ３に黒、シアン、マゼンタ、黄のインクが搭載されていて、インクの残量の状態がそれぞれ、インク満タン（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 黄 インク"であることを表している。
【００３０】
図１７は、図１４、図１５で定義されているスキーマを使ってインクの名称を取得（Get）する時のスキーマ及び値を表す図である。同図において、例えば、黒インクの米語（US English）の名称を取得する場合、アプリケーション（ステータスモニタ）３０から\Printer.InkInfo.Black.DisplayName.1033:Nameのスキーマを指定してIBidiSpl::SendRecv()関数をコールすると（Query (Schema)欄）、プリンタ３に搭載されている黒インクの名称のスキーマ（Retrieve (Schema)）として\Printer.InkInfo.Black.DisplayName.1033:Nameと、値（Retrieve (Value)）として"CI-B Black Ink"がセットで返されていることがわかる。
【００３１】
例えば、シアンインクの日本語の名称を取得する場合、アプリケーション（ステータスモニタ）３０から\Printer.InkInfo.Cyan.DisplayName.1041:Nameのスキーマを指定してIBidiSpl::SendRecv()関数をコールすると（Query (Schema)欄）、プリンタ３に搭載されているシアンインクの名称のスキーマ（Retrieve (Schema)）として\Printer.InkInfo.Cyan.DisplayName.1041:Nameと、値（Retrieve (Value)）として"CI-C シアン インク"がセットで返されていることがわかる。
【００３２】
例えば、最適な言語の自動選択を指定して黄インクの名称を取得する場合、アプリケーション（ステータスモニタ）３０から\Printer.InkInfo.Yellow.DisplayName.Auto:Nameのスキーマを指定してIBidiSpl::SendRecv()関数をコールすると（Query (Schema)欄）、プリンタ３に搭載されている黄インクの名称のスキーマ（Retrieve (Schema)）として\Printer.InkInfo.Yellow.DisplayName.Auto:Nameと、値（Retrieve (Value)）として"CI-Y Yellow Ink"がセットで返されていることがわかる。
【００３３】
図１８は、本実施形態を実現する為に新たに定義する関数の仕様を表す図である。現時点において、このような関数はWindows（登録商標） XP ＯＳで使用できるＡＰＩ関数としては存在しない。Windows（登録商標） XP ＯＳで使用できるＡＰＩ関数LoadLibrary()の仕様が、
HMODULE 
LoadLibrary(
LPCTSTR lpFileName
);
であるのに対し、新たに定義する関数では、言語ＩＤを指定する引数LANGID languageIdが追加されている。LoadLibraryForMultiLanguage()関数は、languageIdで指定された言語ＩＤに該当する、lpFileNameで指定されたファイル名のリソースファイル（モジュール）をロードし、そのモジュールのハンドルを返す、という仕様である。例えば、ＬＭ３６がこの関数を使ってＬＭリソース６をロードする場合、
LoadLibraryForMultiLanguage("LM_RES.DLL", languageId);
とコールすると、ＯＳが、図１０に示す各言語毎に別々に用意されているフォルダに格納されているLM_RES.DLLファイルの中から、languageIdで指定された言語ＩＤに該当するフォルダ内のLM_RES.DLLファイルをロードし、そのモジュールのハンドルが返される。
【００３４】
図２２はＬＭリソース６のＩＤと文字列のテーブルを表す図である。同図において、（Ａ）の米語（US English）用ＬＭリソース６では、ID1、ID2、ID3、ID4に対し、それぞれ、CI-B Black Ink、CI-C Cyan Ink、CI-M Magenta Ink、CI-Y Yellow Inkが、マッピングされている。（Ｂ）の日本語用ＬＭリソース６では、ID1、ID2、ID3、ID4に対し、それぞれ、CI-B 黒 インク、CI-C シアン インク、CI-M マゼンタ インク、CI-Y 黄 インク、がマッピングされている。これらはプリンタ３用のXYZ社製のインクの名称であり、プリンタ３及びインクの製造元であるXYZ社で定めている正式な名称である。
【００３５】
図２３はＰＣ１（ＰＣ７０）がプリンタ３からインク情報を取得する時のデータを表す図である。実際にＰＣ１（ＰＣ７０）とプリンタ３との間で送受信されるデータはバイナリデータであるが、同図では理解しやすくすることを考えて、ASCII文字コードでエンコードした後のテキストデータとして表している。同図において、ＰＣ１（ＰＣ７０）が要求コマンドをプリンタ３にＵＳＢインタフェース９を介して発行すると、インク情報がプリンタ３からＰＣ１（ＰＣ７０）にＵＳＢインタフェース９を介して返される。このインク情報は次の内容を表している。
＜色＞ ＜型名＞ ＜状態＞
黒     CI-B     満タン
シアン   CI-C   残りわずか
マゼンタ CI-M     無し
黄     CI-Y     満タン
【００３６】
以下、図２６〜図２８のフローチャートを用いて、本実施形態の動作について説明する。
図２６はアプリケーション（ステータスモニタ）３０がプリンタ３のインク情報を取得して図８のインク情報表示部４７の表示を更新する処理を表すフローチャートである。以下では、黒インクの情報を取得してインク情報表示部４７の表示を更新する例を挙げて説明する。
【００３７】
同図において、アプリケーション３０がプリンタ３のインク情報を取得してインク情報表示部４７の表示を更新する処理をスタートさせ（Ｓ２６０１）、アプリケーション３０がWindows（登録商標） XP ＯＳで使用できるＡＰＩ関数GetUserDefaultLangID()をコールして言語ＩＤ（unsigned short型）を確認し、ＰＣ２には米語（US English）版のWindows（登録商標） XPがインストールされているので言語ＩＤが米語の言語ＩＤを表す１０３３であることが確認され、この言語ＩＤをもとに、図１５で定義されている\Printer.InkInfo.Black.DisplayName.1033:Nameのスキーマを引数としてＣＯＭインタフェースIBidiSpl のＡＰＩ関数IBidiSpl::SendRecv()をコールしてインク情報の取得を開始すると（Ｓ２６０２）、Printing and Print Spooler Interfacesを介して、ＬＭ３６がエクスポートしているSendRecvBidiDataFromPort()関数がスプーラ（Windows（登録商標） XP ＯＳの機能の一部なので、図や詳細説明は省略）からコールされて、この関数における処理が開始される（Ｓ２６０３）。
【００３８】
ＬＭ３６のSendRecvBidiDataFromPort()関数内において、図２３に示すように、ＰＣ１から要求コマンドを発行してプリンタ３から返されるインク情報を取得し（Ｓ２６０４）、SendRecvBidiDataFromPort()関数の引数として指定されている\Printer.InkInfo.Black.DisplayName.1033:Nameのスキーマから言語ＩＤを確認し、言語ＩＤが１０３３であり米語（US English）を表す言語ＩＤであることが確認され（Ｓ２６０５）、言語ＩＤがＡｕｔｏではないので（Ｓ２６０６）、Windows（登録商標） XP ＯＳで使用できるＡＰＩ関数LoadLibrary()でロードされたＬＭリソース６から、前記言語ＩＤをもとに図２２の（Ａ）に示すＩＤと文字列のテーブルを使って文字列リソースの取得を試み（Ｓ２６０８）、該当する文字列リソースが有るので（Ｓ２６０９）、取得した文字列リソースをもとに、前記取得したインク情報をSendRecvBidiDataFromPort()関数の引数として指定されている\Printer.InkInfo.Black.DisplayName.1033:Nameのスキーマの定義に従って変換し（Ｓ２６１１）、SendRecvBidiDataFromPort()関数の引数として図１７に示すようなスキーマの定義に変換されたインク情報を返し、ＬＭ３６のSendRecvBidiDataFromPort()関数の処理を終了する（Ｓ２６１２）。
【００３９】
アプリケーション３０において、IBidiSpl::SendRecv()関数がリターンされ、引数として図１７に示すようなスキーマの定義で返されたインク情報を取得し（Ｓ２６１３）、図８のインク情報表示部４７の情報を更新し（Ｓ２６１４）、アプリケーション３０がプリンタ３のインク情報を取得してインク情報表示部４７の表示を更新する処理を終了する（Ｓ２６１５）。
【００４０】
ステップＳ２６０６において言語ＩＤがＡｕｔｏの場合、図２８で後述する文字列リソースの自動取得の処理を行い（Ｓ２６０７）、ステップＳ２６１１に進む。ステップＳ２６０９において該当する文字列リソースが無い場合、図２７で後述する文字列リソースの検索と取得の処理を行い（Ｓ２６１０）、ステップＳ２６１１に進む。通常、アプリケーション３０は、ステップＳ２６０１からスタートするプリンタ３のインク情報を取得してインク情報表示部４７の表示を更新する処理を、例えば、
\Printer.InkInfo.Cyan.DisplayName.1033:Name
\Printer.InkInfo.Black:State
というようにインクの色や残量の状態を表すスキーマを変えながら繰り返すことにより、インク情報表示部４７に表示する全情報を取得し、表示を更新する。そして、例えば５秒に１回等、ある一定時間の間隔でこれら一連の処理を繰り返すことで、プリンタ３に搭載されているインクの情報及び状態をインク情報表示部４７にリアルタイムに表示することができる。ステップＳ２６１４においてインク情報表示部４７のName（名称）を更新する場合、ステップＳ２６１３において図１５で定義されたスキーマのName（\Printer.InkInfo.[Color].DisplayName:Name）で返された値（文字列）をそのまま使ってステップＳ２６１４においてインク情報表示部４７の情報を更新する。
【００４１】
図２７は文字列リソースの検索と取得の処理を表すフローチャートである。同図において、文字列リソースの検索と取得の処理が開始されると（Ｓ２７０１）、図２６で指定されたスキーマ内の言語ＩＤをWindows（登録商標） XP ＯＳで定義された言語ＩＤ（LANGID）（unsigned short型）に変換し、このWindows（登録商標） XP ＯＳで定義された言語ＩＤは、例えば、
メジャー言語属性 マイナー言語属性
英語             米語（US English）
英語             カナダ英語
というように定義されるメジャー言語属性とマイナー言語属性を持っているので、同一のメジャー言語属性で異なるマイナー言語属性の言語ＩＤを確認し（Ｓ２７０２）、近い言語ＩＤが有る場合（Ｓ２７０３）、Windows（登録商標） XP ＯＳで使用できるＡＰＩ関数LoadLibrary()でロードされたＬＭリソース６から、前記言語ＩＤをもとに図２２に示すようなＩＤと文字列のテーブルを使って文字列リソースの取得を試み（Ｓ２７０４）、該当する文字列リソースが有る場合（Ｓ２７０５）、取得した文字列リソースを返し、関数をリターン（終了）する（Ｓ２７０８）。
【００４２】
ステップＳ２７０３において近い言語ＩＤが無い場合、Windows（登録商標） XP ＯＳで使用できるＡＰＩ関数GetSystemDefaultLangID()をコールして言語ＩＤ（unsigned short型）を確認し（Ｓ２７０６）、Windows（登録商標） XP ＯＳで使用できるＡＰＩ関数LoadLibrary()でロードされたＬＭリソース６から、前記言語ＩＤをもとに図２２に示すようなＩＤと文字列のテーブルを使って文字列リソースを取得し（Ｓ２７０７）、取得した文字列リソースを返し、関数をリターン（終了）する（Ｓ２７０８）。ステップＳ２７０５において該当する文字列リソースが無い場合、ステップＳ２７０２に進み、同一のメジャー言語属性で異なるマイナー言語属性の言語ＩＤが有るか無いの確認を繰り返す。
【００４３】
図２８は文字列リソース自動取得の処理を表すフローチャートである。同図において、文字列リソース自動取得の処理が開始されると（Ｓ２８０１）、ＰＣ２の言語ＩＤを確認し、ＰＣ２には米語（US English）版のWindows（登録商標） XPがインストールされているので言語ＩＤが米語の言語ＩＤを表す１０３３であることが確認され（Ｓ２８０２）、Windows（登録商標） XP ＯＳで使用できるＡＰＩ関数LoadLibrary()でロードされたＬＭリソース６から、前記言語ＩＤをもとに図２２の（Ａ）に示すＩＤと文字列のテーブルを使って文字列リソースの取得を試み（Ｓ２８０３）、該当する文字列リソースが有る場合（Ｓ２８０４）、取得した文字列リソースを返し、関数をリターン（終了）する（Ｓ２８０６）。ステップＳ２８０４において該当する文字列リソースが無い場合、図２７の文字列リソースの検索と取得の処理を行い（Ｓ２８０５）、取得した文字列リソースを返し、関数をリターン（終了）する（Ｓ２８０６）。
【００４４】
図３１はＬＭ３６がエクスポートしているSendRecvBidiDataFromPort()関数における言語ＩＤを確認して文字列リソースを取得する一連の処理のサンプルプログラムを表す図である。
【００４５】
同図は、コメントに記述してある通り、図２６の各ステップの一部に相当する処理を実装する際のプログラムの一例である。各処理に関しては、Windows（登録商標） XP ＯＳで使用できるＡＰＩ関数やＣ言語の標準関数であるので、ここではその説明を省略する。
【００４６】
図３２はＬＭ３６がエクスポートしているSendRecvBidiDataFromPort()関数における言語ＩＤを確認して文字列リソースを取得する一連の処理のサンプルプログラムを表す図である。
【００４７】
同図は、コメントに記述してある通り、図２６の各ステップの一部に相当する処理を実装する際のプログラムの一例である。同図から、ＬＭリソース６をロードする際に、図１８に示す新たに定義されたLoadLibraryForMultiLanguage()関数を使っていることがわかる。それ以外の各処理に関しては、Windows（登録商標） XP ＯＳで使用できるＡＰＩ関数やＣ言語の標準関数であるので、ここではその説明を省略する。同図と図３１を見比べるとわかるように、新たに定義されたLoadLibraryForMultiLanguage()関数を使うことで、ランゲージモニタの実装作業が容易になり、コーディングミスを防ぐことができる。
【００４８】
＜第２の実施の形態＞
次に、本発明の第２の実施形態について説明する。
図１９は、本発明の第２の実施形態に係る情報処理装置及び周辺装置からなる周辺装置制御システムの構成を示すブロック図である。同図において、１、２は図１のＰＣ１、ＰＣ２と同一である。４０は情報処理装置であり、一般的なパーソナルコンピュータで構成される。ＰＣ４０は図３に示すようなハードウェアで構成され、ＯＳとしてWindows（登録商標） XPがインストールされている。ＰＣ１、ＰＣ２、ＰＣ４０はＥｔｈｅｒｎｅｔ（登録商標）で構成されるネットワーク４を介して接続され、互いに双方向通信が可能である。３は図１のプリンタ３と同一である。３６は図５のＬＭ３６と同一である。６は図１のＬＭリソース６と同一である。９は図１のＵＳＢインタフェース９と同一である。３０は図１のアプリケーション（ステータスモニタ）３０と同一である。４１はアプリケーションであり、Windows（登録商標）用の実行可能形式のファイル（*.EXE）で構成される。アプリケーション４１の一例としては、図９で後述するようなステータスモニタが挙げられる。
【００４９】
アプリケーション（ステータスモニタ）４１はMMN社製である。本実施形態の周辺装置制御システムでは、ＰＣ１がサーバ、ＰＣ２、ＰＣ４０がクライアントとなるような関係を持ち、ＰＣ１はプリンタ３を共有プリンタとしてネットワーク４を介して他の情報処理装置から印刷することができるようなプリントサーバの機能を備えている。今、ＰＣ４０には日本語版のWindows（登録商標） XPがインストールされているものとする。ＰＣ２、ＰＣ４０は前記MSDNのサイトで公開されているPrinting and Print Spooler Interfacesを利用して、ＰＣ１内のＬＭ３６へデータ（情報）を送ったり、ＬＭ３６からデータ（情報）を受け取ったりすることができる。これはWindows（登録商標） XPの公知の機能であるので、その詳細説明は省略する。
【００５０】
図９は日本語版のＯＳ環境下におけるプリンタの状態をモニタするステータスモニタを表す図である。同図のステータスモニタは、図１９のＰＣ４０にインストールされているアプリケーション４１であり、今、ＰＣ４０には日本語版のWindows（登録商標） XPがインストールされているので、日本語語表示になっている。同図において、５１はステータスモニタのメインウィンドウであり、プリンタ３（XYZ社製のkmmnというモデル名のプリンタ）の現在の状態を表している。５２はインク情報表示部であり、プリンタ３のインクの状態を表す。同図に示す通り、プリンタ３には黒、シアン、マゼンタ、黄の４色の色のインクが装着されており、それぞれの名称がCI-B 黒 インク、CI-C シアン インク、CI-M マゼンタ インク、CI-Y 黄 インク、状態が満タン、残りわずか、無し、満タンであることを表している。５３はプリンタ情報表示部であり、プリンタがオンラインの状態であることを表している。プリンタ３の状態としては第１の実施形態の図８と全く同じ状態を表しており、言語が日本語に翻訳（ローカライズ）されているという点だけが異なる。
【００５１】
以下、図２９のフローチャートを用いて、本実施形態の動作について説明する。図２９はアプリケーション（ステータスモニタ）３０がプリンタ３のインク情報を取得して図８のインク情報表示部４７の表示を更新する処理を表すフローチャートである。以下では、黒インクの情報を取得してインク情報表示部４７の表示を更新する例を挙げて説明する。
【００５２】
同図において、アプリケーション３０がプリンタ３のインク情報を取得してインク情報表示部４７の表示を更新する処理をスタートさせ（Ｓ２９０１）、アプリケーション３０がWindows（登録商標） XP ＯＳで使用できるＡＰＩ関数GetUserDefaultLangID()をコールして言語ＩＤ（unsigned short型）を確認し、ＰＣ２には米語（US English）版のWindows（登録商標） XPがインストールされているので言語ＩＤが米語の言語ＩＤを表す１０３３であることが確認され、この言語ＩＤをもとに、図１５で定義されている\Printer.InkInfo.Black.DisplayName.1033:Nameのスキーマを引数としてＣＯＭインタフェースIBidiSpl のＡＰＩ関数IBidiSpl::SendRecv()をコールしてインク情報の取得を開始すると（Ｓ２９０２）、ＰＣ１のＯＳが前記スキーマから言語ＩＤを確認し、言語ＩＤが１０３３であり米語（US English）を表す言語ＩＤであることが確認され（Ｓ２９０３）、スプーラ（Windows（登録商標） XP ＯＳの公知の機能の一部なので、図や詳細説明は省略）がこの言語ＩＤの属性を持つ印刷用のスレッドを作成し（Ｓ２９０４）、Printing and Print Spooler Interfacesを介して、ＬＭ３６がエクスポートしているSendRecvBidiDataFromPort()関数がスプーラから前記スレッドでコールされて、この関数における処理が開始される（Ｓ２９０５）。
【００５３】
ＬＭ３６のSendRecvBidiDataFromPort()関数内において、図２３に示すように、ＰＣ１から要求コマンドを発行してプリンタ３から返されるインク情報を取得し（Ｓ２９０６）、Windows（登録商標） XP ＯＳで使用できるＡＰＩ関数LoadLibrary()でロードされたＬＭリソース６から、図２２の（Ａ）に示すＩＤと文字列のテーブルを使って文字列リソースを取得し（Ｓ２９０７）、取得した文字列リソースをもとに、前記取得したインク情報をSendRecvBidiDataFromPort()関数の引数として指定されている\Printer.InkInfo.Black.DisplayName.1033:Nameのスキーマの定義に従って変換し（Ｓ２９０８）、SendRecvBidiDataFromPort()関数の引数として図１７に示すようなスキーマの定義に変換されたインク情報を返し、ＬＭ３６のSendRecvBidiDataFromPort()関数の処理を終了する（Ｓ２９０９）。
【００５４】
アプリケーション３０において、IBidiSpl::SendRecv()関数がリターンされ、引数として図１７に示すようなスキーマの定義で返されたインク情報を取得し（Ｓ２９１０）、図８のインク情報表示部４７の情報を更新し（Ｓ２９１１）、アプリケーション３０がプリンタ３のインク情報を取得してインク情報表示部４７の表示を更新する処理を終了する（Ｓ２９１２）。
【００５５】
通常、アプリケーション３０は、ステップＳ２９０１からスタートするプリンタ３のインク情報を取得してインク情報表示部４７の表示を更新する処理を、例えば、
\Printer.InkInfo.Cyan.DisplayName.1033:Name
\Printer.InkInfo.Black:State
というようにインクの色や残量の状態を表すスキーマを変えながら繰り返すことにより、インク情報表示部４７に表示する全情報を取得し、表示を更新する。そして、例えば５秒に１回等、ある一定時間の間隔でこれら一連の処理を繰り返すことで、プリンタ３に搭載されているインクの情報及び状態をインク情報表示部４７にリアルタイムに表示することができる。
【００５６】
ステップＳ２９１１においてインク情報表示部４７のName（名称）を更新する場合、ステップＳ２９１０において図１５で定義されたスキーマのName（\Printer.InkInfo.[Color].DisplayName:Name）で返された値（文字列）をそのまま使ってステップＳ２９１１においてインク情報表示部４７の情報を更新する。ＬＭ３６のSendRecvBidiDataFromPort()関数がスプーラから前記言語ＩＤ（米語）の属性を持つ印刷用のスレッドでコールされるので、ステップＳ２９０７においてLoadLibrary()関数でロードされるＬＭリソース６は、このスレッドの言語ＩＤに該当する図１０に示す
C:\WINDOWS\system32\spool\drivers\w32x86\3\US\LM_RES.DLL
である。
【００５７】
このような処理は現時点のWindows（登録商標） XP ＯＳには実装されておらず、新たに提案する処理である。これにより、ランゲージモニタ（ＬＭ３６）における実装としては、現時点のWindows（登録商標） XP ＯＳで使用できるＡＰＩ関数LoadLibrary()を普通に使うことによりランゲージモニタ用リソースファイル（ＬＭリソース６）をロードできるので、容易に実装できる。ステップＳ２９０３、Ｓ２９０４はＯＳにおける処理を表しているが、現時点のWindows（登録商標） XP ＯＳにはこのような処理は実装されておらず、新たに提案する処理である。
【００５８】
このように、クライアント（ＰＣ２）側のユーザが使用しているアプリケーション（アプリケーション３０）が使用している言語（言語ＩＤ）を使って、サーバ（ＰＣ１）側のスプーラがこの言語ＩＤの属性を持つ印刷用のスレッドを作成し、このスレッドでランゲージモニタ（ＬＭ３６）のSendRecvBidiDataFromPort()関数をコールするので、クライアント（ＰＣ２）とサーバ（ＰＣ１）の言語（言語ＩＤ）が一致していない場合においても、ランゲージモニタ（ＬＭ３６）は特別な制御をすることなく容易な実装で、クライアント（ＰＣ２）上のアプリケーション（アプリケーション３０）に、そのアプリケーションが使用している言語（言語ＩＤ）を使って、図８に示すような正確な表示を行うことができる。例えば、ＰＣ４０上のアプリケーション（ステータスモニタ）４１がプリンタ３のインク情報を取得して図９のインク情報表示部５２の表示を更新する処理が開始された場合も、上述したような処理が行われ、ＰＣ４０上のアプリケーション４１において図９に示すような内容が表示される。
【００５９】
図３３はＬＭ３６がエクスポートしているSendRecvBidiDataFromPort()関数における文字列リソースを取得する一連の処理のサンプルプログラムを表す図である。同図は、コメントに記述してある通り、図２９のステップＳ２９０７に相当する処理を実装する際のプログラムの一例である。各処理に関しては、Windows（登録商標） XP ＯＳで使用できるＡＰＩ関数やＣ言語の標準関数であるので、ここではその説明を省略する。同図と図３１、図３２を見比べるとわかるように、スプーラが言語ＩＤの属性を持つ印刷用のスレッドを作成して、このスレッドでランゲージモニタ（ＬＭ３６）のSendRecvBidiDataFromPort()関数をコールするので、ランゲージモニタにおいて言語ＩＤを確認する処理が不要となり、ランゲージモニタの実装作業が容易になるので、コーディングミスを防ぐことができる。
【００６０】
図３４はアプリケーション（ステータスモニタ）３０がプリンタ３からインクの情報及び状態を取得する時に使用するスキーマを表す図である。これらのスキーマは、アプリケーション３０がPrinting and Print Spooler Interfacesを介してＬＭ３６経由でプリンタ３からインクの情報及び状態を取得する時に、Windows（登録商標） XP ＯＳで使用できるＣＯＭインタフェースIBidiSpl のＡＰＩ関数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の文字列である。
【００６２】
図３５は図３４で定義されているスキーマを使ってインクの情報及び状態を列挙（Enumeration）する時のスキーマ及び値を表す図である。同図において、アプリケーション（ステータスモニタ）３０から\Printer.InkInfoのスキーマを指定してIBidiSpl::SendRecv()関数をコールすると（Query (Schema)欄）、プリンタ３の全インクの情報及び状態のスキーマ（Retrieve (Schema)）と値（Retrieve (Value)）がセットで返される。同図の例では、プリンタ３に黒、シアン、マゼンタ、黄のインクが搭載されていて、インクの残量の状態がそれぞれ、インク満タン（Full）、インク残りわずか（Low）、インク無し（Out）、インク満タン（Full）であり、インクの名称がそれぞれ、CI-B Black Ink、CI-C Cyan Ink、CI-M Magenta Ink、CI-Y Yellow Inkであることを表している。
【００６３】
図３６は図１４で定義されているスキーマを使ってインクの型名を取得（Get）する時のスキーマ及び値を表す図である。同図において、例えば、黒インクの型名を取得する場合、アプリケーション（ステータスモニタ）３０から\Printer.InkInfo.Black:DisplayNameのスキーマを指定してIBidiSpl::SendRecv()関数をコールすると（Query (Schema)欄）、プリンタ３に搭載されている黒インクの型名のスキーマ（Retrieve (Schema)）として\Printer.InkInfo.Black:DisplayNameと、値（Retrieve (Value)）としてCI-B Black Inkがセットで返されていることがわかる。
【００６４】
図２０はＰＣ２がサポートしているＵＰｎＰデバイスのXML Device Descriptionの記述内容を表す図である。ここで、同図の左端の番号は行番号を表す。同図において、２〜１７行目はroot要素を表し、ＰＣ２がUPnP Forumで標準化されているデバイスに準拠していることが記述されている。７〜１６行目はdevice要素を表す。８行目はdeviceType要素であり、ＰＣ２がUPnP Forumで標準化されているBasic Device V1.0のデバイスであることが記述されている。９行目はfriendlyName要素である。１０行目はmanufacturer要素であり、製造業者名が記述されている。１１行目はmanufacturerURL要素であり、製造業者のＷｅｂサイトのホームページのＵＲＬが記述されている。１２行目はmodelDescription要素であり、エンドユーザ用の識別名が記述されている。１３行目はmodelName要素であり、機種名が記述されている。１４行目はserialNumber要素であり、製造番号が記述されている。１５行目はlanguageID要素であり、ＰＣ２のＯＳで使用されている言語の言語ＩＤが記述されている。実際にはＰＣ２のＯＳが、Windows（登録商標） XP ＯＳで使用できるＡＰＩ関数GetSystemDefaultLangID()をコールして取得した言語ＩＤ（unsigned short型）を文字列（char *）に変換した文字列を記述する。このlanguageID要素は現時点のWindows（登録商標） XP ＯＳには実装されておらず、新たに提案する要素である。
【００６５】
同図に示すようなlanguageID要素を利用することにより、ＰＣ１のＯＳはＰＣ２、ＰＣ４０で使用されている言語ＩＤを取得することができるので、図２９のステップＳ２９０３において、前記スキーマから言語ＩＤを確認する代わりにこのlanguageID要素から言語ＩＤを確認することができる。この場合、図１５に示すような言語ＩＤを含むスキーマが不要となり、図３４に示すような言語ＩＤを含まない簡単なスキーマを使うことで容易に実現することができる。
【００６６】
図２４はＰＣ１がプリンタ３からインク情報を取得する時のデータを表す図である。実際にＰＣ１とプリンタ３との間で送受信されるデータはバイナリデータであるが、同図では理解しやすくすることを考えて、Shift JISコードでエンコードした後のテキストデータとして表している。
【００６７】
同図は、各言語に翻訳（ローカライズ）されたインクの名称をプリンタ３内部に格納している場合を表す図である。尚、同図では、インクの名称のデータとして、プリンタ３が日本語と米語（US English）のデータを備えている例を示す。同図において、ＰＣ１が要求コマンドをプリンタ３にＵＳＢインタフェース９を介して発行すると、インク情報がプリンタ３からＰＣ１にＵＳＢインタフェース９を介して返される。このインク情報は次の内容を表している。
＜色＞   ＜型名＞ ＜名称（日本語）＞   ＜名称（米語）＞ ＜状態＞
黒       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    満タン
【００６８】
第１の実施の形態、第２の実施の形態では、各言語に翻訳（ローカライズ）されたインクの名称の文字列を、ＬＭリソース６に全言語分格納している例を説明したが、この例に限られることなく、同図に示すように、全言語分のインクの名称の文字列をプリンタ３内部に格納することでも実現可能である。
【００６９】
以上説明したように、各言語に翻訳（ローカライズ）されたインクの名称の文字列を、従来例ではMMN社製のアプリケーションリソース８に格納していたのに対し、上記実施形態ではXYZ社製のＬＭリソース６に格納することで、アプリケーション３０、４１上のインク情報表示部４７、５２に正確なインクの名称を表示することができる。
【００７０】
以下、図３７に示すメモリマップを参照して、上記実施形態に係る情報処理装置及び周辺装置からなる周辺装置制御システムで読み出し可能なデータ処理プログラムの構成について説明する。
【００７１】
図３７は、本実施形態に係る周辺装置制御システムで読み出し可能な各種データ処理プログラムを格納する記憶媒体のメモリマップを示す図である。なお、特に図示しないが、記憶媒体に記憶されるプログラム群を管理する情報、例えばバージョン情報，作成者等もこの記憶媒体に記憶され、かつ、プログラム読み出し側のＯＳ等に依存する情報、例えばプログラムを識別表示するアイコン等も記憶される場合もある。
【００７２】
同図において、６４は記憶媒体であり、ここではハードディスクで構成されているものとする。６５はディレクトリ情報管理部であり、各種プログラムに従属するデータがこのディレクトリ情報管理部６５で管理されている。６６はプログラム格納部であり、各種プログラムを情報処理装置にインストールするためのプログラムや、インストールするプログラムが圧縮されている場合に解凍するためのプログラム等も記憶される場合がある。
【００７３】
上記実施形態における図２６、図２７、図２８、図２９にそれぞれ示す各フローチャートの実行によって実現できる各機能が、外部からインストールされるプログラムによって、情報処理装置によって実現されるようにしてもよい。そして、その場合、ＣＤ−ＲＯＭやフラッシュメモリやフレキシブルディスク等の記憶媒体により、あるいはネットワークを介して外部の記憶媒体から、プログラムを含む情報群が情報処理装置や周辺装置に供給される場合でも、本発明は適用されるものである。
【００７４】
上記実施形態では、アプリケーション３０の一例としてステータスモニタを挙げたが、この例に限られることなく、例えば周辺装置から情報を取得して、それを利用するような任意のアプリケーションで実現可能であり、有効である。
【００７５】
また、上記実施形態では、アプリケーション（ステータスモニタ）３０でプリンタ３に搭載されているインクの情報及び状態をモニタする例を説明したが、この例に限られることなく、例えば、周辺装置の動作状態や、警告、エラーの状態、オプションの装着状態等の任意の情報や状態の取得に有効活用できる。
【００７６】
また、上記実施形態では、図２０に示すようにＵＰｎＰを利用して実現しているが、これに限られることなく、同様な機能を備えるプロトコル等を利用して、実現することができる。また、実現するにあたっては、標準化された規格を利用することで、より汎用的なシステムを容易に実現することができる。
【００７７】
また、上記実施形態では、プリンタの例としてカラーインクジェットプリンタを使用したが、この例に限られることなく、例えば、モノクロＬＢＰ等の任意のプリンタを使用することができる。
【００７８】
また、上記実施形態では、クライアントやサーバとしてパーソナルコンピュータを想定したが、この例に限られることなく、例えばＤＶＤビデオプレーヤー、ゲーム、セットトップボックス、インターネット家電等、同様な使用方法が可能な任意の端末に対して実現することができ、有効である。
【００７９】
また、上記実施形態では、周辺装置としてプリンタを例示しているが、周辺装置として他に、複写機、ファクシミリ、スキャナ、デジタルカメラ、およびこれらの複合機能を備える装置などのいずれかが、本発明の適用対象となり得る。
【００８０】
また、上記実施形態では、ＯＳに例としてWindows（登録商標） XPを使用したが、これらのＯＳに限られることなく、任意のＯＳを使用することができる。
【００８１】
また、上記実施形態では、ネットワーク４の構成例としてEthernet（登録商標）を用いたが、この例に限られることなく、他の任意のネットワーク構成であってもよい。
【００８２】
また、上記実施形態では、ＰＣ１とプリンタ３との間のインタフェースとして、ＵＳＢインタフェースを用いたが、このインタフェースに限られることなく、例えば、Ethernet（登録商標）、無線ＬＡＮ、IEEE1394、Bluetooth、IrDA、パラレル、シリアル等の任意のインタフェースを用いるようにしてもよい。
【００８３】
また、上記実施形態では、ネットワーク４を介して接続されたＰＣ２（クライアント）上のアプリケーション３０から、ＰＣ１（サーバ）を介してプリンタ３に搭載されているインク情報を取得する例を挙げて説明したが、この例に限られることなく、例えば、ＰＣ１のＯＳがマルチユーザをサポートし、各ユーザが自分の使用する言語を任意に設定でき、ユーザが設定した自分の使用する言語（例えば米語）がＯＳで設定されている言語（例えば日本語）とは異なる場合においても、ＰＣ１上のアプリケーションがPrinting and Print Spooler Interfacesを介してランゲージモニタ経由でプリンタに搭載されているインク情報を取得することができるので、このようなネットワークを介さない、ＵＳＢインタフェースのようなローカルで接続された環境においても、実現可能であり、有効である。
【００８４】
以上のように、上記実施形態によれば、MMN社のようなサードパーティが、XYZ社製のプリンタ用のアプリケーション（ステータスモニタ）を開発してユーザに配布（販売）する場合等において、例えば、各言語に翻訳（ローカライズ）されたインクの名称の文字列を、XYZ社製のＬＭリソースに格納することで、前記アプリケーション上にXYZ社で定義された正しいインクの名称を含むインク情報を正確に表示することができる。従って、ユーザがインクの装着時や購入時等に混乱することを防止することができ、操作ミスや誤購入を防ぐことができる。また、ユーザの操作性を向上することができる。
【００８５】
また、新たに図１８に示すLoadLibraryForMultiLanguage()関数を定義することで、ランゲージモニタの実装作業が容易になる。
【００８６】
さらに、スプーラが言語ＩＤの属性を持つ印刷用のスレッドを作成して、このスレッドでランゲージモニタのSendRecvBidiDataFromPort()関数をコールするので、ランゲージモニタににおいて言語ＩＤによって処理を切り換えるような特別な処理を実装する必要がなく、実装作業が容易になる。
【００８７】
次に、本発明の他の実施形態について説明する。
図２は、本実施形態に係る情報処理装置及び周辺装置からなる周辺装置制御システムのシステムの構成部分を表すブロック図である。同図において、７０、７１は情報処理装置であり、一般的なパーソナルコンピュータで構成される。ＰＣ７０、ＰＣ７１は図３に示すようなハードウェアで構成され、ＯＳ（Operating System）として米国マイクロソフト社のWindows （登録商標）XPがインストールされている。ＰＣ７０とＰＣ７１はＥｔｈｅｒｎｅｔ（登録商標）で構成されるネットワーク４を介して接続され、互いに双方向通信が可能である。３はプリンタであり、カラーインクジェットプリンタで構成され、周辺装置の一例として挙げている。プリンタ３はXYZ社製のkmmnというモデル名のプリンタである。尚、本発明に適用可能な周辺装置としては、プリンタ、複写機、ファクシミリ、またはこれらの複合機などの画像形成装置、スキャナ、デジタルカメラ等が挙げられる。
【００８８】
プリンタ３は図４に示すようなハードウェアで構成され、ＰＣ７０とＵＳＢインタフェース９を介して接続されており、互いに双方向通信が可能である。５はランゲージモニタ（以降、ＬＭと略す場合がある）であり、Windows（登録商標）用のダイナミックリンクライブラリで構成される。４５はアプリケーションであり、Windows（登録商標）用の実行可能形式のファイル（*.EXE）で構成される。アプリケーション４５は図６で後述するようなステータスモニタである。アプリケーション（ステータスモニタ）４５はMMN社製である。
【００８９】
８はアプリケーション用リソースファイル（以降、アプリケーションリソースと略す場合がある）であり、Windows（登録商標）用のダイナミックリンクライブラリで構成され、文字列リソース等が格納されている。本実施形態の周辺装置制御システムでは、ＰＣ７０がサーバ、ＰＣ７１がクライアントとなるような関係を持ち、ＰＣ７０はプリンタ３を共有プリンタとしてネットワーク４を介して他の情報処理装置から印刷することができるようなプリントサーバの機能を備えている。今、ＰＣ７０には日本語版のWindows（登録商標） XPが、ＰＣ７１には米語（US English）版のWindows（登録商標） XPがインストールされているものとする。ＰＣ７１はMSDNのサイトで公開されているPrinting and Print Spooler Interfacesを利用して、ＰＣ７０内のＬＭ５へデータ（情報）を送ったり、ＬＭ５からデータ（情報）を受け取ったりすることができる。これはWindows（登録商標） XPの公知の機能であるので、その詳細説明は省略する。
【００９０】
図６は米語版のＯＳ環境下におけるプリンタの状態をモニタするステータスモニタを表す図である。同図のステータスモニタは、ＰＣ７１にインストールされているアプリケーション４５であり、今、ＰＣ７１には米語（US English）版のWindows（登録商標） XPがインストールされているので、米語表示になっている。同図において、４２はステータスモニタのメインウィンドウであり、プリンタ３（XYZ社製のkmmnというモデル名のプリンタ）の現在の状態を表している。４３はインク情報（Ink Information）表示部であり、プリンタ３のインクの状態を表す。同図に示す通り、プリンタ３には黒（Black）、シアン（Cyan）、マゼンタ（Magenta）、黄（Yellow）の４色のColor（色）のインクが装着されており、それぞれのName（名称）がCI-B Black、CI-C Cyan、CI-M Magenta、CI-Y Yellow、State（状態）がFull（満タン）、Low（残りわずか）、Out（無し）、Full（満タン）であることを表している。４４はプリンタ情報（Printer Information）表示部であり、プリンタがOnline（オンライン）の状態であることを表している。
【００９１】
図７はアプリケーションリソース８の格納先及び格納状態を表す図である。同図はＰＣ２でWindows（登録商標） XP ＯＳがC:\ドライブに、アプリケーション（ステータスモニタ）４５がC:\Program Files\MMN\Status Monitor\にインストールされている例を表す。アプリケーションリソース８はWindows（登録商標）用のダイナミックリンクライブラリで構成され、APP_RES.DLLというファイルである。アプリケーション４５はマルチ言語対応のドライバであるので、アプリケーションリソース８はサポートしている全言語分の文字列リソースを備えている。これらの各言語用の文字列リソースは、同図に示すように、それぞれの言語毎に別々に用意されているフォルダに同一ファイル名（APP_RES.DLL）でそれぞれ格納されている。例えば、日本語用のアプリケーションリソース８はC:\Program Files\MMN\Status Monitor\Res\のＪＰフォルダに、米語（US English）用のアプリケーションリソース８はＵＳフォルダに格納されている。
【００９２】
図１１はアプリケーション（ステータスモニタ）４５がプリンタ３からインクの情報及び状態を取得する時に使用するスキーマを表す図である。これらのスキーマは、アプリケーション４５がPrinting and Print Spooler Interfacesを介してＬＭ５経由でプリンタ３からインクの情報及び状態を取得する時に、Windows（登録商標） XP ＯＳで使用できるＣＯＭインタフェースIBidiSpl のＡＰＩ関数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はＬＭ５またはプリンタ３からアプリケーション４５へ返される値である。このように、同図で定義されているスキーマを使って、アプリケーション（ステータスモニタ）４５はプリンタ３に搭載されているインクの情報及び状態を取得することができる。
【００９４】
図１２は、図１１で定義されているスキーマを使ってインクの情報及び状態を列挙（Enumeration）する時のスキーマ及び値を表す図である。同図において、アプリケーション（ステータスモニタ）４５から\Printer.InkInfoのスキーマを指定してIBidiSpl::SendRecv()関数をコールすると（Query (Schema)欄）、プリンタ３の全インクの情報及び状態のスキーマ（Retrieve (Schema)）と値（Retrieve (Value)）がセットで返される。同図の例では、プリンタ３に黒、シアン、マゼンタ、黄のインクが搭載されていて、インクの残量の状態がそれぞれ、インク満タン（Full）、インク残りわずか（Low）、インク無し（Out）、インク満タン（Full）であり、インクの型名がそれぞれ、CI-B、CI-C、CI-M、CI-Yであることを表している。
【００９５】
図１３は図１１で定義されているスキーマを使ってインクの型名を取得（Get）する時のスキーマ及び値を表す図である。同図において、例えば、黒インクの型名を取得する場合、アプリケーション（ステータスモニタ）４５から\Printer.InkInfo.Black:ModelNameのスキーマを指定してIBidiSpl::SendRecv()関数をコールすると（Query (Schema)欄）、プリンタ３に搭載されている黒インクの型名のスキーマ（Retrieve (Schema)）として\Printer.InkInfo.Black:ModelNameと、値（Retrieve (Value)）としてCI-Bがセットで返されていることがわかる。
【００９６】
図２１はアプリケーションリソース８のＩＤと文字列のテーブルを表す図である。同図において、（Ａ）の米語（US English）用アプリケーションリソース８では、ID1、ID2、ID3、ID4に対し、それぞれ、CI-B Black、CI-C Cyan、CI-M Magenta、CI-Y Yellow、がマッピングされている。（Ｂ）の日本語用アプリケーションリソース８では、ID1、ID2、ID3、ID4に対し、それぞれ、CI-B 黒、CI-C シアン、CI-M マゼンタ、CI-Y 黄、がマッピングされている。これらはプリンタ３用のXYZ社製のインクの名称であるが、プリンタ３の製造元XYZ社とは全く関係のないMMN社で適当に定めている名称であり、図２２に示すXYZ社で定めている正式な名称とは異なっている。
【００９７】
以下、図２５のフローチャートを用いて、本実施形態の動作について説明する。
図２５はアプリケーション（ステータスモニタ）４５がプリンタ３のインク情報を取得して図６のインク情報表示部４３の表示を更新する処理を表すフローチャートである。
【００９８】
同図において、アプリケーション４５がプリンタ３のインク情報を取得してインク情報表示部４３の表示を更新する処理をスタートさせ（Ｓ２５０１）、アプリケーション４５が図１１で定義されている\Printer.InkInfoのスキーマを引数としてＣＯＭインタフェースIBidiSpl のＡＰＩ関数IBidiSpl::SendRecv()をコールしてインク情報の取得を開始すると（Ｓ２５０２）、Printing and Print Spooler Interfacesを介して、ＬＭ５がエクスポートしているSendRecvBidiDataFromPort()関数がスプーラ（Windows（登録商標） XP ＯＳの公知の機能の一部なので、図や詳細説明は省略）からコールされて、この関数における処理が開始される（Ｓ２５０３）。
【００９９】
ＬＭ５のSendRecvBidiDataFromPort()関数内において、図２３に示すように、ＰＣ７０から要求コマンドを発行してプリンタ３から返されるインク情報を取得し（Ｓ２５０４）、この取得したインク情報をSendRecvBidiDataFromPort()関数の引数として指定されている\Printer.InkInfoのスキーマの定義に従って変換し（Ｓ２５０５）、SendRecvBidiDataFromPort()関数の引数として図１２に示すようなスキーマの定義に変換されたインク情報を返し、ＬＭ５のSendRecvBidiDataFromPort()関数の処理を終了する（Ｓ２５０６）。
【０１００】
アプリケーション４５において、IBidiSpl::SendRecv()関数がリターンされ、引数として図１２に示すようなスキーマの定義で返されたインク情報を取得し（Ｓ２５０７）、Windows（登録商標） XP ＯＳで使用できるＡＰＩ関数GetUserDefaultLangID()をコールして言語ＩＤ（unsigned short型）を確認し（Ｓ２５０８）、ＰＣ７１には米語（US English）版のWindows（登録商標） XPがインストールされているので、ステップＳ２５０８では言語ＩＤが米語の言語ＩＤを表す１０３３であることが確認され、Windows（登録商標） XP ＯＳで使用できるＡＰＩ関数LoadLibrary()でロードされたアプリケーションリソース８から、前記言語ＩＤをもとに図２１の（Ａ）に示すＩＤと文字列のテーブルを使って文字列リソースを取得し（Ｓ２５０９）、この文字列リソースを使って図６のインク情報表示部４３の情報を更新し（Ｓ２５１０）、アプリケーション４５がプリンタ３のインク情報を取得してインク情報表示部４３の表示を更新する処理を終了する（Ｓ２５１１）。
【０１０１】
通常、アプリケーション４５は、ステップＳ２５０１からスタートするプリンタ３のインク情報を取得してインク情報表示部４３の表示を更新する処理を、例えば５秒に１回等、ある一定時間の間隔で繰り返すことで、プリンタ３に搭載されているインクの情報及び状態をインク情報表示部４３にリアルタイムに表示することができる。ステップＳ２５１０においてインク情報表示部４３のName（名称）を更新する場合、ステップＳ２５０７において図１１で定義されたスキーマのModelName（\Printer.InkInfo.[Color]:ModelName）で返された値から、ステップＳ２５０９において該当するインクの名称の文字列の図２１に示すＩＤ（ID1、ID2、ID3、ID4）を定め、そのＩＤにマッピングされている文字列を取得し、この文字列を使ってステップＳ２５１０においてインク情報表示部４３の情報を更新する。
【０１０２】
図３０はアプリケーション（ステータスモニタ）４５における言語ＩＤを確認して文字列リソースを取得する一連の処理のサンプルプログラムを表す図である。同図は、コメントに記述してある通り、図２５の各ステップの一部に相当する処理を実装する際のプログラムの一例である。各処理に関しては、Windows（登録商標） XP ＯＳで使用できるＡＰＩ関数やＣ言語の標準関数であるので、ここではその説明を省略する。
【０１０３】
また、本発明の目的は、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体を、システム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ）が記憶媒体に格納されたプログラムコードを読み出し実行することによっても、達成されることは言うまでもない。
【０１０４】
この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、プログラムコード自体及びそのプログラムコードを記憶した記憶媒体は本発明を構成することになる。
【０１０５】
プログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、磁気テープ、不揮発性のメモリカード、ＲＯＭ等を用いることができる。
【０１０６】
また、コンピュータが読み出したプログラムコードを実行することにより、前述した実施形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼動しているＯＳ(基本システム或いはオペレーティングシステム)などが実際の処理の一部又は全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【０１０７】
さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵ等が実際の処理の一部又は全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【０１０８】
本発明の実施形態では、アプリケーション３０の一例としてステータスモニタを挙げたが、この例に限られることなく、例えば周辺装置から情報を取得して、それを利用するような任意のアプリケーションで実現可能であり、有効である。
【０１０９】
本発明の実施形態では、アプリケーション（ステータスモニタ）３０でプリンタ３に搭載されているインクの情報及び状態をモニタする例を説明したが、この例に限られることなく、例えば、周辺装置の動作状態や、警告、エラーの状態、オプションの装着状態等の任意の情報や状態の取得に有効活用できる。
【０１１０】
本発明の実施形態では、図２０に示すようにＵＰｎＰを利用して実現しているが、これに限られることなく、同様な機能を備えるプロトコル等を利用して、実現することができる。また、実現するにあたっては、標準化された規格を利用することで、より汎用的なシステムを容易に実現することができる。
【０１１１】
本発明の実施形態では、プリンタの例としてカラーインクジェットプリンタを使用したが、この例に限られることなく、例えば、モノクロＬＢＰ等の任意のプリンタを使用することができる。
【０１１２】
本発明の実施形態では、クライアントやサーバとしてパーソナルコンピュータを想定したが、この例に限られることなく、例えばＤＶＤビデオプレーヤー、ゲーム、セットトップボックス、インターネット家電等、同様な使用方法が可能な任意の端末に対して実現することができ、有効である。
【０１１３】
本発明の実施形態では、周辺装置としてプリンタを例示しているが、周辺装置として他に、複写機、ファクシミリ、スキャナ、デジタルカメラ、およびこれらの複合機能を備える装置などのいずれかが、本発明の適用対象となり得る。
【０１１４】
本発明の実施形態では、ＯＳに例としてWindows（登録商標） XPを使用したが、これらのＯＳに限られることなく、任意のＯＳを使用することができる。
【０１１５】
本発明の実施形態では、ネットワーク４の構成例としてEthernet（登録商標）を用いたが、この例に限られることなく、他の任意のネットワーク構成であってもよい。
【０１１６】
本発明の実施形態では、ＰＣ１とプリンタ３との間のインタフェースとして、ＵＳＢインタフェースを用いたが、このインタフェースに限られることなく、例えば、Ethernet（登録商標）、無線ＬＡＮ、IEEE1394、Bluetooth、IrDA、パラレル、シリアル等の任意のインタフェースを用いるようにしてもよい。
【０１１７】
本発明の実施形態では、ネットワーク４を介して接続されたＰＣ２（クライアント）上のアプリケーション３０から、ＰＣ１（サーバ）を介してプリンタ３に搭載されているインク情報を取得する例を挙げて説明したが、この例に限られることなく、例えば、ＰＣ１のＯＳがマルチユーザをサポートし、各ユーザが自分の使用する言語を任意に設定でき、ユーザが設定した自分の使用する言語（例えば米語）がＯＳで設定されている言語（例えば日本語）とは異なる場合においても、ＰＣ１上のアプリケーションがPrinting and Print Spooler Interfacesを介してランゲージモニタ経由でプリンタに搭載されているインク情報を取得することができるので、このようなネットワークを介さない、ＵＳＢインタフェースのようなローカルで接続された環境においても、実現可能であり、有効である。
【符号の説明】
【０１１８】
１：情報処理装置（ＰＣ）、２：情報処理装置（ＰＣ）、３：プリンタ、４：ネットワーク、６：ランゲージモニタ用リソースファイル（ＬＭリソース）、９：ＵＳＢインタフェース、３０：アプリケーション（ステータスモニタ）、３６：ランゲージモニタ、４０：情報処理装置（ＰＣ）、４１：アプリケーション（ステータスモニタ）、４７：インク情報（Ink Information）表示部、５２：インク情報表示部
【図１】
2011023019.tif 000003
【図２】
2011023019.tif 000004
【図３】
2011023019.tif 000005
【図４】
2011023019.tif 000006
【図５】
2011023019.tif 000007
【図６】
2011023019.tif 000008
【図７】
2011023019.tif 000009
【図８】
2011023019.tif 000010
【図９】
2011023019.tif 000011
【図１０】
2011023019.tif 000012
【図１１】
2011023019.tif 000013
【図１２】
2011023019.tif 000014
【図１３】
2011023019.tif 000015
【図１４】
2011023019.tif 000016
【図１５】
2011023019.tif 000017
【図１６】
2011023019.tif 000018
【図１７】
2011023019.tif 000019
【図１８】
2011023019.tif 000020
【図１９】
2011023019.tif 000021
【図２０】
2011023019.tif 000022
【図２１】
2011023019.tif 000023
【図２２】
2011023019.tif 000024
【図２３】
2011023019.tif 000025
【図２４】
2011023019.tif 000026
【図２５】
2011023019.tif 000027
【図２６】
2011023019.tif 000028
【図２７】
2011023019.tif 000029
【図２８】
2011023019.tif 000030
【図２９】
2011023019.tif 000031
【図３０】
2011023019.tif 000032
【図３１】
2011023019.tif 000033
【図３２】
2011023019.tif 000034
【図３３】
2011023019.tif 000035
【図３４】
2011023019.tif 000036
【図３５】
2011023019.tif 000037
【図３６】
2011023019.tif 000038
【図３７】
2011023019.tif 000039