(57)【要約】【課題】機器から取得された情報の不正な書き換えを防止する。【解決手段】所定の機能を提供するプログラムを有する情報処理装置であって、前記プログラムからの所定の情報に対する要求を制限する要求制御部と、前記プログラムからの第１の要求に応じて、前記情報処理装置と接続される機器から前記所定の情報を含む情報を取得する取得部と、前記プログラムからの第２の要求に応じて、前記取得部が取得した前記情報であって前記要求制御部によって前記プログラムからの要求が制限される前記所定の情報に基づいて、前記機器に対して、前記第２の要求に対応する処理の実行を要求する処理要求部と、を有することを特徴とする。【選択図】図８
2019067367.tif 000002
【特許請求の範囲】
【請求項１】
所定の機能を提供するプログラムを有する情報処理装置であって、
前記プログラムからの所定の情報に対する要求を制限する要求制御部と、
前記プログラムからの第１の要求に応じて、前記情報処理装置と接続される機器から前記所定の情報を含む情報を取得する取得部と、
前記プログラムからの第２の要求に応じて、前記取得部が取得した前記情報であって前記要求制御部によって前記プログラムからの要求が制限される前記所定の情報に基づいて、前記機器に対して、前記第２の要求に対応する処理の実行を要求する処理要求部と、
を有することを特徴とする情報処理装置。
【請求項２】
前記要求制御部は、
前記取得部により取得された情報のうち、所定の情報に対して、前記プログラムにより更新の要求ができないように制限する、ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記プログラムは、Ｊａｖａ言語で記述されたプログラムであり、
前記要求制御部は、
前記取得部により取得された情報を、前記プログラムと異なるパッケージに属するクラスであって、前記所定の情報を更新するためのメソッドにアクセス修飾子が定義されていないクラスから生成されたインスタンスに設定することで、前記プログラムにより更新の要求ができないように制限する、ことを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記要求制御部は、
前記取得部により取得された情報のうち、所定の情報に対して、前記プログラムにより参照の要求ができないように制御する、ことを特徴とする請求項１に記載の情報処理装置。
【請求項５】
前記プログラムは、Ｊａｖａ言語で記述されたプログラムであり、
前記要求制御部は、
前記取得部により取得された情報を、前記プログラムと異なるパッケージに属するクラスであって、前記所定の情報を参照するためのメソッドにアクセス修飾子が定義されていないクラスから生成されたインスタンスに設定することで、前記プログラムにより参照の要求ができないように制限する、ことを特徴とする請求項４に記載の情報処理装置。
【請求項６】
前記取得部により取得された複数の情報を一の識別情報と対応付けて記憶する記憶制御部を有し、
前記処理要求部は、
前記プログラムからの前記識別情報を含む第２の要求に応じて、前記識別情報に対応付けられた前記複数の情報のうち、前記要求制御部によって要求が制限される前記所定の情報に基づいて、前記機器に対して前記第２の要求に対応する処理の実行を要求する、ことを特徴とする請求項１に記載の情報処理装置。
【請求項７】
前記機器は、少なくとも印刷処理を実行可能な画像処理装置であり、
前記処理要求部は、
前記プログラムからの第２の要求に応じて、前記要求制御部によって要求が制限される前記所定の情報に基づいて、前記機器に対して、前記印刷処理の実行を要求する、ことを特徴とする請求項１に記載の情報処理装置。
【請求項８】
前記取得部により取得された情報には、前記機器のＩＰアドレスと、ネットワーク情報とが少なくとも含まれる、ことを特徴とする請求項１に記載の情報処理装置。
【請求項９】
前記プログラムは、前記機器の製造元企業とは異なるサードベンダにより開発されたプログラムである、ことを特徴とする請求項１に記載の情報処理装置。
【請求項１０】
前記取得部と前記処理要求部とは、前記プログラムとは異なるプログラムによって実行される、ことを特徴とする請求項１に記載の情報処理装置。
【請求項１１】
前記要求制御部は、
前記プログラムから前記所定の情報に対する要求を受け付けない制御を行い、
前記処理要求部から前記所定の情報に対する要求を受け付ける制御を行う、ことを特徴とする請求項１０に記載の情報処理装置。
【請求項１２】
所定の機能を提供するプログラムを有する情報処理装置に、
前記プログラムからの第１の要求に応じて、前記情報処理装置と接続される機器から所定の情報を含む情報を取得する取得手順と、
前記プログラムからの第２の要求に応じて、前記取得手順が取得した前記情報であって前記プログラムからの要求が制限される前記所定の情報に基づいて、前記機器に対して、前記第２の要求に対応する処理の実行を要求する処理要求手順と、
を実行させるためのプログラム。
【請求項１３】
所定の機能を提供するプログラムを有する情報処理装置と、所定の画像処理を実行可能な画像処理装置とを有する情報処理システムであって、
前記プログラムからの所定の情報に対する要求を制限する要求制御部と、
前記プログラムからの第１の要求に応じて、前記画像処理装置から前記所定の情報を含む情報を取得する取得部と、
前記プログラムからの第２の要求に応じて、前記取得部が取得した前記情報であって前記要求制御部によって前記プログラムからの要求が制限される前記所定の情報に基づいて、前記画像処理装置に対して、前記第２の要求に対応する処理の実行を要求する処理要求部と、
を有することを特徴とする情報処理システム。
【請求項１４】
所定の機能を提供するプログラムを有する情報処理装置が実行する情報処理方法であって、
前記プログラムからの所定の情報に対する要求を制限する要求制御手順と、
前記プログラムからの第１の要求に応じて、前記情報処理装置と接続される機器から前記所定の情報を含む情報を取得する取得手順と、
前記プログラムからの第２の要求に応じて、前記取得手順が取得した前記情報であって前記要求制御手順によって前記プログラムからの要求が制限される前記所定の情報に基づいて、前記機器に対して、前記第２の要求に対応する処理の実行を要求する処理要求手順と、
を有することを特徴とする情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、プログラム、情報処理システム及び情報処理方法に関する。
【背景技術】
【０００２】
ＭＦＰ（Multifunction Peripheral）等の機器から各種情報を取得したり、機器に対して各種処理の実行を要求したりするためのライブラリを機器の製造元企業が外部企業に提供することが行われている。外部企業は、製造元企業から提供されたライブラリを利用することで、機器から各種情報を取得したり、機器に対して各種処理の実行を要求したりするための処理を直接実装することなく、機器と連携した処理を行う独自のアプリケーションを作成することができる。
【０００３】
また、セキュリティを適切に維持しつつ、ＡＰＩ（Application Programming Interface）等のインタフェースの少なくとも一部が公開されているフレームワークの機能を拡張させることができる画像形成装置が知られている（例えば特許文献１参照）。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、機器の製造元企業から提供されるライブラリを利用することで、例えば、機器のＩＰ（Internet Protocol）アドレスや機器がサポートしているデータ形式等の機器情報を取得することができる。
【０００５】
しかしながら、外部企業が作成するアプリケーションにおいて、機器から取得された機器情報が書き換えられてしまう場合があった。機器情報が書き換えられ、機器情報に不整合等が生じた場合、機器が意図しない動作を行う恐れがある。
【０００６】
本発明の実施の形態は、上記の点に鑑みてなされたもので、機器から取得された情報の不正な書き換えを防止することを目的とする。
【課題を解決するための手段】
【０００７】
上記目的を達成するため、本発明の実施の形態は、所定の機能を提供するプログラムを有する情報処理装置であって、前記プログラムからの所定の情報に対する要求を制限する要求制御部と、前記プログラムからの第１の要求に応じて、前記情報処理装置と接続される機器から前記所定の情報を含む情報を取得する取得部と、前記プログラムからの第２の要求に応じて、前記取得部が取得した前記情報であって前記要求制御部によって前記プログラムからの要求が制限される前記所定の情報に基づいて、前記機器に対して、前記第２の要求に対応する処理の実行を要求する処理要求部と、を有することを特徴とする。
【発明の効果】
【０００８】
機器から取得された情報の不正な書き換えを防止することができる。
【図面の簡単な説明】
【０００９】
【図１】第一の実施形態に係る印刷システムの全体構成の一例を示す図である。
【図２】印刷アプリケーションの構成の一例を説明する図である。
【図３】第一の実施形態に係る端末装置のハードウェア構成の一例を示す図である。
【図４】第一の実施形態に係る機器のハードウェア構成の一例を示す図である。
【図５】第一の実施形態に係る端末装置の機能構成の一例を示す図である。
【図６】機器情報インスタンスの一例を示す図である。
【図７】印刷設定情報インスタンスの一例を示す図である。
【図８】ベンダ開発プログラムのパッケージと印刷ライブラリのパッケージとの関係の一例を説明する図である。
【図９】機器情報クラスの一例を示す図である。
【図１０】印刷設定情報クラスの一例を示す図である。
【図１１】機器情報取得クラスの一例を示す図である。
【図１２】印刷処理クラスの一例を示す図である。
【図１３】ベンダ開発プログラムのプログラムコードの一例を示す図である。
【図１４】第一の実施形態に係る印刷処理の一例を示すシーケンス図である。
【図１５】機器確認画面の一例を示す図である。
【図１６】第二の実施形態に係る投影システムの全体構成の一例を示す図である。
【図１７】投影アプリケーションの構成の一例を説明する図である。
【図１８】第二の実施形態に係る端末装置の機能構成の一例を示す図である。
【図１９】機器情報インスタンスの一例を示す図である。
【図２０】投影設定情報インスタンスの一例を示す図である。
【図２１】ベンダ開発プログラムのパッケージと投影ライブラリのパッケージとの関係の一例を説明する図である。
【図２２】機器情報クラスの一例を示す図である。
【図２３】投影設定情報クラスの一例を示す図である。
【図２４】機器情報取得クラスの一例を示す図である。
【図２５】投影処理クラスの一例を示す図である。
【図２６】ベンダ開発プログラムのプログラムコードの一例を示す図である。
【図２７】第二の実施形態に係る投影処理の一例を示すシーケンス図である。
【図２８】第三の実施形態に係る開発用端末の機能構成の一例を示す図である。
【図２９】第三の実施形態に係るコンパイル処理の一例を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下、本発明の各実施形態について、図面を参照しながら詳細に説明する。
【００１１】
［第一の実施形態］
＜全体構成＞
まず、本実施形態に係る印刷システム１の全体構成について、図１を参照しながら説明する。図１は、第一の実施形態に係る印刷システム１の全体構成の一例を示す図である。
【００１２】
図１に示すように、本実施形態に係る印刷システム１には、１台以上の端末装置１０と、１台以上の機器２０とが含まれる。また、端末装置１０と機器２０とは、例えば、Ｂｌｕｅｔｏｏｔｈ（登録商標）等の近距離無線通信を用いて、通信可能に接続される。更に、端末装置１０と機器２０とは、例えば、Ｗｉ−Ｆｉ等の無線ＬＡＮ（Local Area Network）を用いて、通信可能に接続される。
【００１３】
機器２０は、ＭＦＰ等の画像処理装置である。機器２０は、端末装置１０からの要求に応じて、印刷処理やスキャン処理等の各種画像処理を行う。本実施形態では、機器２０がＭＦＰであるものとして説明する。なお、機器２０は、ＭＦＰに限られず、例えば、コピー機、印刷装置、スキャナ装置、ファクシミリ、デジタルカメラ、プロジェクタ、電子会議用端末、電子黒板装置、オーディオ機器、車載機（例えばカーナビ等）、家電製品（例えば冷蔵庫等）であっても良い。
【００１４】
端末装置１０は、スマートフォン等の情報処理装置である。端末装置１０には、機器２０の製造元企業とは異なる外部企業（以降、「サードベンダ」と表す。）により開発され、機器２０と連携した処理を行う印刷アプリケーション１００がインストールされている。端末装置１０のユーザは、印刷アプリケーション１００を用いて、機器２０で印刷を行うことができる。
【００１５】
なお、端末装置１０は、スマートフォンに限られず、例えば、タブレット端末、ノート型ＰＣ（パーソナルコンピュータ）、デスクトップ型ＰＣ、ゲーム機器、デジタルカメラ、ウェアラブルデバイス等であっても良い。
【００１６】
＜印刷アプリケーション１００の構成＞
ここで、サードベンダにより開発された印刷アプリケーション１００の構成について、図２を参照しながら説明する。図２は、印刷アプリケーション１００の構成の一例を説明する図である。
【００１７】
図２に示すように、印刷アプリケーション１００は、サードベンダにより開発され、独自の機能を提供するプログラムであるベンダ開発プログラム１１０と、機器２０の製造元企業が提供するＡＰＩ群である印刷ライブラリ１２０とを有する。
【００１８】
印刷ライブラリ１２０は、印刷機能を提供するためのプログラムである。印刷ライブラリ１２０には、例えば、機器２０から機器情報を取得するためのＡＰＩや機器２０に対して印刷を要求するためのＡＰＩ等が定義されている。このため、ベンダ開発プログラム１１０は、印刷ライブラリ１２０に定義されたＡＰＩを呼び出すことで、機器２０からの機器情報の取得や機器２０への印刷要求等、機器２０と連携した処理を実現することができる。
【００１９】
このとき、印刷ライブラリ１２０は、例えば、機器２０から取得した機器情報等をベンダ開発プログラム１１０で書き換えることができないようにする。これにより、印刷ライブラリ１２０により取得された機器情報等が、ベンダ開発プログラム１１０で不正に書き換えられてしまう事態を防止することができる。
【００２０】
また、印刷ライブラリ１２０は、例えば、機器２０から取得した機器情報等をベンダ開発プログラム１１０が読み取る場合にも、少なくとも一部の情報を読み取ることができないようにする。これにより、印刷ライブラリ１２０により取得された機器情報等について、ベンダ開発プログラム１１０による不要な参照を防止することができ、機器２０のセキュリティリスクの低下等を防止することができる。
【００２１】
本実施形態では、ベンダ開発プログラム１１０及び印刷ライブラリ１２０は、Ｊａｖａ（登録商標）言語で開発されたプログラムであるものとする。したがって、印刷ライブラリ１２０にはＪａｖａのクラスが定義されている。ベンダ開発プログラム１１０は、クラス内のメソッド（ＡＰＩ）を呼び出すことで、機器２０からの機器情報の取得や機器２０への印刷要求等を実現することができる。ただし、ベンダ開発プログラム１１０及び印刷ライブラリ１２０は、Ｊａｖａ言語で開発されている場合に限られない。例えば、Ｃ言語、Ｃ＋＋言語、Ｏｂｊｅｃｔｉｖｅ−Ｃ言語、Ｃ＃言語等、種々のプログラミング言語で開発されても良い。
【００２２】
なお、印刷ライブラリ１２０は、機器２０の製造元企業により提供される場合に限られない。印刷ライブラリ１２０は、例えば、機器２０の製造元企業の関連会社等により提供される場合も有り得る。また、印刷ライブラリ１２０は、例えば、ＳＤＫ（Software Development Kit）の一部として提供されても良い。
【００２３】
＜ハードウェア構成＞
≪端末装置１０≫
次に、本実施形態に係る端末装置１０のハードウェア構成について、図３を参照しながら説明する。図３は、第一の実施形態に係る端末装置１０のハードウェア構成の一例を示す図である。
【００２４】
図３に示すように、本実施形態に係る端末装置１０は、入力装置１１と、表示装置１２と、外部Ｉ／Ｆ１３と、ＲＡＭ（Random Access Memory）１４とを有する。また、本実施形態に係る端末装置１０は、ＲＯＭ（Read Only Memory）１５と、ＣＰＵ（Central Processing Unit）１６と、通信Ｉ／Ｆ１７と、補助記憶装置１８とを有する。これらの各ハードウェアは、それぞれがバスＢで接続されている。
【００２５】
入力装置１１は、例えばタッチパネル等であり、ユーザが各種操作を入力するのに用いられる。なお、入力装置１１は、例えば、キーボードやマウス等であっても良い。
【００２６】
表示装置１２は、ディスプレイ等であり、端末装置１０による処理結果を表示する。外部Ｉ／Ｆ１３は、外部装置とのインタフェースである。外部装置には、記録媒体１３ａ等がある。端末装置１０は、外部Ｉ／Ｆ１３を介して、記録媒体１３ａの読み取りや書き込みを行うことができる。
【００２７】
記録媒体１３ａには、例えば、ＵＳＢメモリ、ＳＤメモリカード、フレキシブルディスク、ＣＤ、ＤＶＤ等がある。
【００２８】
ＲＡＭ１４は、プログラムやデータを一時保持する揮発性の半導体メモリである。ＲＯＭ１５は、電源を切ってもプログラムやデータを保持することができる不揮発性の半導体メモリである。ＲＯＭ１５には、例えば、端末装置１０の起動時に実行されるＢＩＯＳ（Basic Input/Output System）、ＯＳ（Operating System）設定、及びネットワーク設定等のプログラムやデータが格納されている。
【００２９】
ＣＰＵ１６は、ＲＯＭ１５や補助記憶装置１８等からプログラムやデータをＲＡＭ１４上に読み出し、処理を実行することで、端末装置１０全体の制御や機能を実現する演算装置である。
【００３０】
通信Ｉ／Ｆ１７は、端末装置１０が機器２０と通信を行うためのインタフェースである。通信Ｉ／Ｆ１７には、例えば、Ｂｌｕｅｔｏｏｔｈにより機器２０と通信を行うためのＢｌｕｅｔｏｏｔｈモジュールと、Ｗｉ−Ｆｉ等の無線ＬＡＮにより機器２０と通信を行うための無線ＬＡＮモジュールとが含まれる。
【００３１】
補助記憶装置１８は、例えばＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）等であり、プログラムやデータを格納している不揮発性の記憶装置である。補助記憶装置１８に格納されるプログラムやデータには、端末装置１０全体を制御する基本ソフトウェアであるＯＳ、印刷アプリケーション１００、その他の各種機能を提供するアプリケーション等がある。補助記憶装置１８は、格納しているプログラムやデータを所定のファイルシステムやＤＢ（データベース）により管理している。
【００３２】
本実施形態に係る端末装置１０は、図３に示すハードウェア構成を有することにより、後述するような各種処理を実現できる。
【００３３】
≪機器２０≫
次に、本実施形態に係る機器２０が、ＭＦＰ等の画像処理装置である場合におけるハードウェア構成について、図４を参照しながら説明する。図４は、第一の実施形態に係る機器２０のハードウェア構成の一例を示す図である。
【００３４】
図４に示すように、本実施形態に係る機器２０は、コントローラ２１と、操作パネル２２と、外部Ｉ／Ｆ２３と、通信Ｉ／Ｆ２４と、プロッタ２５と、スキャナ２６とを有する。また、コントローラ２１は、ＣＰＵ３１と、ＲＡＭ３２と、ＲＯＭ３３と、ＮＶＲＡＭ３４と、補助記憶装置３５とを有する。
【００３５】
ＲＯＭ３３は、電源を切ってもプログラムやデータを保持することができる不揮発性の半導体メモリである。ＲＡＭ３２は、プログラムやデータを一時保持する揮発性の半導体メモリである。ＮＶＲＡＭ３４は、例えば設定情報等を格納している不揮発性の半導体メモリである。また、補助記憶装置３５は、例えばＨＤＤやＳＳＤ等であり、プログラムやデータを格納している不揮発性の記憶装置である。
【００３６】
ＣＰＵ３１は、ＲＯＭ３３やＮＶＲＡＭ３４、補助記憶装置３５等からプログラムやデータ、設定情報等をＲＡＭ３２上に読み出し、処理を実行することで、機器２０全体の制御や機能を実現する演算装置である。
【００３７】
操作パネル２２は、ユーザからの入力を受け付ける入力部と、表示を行う表示部とを備えている入出力装置である。外部Ｉ／Ｆ２３は、外部装置とのインタフェースである。外部装置には、記録媒体２３ａ等がある。機器２０は、外部Ｉ／Ｆ２３を介して、記録媒体２３ａの読み取りや書き込みを行うことができる。
【００３８】
記録媒体２３ａには、例えば、ＩＣカード、ＵＳＢメモリ、ＳＤメモリカード、フレキシブルディスク、ＣＤ、ＤＶＤ等がある。
【００３９】
通信Ｉ／Ｆ２４は、機器２０が端末装置１０通信を行うためのインタフェースである。通信Ｉ／Ｆ２４には、例えば、Ｂｌｕｅｔｏｏｔｈにより端末装置１０と通信を行うためのＢｌｕｅｔｏｏｔｈモジュールと、無線ＬＡＮにより端末装置１０と通信を行うための無線ＬＡＮモジュールとが含まれる。なお、通信Ｉ／Ｆ２４には、有線ＬＡＮにより端末装置１０と通信を行うためのＬＡＮボード等が含まれても良い。
【００４０】
プロッタ２５は、印刷データを被印刷媒体に印刷するための装置である。なお、被印刷媒体は、紙に限られない。被印刷媒体は、例えば、ＯＨＰシートやプラスチックフィルム、銅箔、布等であっても良い。スキャナ２６は、原稿を読み取って、画像データを生成する装置である。
【００４１】
本実施形態に係る機器２０は、図４に示すハードウェア構成を有することにより、後述するような各種処理を実現できる。
【００４２】
＜機能構成＞
次に、本実施形態に係る端末装置１０の機能構成について、図５を参照しながら説明する。図５は、第一の実施形態に係る端末装置１０の機能構成の一例を示す図である。
【００４３】
図５に示すように、本実施形態に係る端末装置１０は、機器情報取得要求部１１１と、表示制御部１１２と、印刷対象データ設定部１１３と、印刷設定部１１４と、実行操作受付部１１５と、印刷実行要求部１１６とを有する。これら各部は、ベンダ開発プログラム１１０がＣＰＵ１６に実行させる処理により実現される。
【００４４】
また、本実施形態に係る端末装置１０は、機器情報取得部１２１と、印刷処理部１２２とを有する。これら各部は、印刷ライブラリ１２０がＣＰＵ１６に実行させる処理により実現される。
【００４５】
機器情報取得要求部１１１は、ユーザによる機器情報の取得操作を受け付ける。また、機器情報取得要求部１１１は、ユーザによる機器情報の取得操作を受け付けると、機器情報の取得を機器情報取得部１２１に要求する。機器情報取得要求部１１１は、機器情報取得部１２１を実現するクラス（このクラスを、以降では「機器情報取得クラス１３００」と表す。）内のメソッドを呼び出すことで、機器情報の取得を要求することができる。
【００４６】
表示制御部１１２は、機器情報取得部１２１により取得された機器情報を表示装置１２上に表示する。
【００４７】
印刷対象データ設定部１１３は、ユーザによる印刷対象データの選択操作を受け付ける。印刷対象データとは、ユーザが印刷を所望するコンテンツデータのことである。コンテンツデータには、例えば、写真等の画像データや文書データ等が挙げられる。なお、機器２０がプロジェクタやオーディオ機器等である場合には、コンテンツデータは、例えば、動画データや音楽データ等であっても良い。
【００４８】
また、印刷対象データ設定部１１３は、ユーザによる印刷対象データの選択操作を受け付けると、選択されたコンテンツデータを印刷対象データに設定する。
【００４９】
印刷設定部１１４は、ユーザによる印刷設定情報の指定操作を受け付ける。印刷設定情報には、例えば、部数、印刷ページ範囲、印刷カラー等がある。
【００５０】
また、印刷設定部１１４は、ユーザによる印刷設定情報の指定操作を受け付けると、各印刷設定情報が保持される印刷設定情報インスタンス３００を生成する。そして、印刷設定部１１４は、ユーザにより指定された印刷設定情報を印刷設定情報インスタンス３００に設定する。印刷設定部１１４は、印刷設定情報インスタンス３００を実現するクラス（このクラスを、以降では「印刷設定情報クラス１２００」と表す。）内のメソッドを呼び出すことで、印刷設定情報を設定することができる。
【００５１】
実行操作受付部１１５は、ユーザによる印刷実行操作を受け付ける。印刷実行要求部１１６は、実行操作受付部１１５により印刷実行操作が受け付けられると、印刷実行を印刷処理部１２２に要求する。印刷実行要求部１１６は、印刷処理部１２２を実現するクラス（このクラスを、以降では「印刷処理クラス１４００」と表す。）内のメソッドを呼び出すことで、印刷実行を要求することができる。
【００５２】
機器情報取得部１２１は、機器情報取得要求部１１１からの要求に応じて、機器２０から機器情報を取得する。このとき、機器情報取得部１２１は、例えばＢｌｕｅｔｏｏｔｈ等の近距離無線通信を用いて、機器２０から機器情報を取得する。機器情報には、例えば、ＩＰアドレス、モデル名、サポートＰＤＬ（Page Description Language）、ネットワーク情報等がある。
【００５３】
また、機器情報取得部１２１は、機器２０から機器情報を取得すると、取得した各機器情報が保持される機器情報インスタンス２００を生成する。そして、機器情報取得部１２１は、取得した機器情報を機器情報インスタンス２００に設定する。機器情報取得部１２１は、機器情報インスタンス２００を実現するクラス（このクラスを、以降では「機器情報クラス１１００」と表す。）内のメソッドを呼び出すことで、機器情報を設定することができる。
【００５４】
印刷処理部１２２は、印刷実行要求部１１６からの要求に応じて、印刷データを生成した上で、印刷要求を機器２０に送信する。このとき、印刷処理部１２２は、例えばＷｉ−Ｆｉ等の無線ＬＡＮを用いて、印刷要求を機器２０に送信する。
【００５５】
印刷処理部１２２には、印刷データ生成部１２３と、印刷要求部１２４とが含まれる。印刷データ生成部１２３は、印刷データを生成する。印刷データとは、印刷対象データを機器２０が解釈可能なデータ形式（すなわち、機器２０がサポートしているＰＤＬ）に変換したデータである。印刷要求部１２４は、印刷データ生成部１２３により生成された印刷データが含まれる印刷要求を機器２０に送信する。
【００５６】
ここで、機器情報インスタンス２００について、図６を参照しながら説明する。図６は、機器情報インスタンス２００の一例を示す図である。
【００５７】
図６に示すように、機器情報インスタンス２００は、フィールド名「ＩＰアドレス」の機器情報と、フィールド名「モデル名」の機器情報と、フィールド名「サポートＰＤＬ」の機器情報と、フィールド名「ネットワーク情報」の機器情報とを保持する。
【００５８】
フィールド名「ＩＰアドレス」の機器情報は、フィールド値として、機器２０のＩＰアドレスが設定される。また、フィールド名「ＩＰアドレス」の機器情報の読取範囲は「全域」であり、書換範囲は「ライブラリ内」である。これは、フィールド名「ＩＰアドレス」の機器情報は、印刷ライブラリ１２０以外のプログラム（ベンダ開発プログラム１１０）からも読み取り可能であるが、書き替え（フィールド値の更新）は不可であることを示している。
【００５９】
フィールド名「モデル名」の機器情報は、フィールド値として、機器２０のモデル名（例えば型番等）が設定される。また、フィールド名「モデル名」の機器情報の読取範囲は「全域」であり、書換範囲は「ライブラリ内」である。これは、フィールド名「モデル名」の機器情報は、印刷ライブラリ１２０以外のプログラムからも読み取り可能であるが、書き替えは不可であることを示している。
【００６０】
フィールド名「サポートＰＤＬ」の機器情報は、フィールド値として、機器２０が解釈可能なデータ形式名が設定される。また、フィールド名「サポートＰＤＬ」の機器情報の読取範囲及び書換範囲は「ライブラリ内」である。これは、フィールド名「サポートＰＤＬ」の機器情報は、印刷ライブラリ１２０以外のプログラムからは読み取りも書き換えも不可であることを示している。
【００６１】
フィールド名「ネットワーク情報」の機器情報は、フィールド値として、機器２０のＳＳＩＤ（Service Set Identifier）や暗号化方式、アクセスポイントのパスワード等が設定される。また、フィールド名「ネットワーク情報」の機器情報の読取範囲及び書換範囲は「ライブラリ内」である。これは、フィールド名「ネットワーク情報」の機器情報は、印刷ライブラリ１２０以外のプログラムからは読み取りも書き換えも不可であることを示している。
【００６２】
以上のように、機器情報インスタンス２００には、当該機器情報インスタンス２００が保持している機器情報の読取範囲及び書換範囲が設定されている。これにより、機器２０の製造元企業は、サードベンダにより開発されたベンダ開発プログラム１１０が不要な機器情報を参照したり、不正に機器情報を書き換えたりすることを防止することができる。なお、機器情報インスタンス２００が保持する機器情報は、上記の「ＩＰアドレス」、「モデル名」、「サポートＰＤＬ」、及び「ネットワーク情報」に限られない。機器情報インスタンス２００は、例えば、機器番号や製造年月日、製造元企業の情報等、種々の機器情報を保持しても良い。
【００６３】
次に、印刷設定情報インスタンス３００について、図７を参照しながら説明する。図７は、印刷設定情報インスタンス３００の一例を示す図である。
【００６４】
図７に示すように、印刷設定情報インスタンス３００は、フィールド名「部数」の印刷設定情報と、フィールド名「印刷ページ範囲」の印刷設定情報と、フィールド名「印刷カラー」の印刷設定情報とを保持する。
【００６５】
フィールド名「部数」の印刷設定情報は、フィールド値として、ユーザにより指定された印刷部数（又はデフォルトの印刷部数）が設定される。また、フィールド名「部数」の印刷設定情報の読取範囲及び書換範囲は「全域」である。これは、フィールド名「部数」の印刷設定情報は、印刷ライブラリ１２０以外のプログラムから読み取りも書き換えも可能であることを示している。
【００６６】
フィールド名「印刷ページ範囲」の印刷設定情報は、フィールド値として、ユーザにより指定された印刷ページ範囲（又はデフォルトの印刷ページ範囲）が設定される。また、フィールド名「印刷ページ範囲」の印刷設定情報の読取範囲及び書換範囲は「全域」である。これは、フィールド名「印刷ページ範囲」の印刷設定情報は、印刷ライブラリ１２０以外のプログラムから読み取りも書き換えも可能であることを示している。
【００６７】
フィールド名「印刷カラー」の印刷設定情報は、フィールド値として、ユーザにより指定された印刷カラー（又はデフォルトの印刷カラー）が設定される。また、フィールド名「印刷カラー」の印刷設定情報の読取範囲及び書換範囲は「全域」である。これは、フィールド名「印刷カラー」の印刷設定情報は、印刷ライブラリ１２０以外のプログラムから読み取りも書き換えも可能であることを示している。
【００６８】
以上のように、印刷設定情報インスタンス３００には、当該印刷設定情報インスタンス３００が保持している印刷設定情報の読取範囲及び書換範囲が設定されている。これにより、機器２０の製造元企業は、サードベンダにより開発されたベンダ開発プログラム１１０が不要な印刷設定情報を参照したり、例えばデフォルト値のみが適用される印刷設定情報が書き換えられたりすることを防止することができる。なお、印刷設定情報インスタンス３００が保持する印刷設定情報は、上記の「部数」、「印刷ページ範囲」、及び「印刷カラー」に限られない。印刷設定情報インスタンス３００は、例えば、地紋印刷の有無、集約の有無、両面印刷の有無等、種々の印刷設定情報を保持しても良い。
【００６９】
ここで、上記の機器情報インスタンス２００及び印刷設定情報インスタンス３００の読取範囲及び書換範囲は、Ｊａｖａ言語のパッケージを用いて実現することができる。例えば、図８に示すように、ベンダ開発プログラム１１０に定義された各クラスが属するパッケージと、印刷ライブラリ１２０に定義された各クラスが属するパッケージとを異なるパッケージとする。
【００７０】
これにより、機器情報インスタンス２００が保持するフィールド（すなわち、機器情報）を操作するメソッドに対してアクセスレベルを定義することで、このフィールドの読取範囲及び書換範囲を制限することができる。同様に、印刷設定情報インスタンス３００が保持するフィールド（すなわち、印刷設定情報）を操作するメソッドに対してアクセスレベルを定義することで、このフィールドの読取範囲及び書換範囲を制限することができる。以降では、印刷ライブラリ１２０に定義された各クラスが属するパッケージのパッケージ名を「ｐｒｉｎｔｌｉｂｒａｒｙ」とする。
【００７１】
なお、図８に示す例では、ベンダ開発プログラム１１０に定義された各クラスが同一のパッケージに属する場合を示しているが、これに限られず、例えば、これらの各クラスが異なるパッケージに属していても良い。
【００７２】
ここで、機器情報インスタンス２００を実現する機器情報クラス１１００について、図９を参照しながら説明する。図９は、機器情報クラス１１００の一例を示す図である。機器情報インスタンス２００は、例えば図９に示す機器情報クラス１１００をインスタンス化することで生成される。
【００７３】
図９に示すように、機器情報クラス１１００には、パッケージ宣言１１０１と、クラス宣言１１０２とが含まれる。パッケージ宣言１１０１には、パッケージ名「ｐｒｉｎｔｌｉｂｒａｒｙ」が定義されている。クラス宣言１１０２には、各機器情報に対するメソッド宣言１１０３〜１１１０が含まれる。
【００７４】
メソッド宣言１１０３には、フィールド名「ＩＰアドレス」の機器情報を取得（読み取る）ためのメソッド「ｇｅｔＩＰＡｄｄｒｅｓｓ」が定義されている。また、メソッド宣言１１０３には、このメソッド「ｇｅｔＩＰＡｄｄｒｅｓｓ」のアクセスレベルを示す修飾子（以降では、「アクセス修飾子」と表す。）「ｐｕｂｌｉｃ」が定義されている。このため、メソッド「ｇｅｔＩＰＡｄｄｒｅｓｓ」は、同一パッケージ以外のパッケージに属するクラス（すなわち、印刷ライブラリ１２０以外のプログラムに定義されたクラス）からも呼び出すことができる。これにより、フィールド名「ＩＰアドレス」の機器情報の読取範囲「全域」が実現され、当該機器情報をベンダ開発プログラム１１０からも読み取ることができるようになる。
【００７５】
メソッド宣言１１０４には、フィールド名「ＩＰアドレス」の機器情報を更新（書き換える）ためのメソッド「ｓｅｔＩＰＡｄｄｒｅｓｓ」が定義されている。また、メソッド宣言１１０４では、このメソッド「ｓｅｔＩＰＡｄｄｒｅｓｓ」のアクセス修飾子が定義されていない。このため、メソッド「ｓｅｔＩＰＡｄｄｒｅｓｓ」は、同一パッケージ内のクラス（すなわち、印刷ライブラリ１２０に定義されたクラス）からのみ呼び出すことができる。これにより、フィールド名「ＩＰアドレス」の機器情報の書換範囲「ライブラリ内」が実現され、当該機器情報を印刷ライブラリ１２０以外のプログラムからは書き換えすることができないようになる。なお、アクセス修飾子がメソッドに対して定義されていない場合、このメソッドのアクセスレベルは、同一パッケージ内からのみ呼び出し可能となる。すなわち、この場合、同一パッケージでないベンダ開発プログラム１１０からは、当該メソッドを呼び出すことができない。
【００７６】
メソッド宣言１１０５には、フィールド名「モデル名」の機器情報を読み取るためのメソッド「ｇｅｔＭｏｄｅｌＮａｍｅ」が定義されている。また、メソッド宣言１１０５には、このメソッド「ｇｅｔＭｏｄｅｌＮａｍｅ」のアクセス修飾子「ｐｕｂｌｉｃ」が定義されている。これにより、メソッド「ｇｅｔＩＰＡｄｄｒｅｓｓ」と同様に、フィールド名「モデル名」の機器情報の読取範囲「全域」が実現される。
【００７７】
メソッド宣言１１０６には、フィールド名「モデル名」の機器情報を書き換えるためのメソッド「ｓｅｔＭｏｄｅｌＮａｍｅ」が定義されている。また、メソッド宣言１１０６では、このメソッド「ｓｅｔＭｏｄｅｌＮａｍｅ」のアクセス修飾子が定義されていない。これにより、メソッド「ｓｅｔＩＰＡｄｄｒｅｓｓ」と同様に、フィールド名「モデル名」の機器情報の書換範囲「ライブラリ内」が実現される。
【００７８】
メソッド宣言１１０７には、フィールド名「サポートＰＤＬ」の機器情報を読み取るためのメソッド「ｇｅｔＳｕｐｐｏｒｔＰＤＬ」が定義されている。また、メソッド宣言１１０７では、このメソッド「ｇｅｔＳｕｐｐｏｒｔＰＤＬ」のアクセス修飾子が定義されていない。これにより、上記と同様に、フィールド名「サポートＰＤＬ」の機器情報の読取範囲「ライブラリ内」が実現される。
【００７９】
メソッド宣言１１０８には、フィールド名「サポートＰＤＬ」の機器情報を書き換えるためのメソッド「ｓｅｔＳｕｐｐｏｒｔＰＤＬ」が定義されている。また、メソッド宣言１１０８では、このメソッド「ｓｅｔＳｕｐｐｏｒｔＰＤＬ」のアクセス修飾子が定義されていない。これにより、上記と同様に、フィールド名「サポートＰＤＬ」の機器情報の書換範囲「ライブラリ内」が実現される。
【００８０】
メソッド宣言１１０９には、フィールド名「ネットワーク情報」の機器情報を読み取るためのメソッド「ｇｅｔＮｅｔｗｏｒｋＩｎｆｏ」が定義されている。また、メソッド宣言１１０９では、このメソッド「ｇｅｔＮｅｔｗｏｒｋＩｎｆｏ」のアクセス修飾子が定義されていない。これにより、上記と同様に、フィールド名「ネットワーク情報」の機器情報の読取範囲「ライブラリ内」が実現される。
【００８１】
メソッド宣言１１１０には、フィールド名「ネットワーク情報」の機器情報を書き換えるためのメソッド「ｓｅｔＮｅｔｗｏｒｋＩｎｆｏ」が定義されている。また、メソッド宣言１１０８では、このメソッド「ｓｅｔＮｅｔｗｏｒｋＩｎｆｏ」のアクセス修飾子が定義されていない。これにより、上記と同様に、フィールド名「ネットワーク情報」の機器情報の書換範囲「ライブラリ内」が実現される。
【００８２】
以上のように、機器情報クラス１１００では、機器情報を操作（読み取り又は書き換え）するためのメソッドに対して、アクセス修飾子「ｐｕｂｌｉｃ」を定義することで、他のパッケージに属するクラスからも機器情報に対する操作を行うことができるようになる。一方で、機器情報クラス１１００では、機器情報を操作するためのメソッドに対して、アクセス修飾子を定義しないことで、他のパッケージに属するクラスからは機器情報に対する操作を行えないようにすることができる。
【００８３】
なお、機器情報インスタンス２００に対する機器情報の設定は、例えば、この機器情報インスタンス２００の生成時に行っても良い。この場合、初期設定用のパラメータを引数として受け取って、機器情報の初期化を行うメソッド（コンストラクタ）がベンダ開発プログラム１１０のプログラムコード内に定義されている必要がある。コンストラクタは、引数として、ＩＰアドレス、モデル名、サポートＰＤＬ、及びネットワーク情報を受け取って、メソッド宣言１１０３、１１０５、１１０７、１１０９に定義された各メソッドでＩＰアドレス、モデル名、サポートＰＤＬ、及びネットワーク情報をそれぞれ取得可能なように定義されていれば良い。また、機器情報インスタンス２００の生成後は機器情報が変更されない場合、メソッド宣言１１０４、１１０６、１１０８、１１１０は不要であるため、この場合、これらのメソッド宣言は機器情報クラス１１００に定義されていなくても良い。
【００８４】
次に、印刷設定情報インスタンス３００を実現する印刷設定情報クラス１２００について、図１０を参照しながら説明する。図１０は、印刷設定情報クラス１２００の一例を示す図である。印刷設定情報インスタンス３００は、例えば図１０に示す印刷設定情報クラス１２００をインスタンス化することで生成される。
【００８５】
図１０に示すように、印刷設定情報クラス１２００には、パッケージ宣言１２０１と、クラス宣言１２０２とが含まれる。パッケージ宣言１２０１には、パッケージ名「ｐｒｉｎｔｌｉｂｒａｒｙ」が定義されている。クラス宣言１２０２には、各印刷設定情報に対するメソッド宣言１２０３〜１２０８が含まれる。
【００８６】
メソッド宣言１２０３には、フィールド名「部数」の印刷設定情報を読み取るためのメソッド「ｇｅｔＣｏｐｉｅｓ」が定義されている。また、メソッド宣言１２０３には、このメソッド「ｇｅｔＣｏｐｉｅｓ」のアクセス修飾子「ｐｕｂｌｉｃ」が定義されている。これにより、機器情報クラス１１００で説明したのと同様に、フィールド名「部数」の印刷設定情報の読取範囲「全域」が実現される。
【００８７】
メソッド宣言１２０４には、フィールド名「部数」の印刷設定情報を書き換えるためのメソッド「ｓｅｔＣｏｐｉｅｓ」が定義されている。また、メソッド宣言１２０４には、このメソッド「ｓｅｔＣｏｐｉｅｓ」のアクセス修飾子「ｐｕｂｌｉｃ」が定義されている。これにより、機器情報クラス１１００で説明したのと同様に、フィールド名「部数」の印刷設定情報の書換範囲「全域」が実現される。
【００８８】
メソッド宣言１２０５には、フィールド名「印刷ページ範囲」の印刷設定情報を読み取るためのメソッド「ｇｅｔＰｒｉｎｔＰａｇｅ」が定義されている。また、メソッド宣言１２０５には、このメソッド「ｇｅｔＰｒｉｎｔＰａｇｅ」のアクセス修飾子「ｐｕｂｌｉｃ」が定義されている。これにより、上記と同様に、フィールド名「印刷ページ範囲」の印刷設定情報の読取範囲「全域」が実現される。
【００８９】
メソッド宣言１２０６には、フィールド名「印刷ページ範囲」の印刷設定情報を書き換えるためのメソッド「ｓｅｔＰｒｉｎｔＰａｇｅ」が定義されている。また、メソッド宣言１２０６には、このメソッド「ｓｅｔＰｒｉｎｔＰａｇｅ」のアクセス修飾子「ｐｕｂｌｉｃ」が定義されている。これにより、上記と同様に、フィールド名「印刷ページ範囲」の印刷設定情報の書換範囲「全域」が実現される。
【００９０】
メソッド宣言１２０７には、フィールド名「印刷カラー」の印刷設定情報を読み取るためのメソッド「ｇｅｔＣｏｌｏｒ」が定義されている。また、メソッド宣言１２０７には、このメソッド「ｇｅｔＣｏｌｏｒ」のアクセス修飾子「ｐｕｂｌｉｃ」が定義されている。これにより、上記と同様に、フィールド名「印刷カラー」の印刷設定情報の読取範囲「全域」が実現される。
【００９１】
メソッド宣言１２０８には、フィールド名「印刷カラー」の印刷設定情報を書き換えるためのメソッド「ｓｅｔＣｏｌｏｒ」が定義されている。また、メソッド宣言１２０８には、このメソッド「ｓｅｔＣｏｌｏｒ」のアクセス修飾子「ｐｕｂｌｉｃ」が定義されている。これにより、上記と同様に、フィールド名「印刷カラー」の印刷設定情報の書換範囲「全域」が実現される。
【００９２】
以上のように、印刷設定情報クラス１２００では、印刷設定情報を操作（読み取り又は書き換え）するためのメソッドに対して、アクセス修飾子「ｐｕｂｌｉｃ」を定義することで、他のパッケージに属するクラスからも印刷設定情報に対する操作を行うことができるようになる。一方で、印刷設定情報クラス１２００では、印刷設定情報を操作するためのメソッドに対して、アクセス修飾子を定義しないことで、他のパッケージに属するクラスからは印刷設定情報に対する操作を行えないようにすることができる。
【００９３】
次に、機器情報取得部１２１を実現する機器情報取得クラス１３００について、図１１を参照しながら説明する。図１１は、機器情報取得クラス１３００の一例を示す図である。機器情報取得部１２１は、例えば図１１に示す機器情報取得クラス１３００をインスタンス化することで生成される。
【００９４】
図１１に示すように、機器情報取得クラス１３００には、パッケージ宣言１３０１と、クラス宣言１３０２とが含まれる。パッケージ宣言１３０１には、パッケージ名「ｐｒｉｎｔｌｉｂｒａｒｙ」が定義されている。クラス宣言１３０２には、メソッド宣言１３０３が含まれる。
【００９５】
メソッド宣言１３０３には、機器２０から機器情報を取得するためのメソッド「ｇｅｔＭｆｐＩｎｆｏ」が定義されている。また、メソッド宣言１３０３には、このメソッド「ｇｅｔＭｆｐＩｎｆｏ」のアクセス修飾子「ｐｕｂｌｉｃ」が定義されている。これにより、メソッド「ｇｅｔＭｆｐＩｎｆｏ」は、同一パッケージ以外のパッケージに属するクラス（すなわち、印刷ライブラリ１２０以外のプログラムに定義されたクラス）からも呼び出すことができる。
【００９６】
次に、印刷処理部１２２を実現する印刷処理クラス１４００について、図１２を参照しながら説明する。図１２は、印刷処理クラス１４００の一例を示す図である。印刷処理部１２２は、例えば図１２に示す印刷処理クラス１４００をインスタンス化することで生成される。
【００９７】
図１２に示すように、印刷処理クラス１４００には、パッケージ宣言１４０１と、クラス宣言１４０２とが含まれる。パッケージ宣言１４０１には、パッケージ名「ｐｒｉｎｔｌｉｂｒａｒｙ」が定義されている。クラス宣言１４０２には、メソッド宣言１４０３が含まれる。
【００９８】
メソッド宣言１４０３には、印刷要求を機器２０に送信するためのメソッド「ｐｒｉｎｔ」が定義されている。また、メソッド宣言１４０３には、このメソッド「ｐｒｉｎｔ」のアクセス修飾子「ｐｕｂｌｉｃ」が定義されている。これにより、メソッド「ｐｒｉｎｔ」は、同一パッケージ以外のパッケージに属するクラス（すなわち、印刷ライブラリ１２０以外のプログラムに定義されたクラス）からも呼び出すことができる。
【００９９】
なお、メソッド宣言１４０３には、メソッド「ｐｒｉｎｔ」の引数として、「ＭｆｐＩｎｆｏ  ｉｎｆｏ」と、「ＰｒｉｎｔＤａｔａ  ｄａｔａ」と、「ＰｒｉｎｔＳｅｔｔｉｎｇ  ｓｅｔｔｉｎｇ」とが定義されている。これは、メソッド「ｐｒｉｎｔ」の引数として、機器情報と、印刷対象データと、印刷設定情報とが指定されることを示している。
【０１００】
次に、ベンダ開発プログラム１１０のプログラムコード１５００について、図１３を参照しながら説明する。図１３は、ベンダ開発プログラム１１０のプログラムコード１５００の一例を示す図である。なお、図１３では、一例として、機器情報取得要求部１１１と、印刷対象データ設定部１１３と、印刷設定部１１４と、印刷実行要求部１１６とにそれぞれ対応するコードが定義されたプログラムコード１５００について説明する。表示制御部１１２や実行操作受付部１１５等に対応するコードは別途それぞれ定義する必要がある。
【０１０１】
図１３に示すように、プログラムコード１５００には、パッケージ宣言１５０１と、クラス宣言１５０２とが含まれる。パッケージ宣言１５０１には、パッケージ名「ｐｒｉｎｔａｐｐ」が定義されている。このため、ベンダ開発プログラム１１０は、パッケージ名「ｐｒｉｎｔｌｉｂｒａｒｙ」に属する各クラスに定義されたメソッドのうち、アクセス修飾子「ｐｕｂｌｉｃ」が定義されていないメソッドを呼び出すことができない。
【０１０２】
クラス宣言１５０２には、印刷実行クラス１５０３が含まれる。そして、印刷実行クラス１５０３には、機器情報取得要求部１１１に対応するコードが定義されたコード定義１５０４と、印刷設定部１１４に対応するコードが定義されたコード定義１５０５とが含まれる。また、印刷実行クラス１５０３には、印刷対象データ設定部１１３に対応するコードが定義されたコード定義１５０６と、印刷実行要求部１１６に対応するコードが定義されたコード定義１５０７とが含まれる。
【０１０３】
コード定義１５０７に示すように、ベンダ開発プログラム１１０は、パッケージ名「ｐｒｉｎｔｌｉｂｒａｒｙ」に属する印刷処理クラス１４００のメソッド「ｐｒｉｎｔ」を呼び出す際に、機器情報インスタンス２００を示す「ｉｎｆｏ」を引数に指定する。これにより、メソッド「ｐｒｉｎｔ」における処理で、機器情報インスタンス２００のアクセス修飾子「ｐｕｂｌｉｃ」が定義されていないメソッドを呼び出した上で、機器２０に対して、処理要求（印刷要求）を行うことができる。例えば、メソッド「ｐｒｉｎｔ」における処理で、機器情報インスタンス２００を示す「ｉｎｆｏ」のメソッド「ｇｅｔＳｕｐｐｏｒｔＰＤＬ」を呼び出してフィールド名「サポートＰＤＬ」の機器情報を取得した上で、この機器情報を指定した印刷要求を機器２０に行うことができる。
【０１０４】
このため、印刷アプリケーション１００は、機器２０に対して、ベンダ開発プログラム１１０が操作することができない情報（例えば、フィールド名「サポートＰＤＬ」の機器情報やフィールド名「ネットワーク情報」の機器情報）を使用した処理要求（印刷要求）を行うことが可能となる。
【０１０５】
＜印刷処理＞
次に、本実施形態に係る印刷システム１の印刷処理について説明する。以降では、端末装置１０のユーザが、印刷アプリケーション１００を用いて、機器２０で印刷を行う場合の処理について、図１４を参照しながら説明する。図１４は、第一の実施形態に係る印刷処理の一例を示すシーケンス図である。
【０１０６】
以降の図１４では、機器情報クラス１１００及び印刷設定情報クラス１２００を除いて、ベンダ開発プログラム１１０及び印刷ライブラリ１２０に定義されている各クラスはインスタンス化されているものとして説明する。なお、ベンダ開発プログラム１１０及び印刷ライブラリ１２０に定義されている各クラスで、インスタンス化されていないクラスがあっても良い。この場合、当該クラスにより実現される機能部（インスタンス）の処理を実行する前に、適宜、インスタンス化されれば良い。また、機器情報クラス１１００及び印刷設定情報クラス１２００も予めインスタンス化されていても良い。
【０１０７】
まず、ベンダ開発プログラム１１０の機器情報取得要求部１１１は、ユーザによる機器情報の取得操作を受け付ける（ステップＳ１０１）。ユーザは、例えば、表示制御部１１２により表示された所定の画面において、近くに設置されている機器２０の一覧の中から所望の機器２０を選択する操作を行うことで、機器情報の取得操作を行うことができる。又は、例えば、機器２０の筐体に貼り付け等されているＱＲコード（登録商標）を端末装置１０のカメラで撮像することで、機器情報の取得操作を行っても良い。
【０１０８】
ベンダ開発プログラム１１０の機器情報取得要求部１１１は、ユーザによる機器情報の取得操作を受け付けると、機器情報の取得を機器情報取得部１２１に要求する（ステップＳ１０２）。機器情報取得要求部１１１は、機器情報取得クラス１３００のメソッド宣言１３０３に定義されているメソッド「ｇｅｔＭｆｐＩｎｆｏ」を呼び出すことで、機器情報の取得要求を行うことができる。
【０１０９】
印刷ライブラリ１２０の機器情報取得部１２１は、機器情報の取得要求を受け取ると、機器２０に対して、機器情報の問い合わせを行う（ステップＳ１０３）。機器情報取得部１２１は、例えばＢｌｕｅｔｏｏｔｈ等の近距離無線通信により、機器２０に対して、機器情報の問い合わせを行うことができる。なお、近距離無線通信は、Ｂｌｕｅｔｏｏｔｈに限られず、例えば、ＢＬＥ（Bluetooth Low Energy）やＺｉｇｂｅｅ等であっても良い。又は、赤外線やＲＦＩＤ（Radio Frequency Identification）等が用いられても良い。
【０１１０】
そして、機器情報取得部１２１は、上記の問い合わせに応じて機器２０から返信された機器情報を受信する。これにより、機器情報取得部１２１は、ＩＰアドレス、モデル名、サポートＰＤＬ、ネットワーク情報等の機器情報を機器２０から取得することができる。
【０１１１】
なお、上記のステップＳ１０３では、Ｂｌｕｅｔｏｏｔｈ等の近距離無線通信により機器２０から機器情報を取得する場合について説明したが、これに限られない。機器情報取得部１２１は、例えば、機器２０の筐体に貼り付け等されているＱＲコードをカメラで撮像することで、このＱＲコードに埋め込まれている機器情報を取得しても良い。又は、機器情報取得部１２１は、近距離無線通信以外の無線通信（例えば、Ｗｉ−Ｆｉ等）により、機器２０から機器情報を取得しても良い。例えば、端末装置１０は、自身のＩＰアドレスを機器２０に通知した上で、この通知に対する応答として、Ｗｉ−Ｆｉ等の無線通信により、機器情報を機器２０から取得しても良い。
【０１１２】
印刷ライブラリ１２０の機器情報取得部１２１は、機器２０から機器情報を取得すると、機器情報インスタンス２００を生成する（ステップＳ１０４）。機器情報インスタンス２００は、機器情報クラス１１００をインスタンス化することで生成される。
【０１１３】
次に、印刷ライブラリ１２０の機器情報取得部１２１は、機器２０から取得した機器情報を機器情報インスタンス２００に設定する（ステップＳ１０５）。
【０１１４】
すなわち、機器情報取得部１２１は、機器２０から取得したＩＰアドレスを引数に指定した上で、機器情報クラス１１００のメソッド宣言１１０４に定義されているメソッド「ｓｅｔＩＰＡｄｄｒｅｓｓ」を呼び出す。これにより、フィールド名「ＩＰアドレス」の機器情報が機器情報インスタンス２００に設定される。
【０１１５】
同様に、機器情報取得部１２１は、機器２０から取得したモデル名を引数に指定した上で、機器情報クラス１１００のメソッド宣言１１０６に定義されているメソッド「ｓｅｔＭｏｄｅｌＮａｍｅ」を呼び出す。これにより、フィールド名「モデル名」の機器情報が機器情報インスタンス２００に設定される。
【０１１６】
同様に、機器情報取得部１２１は、機器２０から取得したサポートＰＤＬを引数に指定した上で、機器情報クラス１１００のメソッド宣言１１０８に定義されているメソッド「ｓｅｔＳｕｐｐｏｒｔＰＤＬ」を呼び出す。これにより、フィールド名「サポートＰＤＬ」の機器情報が機器情報インスタンス２００に設定される。
【０１１７】
同様に、機器情報取得部１２１は、機器２０から取得したネットワーク情報を引数に指定した上で、機器情報クラス１１００のメソッド宣言１１１０に定義されているメソッド「ｓｅｔＮｅｔｗｏｒｋＩｎｆｏ」を呼び出す。これにより、フィールド名「ネットワーク情報」の機器情報が機器情報インスタンス２００に設定される。
【０１１８】
そして、機器情報取得部１２１は、機器２０から取得した各機器情報が設定された機器情報インスタンス２００をベンダ開発プログラム１１０に返信する。
【０１１９】
ベンダ開発プログラム１１０の表示制御部１１２は、機器情報取得部１２１から返信された機器情報インスタンス２００から機器情報を取得する。そして、表示制御部１１２は、機器情報インスタンス２００から取得した機器情報を表示装置１２上に表示する（ステップＳ１０６）。
【０１２０】
このとき、表示制御部１１２は、機器情報インスタンス２００に保持されている機器情報のうち、読取範囲が「全域」となっている機器情報を取得することができる。すなわち、表示制御部１１２は、フィールド名「ＩＰアドレス」の機器情報と、フィールド名「モデル名」の機器情報とを機器情報インスタンス２００から取得することができる。表示制御部１１２は、機器情報クラス１１００のメソッド宣言１１０３に定義されているメソッド「ｇｅｔＩＰＡｄｄｒｅｓｓ」を呼び出すことで、フィールド名「ＩＰアドレス」の機器情報を機器情報インスタンス２００から取得することができる。同様に、表示制御部１１２は、機器情報クラス１１００のメソッド宣言１１０５に定義されているメソッド「ｇｅｔＭｏｄｅｌＮａｍｅ」を呼び出すことで、フィールド名「モデル名」の機器情報を取得することができる。
【０１２１】
なお、表示制御部１１２は、上記で取得した機器情報を用いて、後述するステップＳ１０９で印刷設定情報の指定操作を受け付けるための画面における選択肢を制限することができる。例えば、表示制御部１１２は、フィールド名「モデル名」の機器情報に基づいて、モノクロ印刷のみ対応した機器２０であることを判断して、印刷設定情報として「カラー」を指定できないように制限する（例えば、「カラー」を選択するための選択肢を非表示にする等）ことができる。
【０１２２】
また、表示制御部１１２は、例えば、複数の機器２０の機器情報を取得した場合には、これらの機器情報を用いて、ユーザが出力先の機器２０を選択するための機器一覧画面等を生成及び表示しても良い。機器一覧画面が表示されることで、ユーザは、複数の機器２０の中から出力先の機器２０（印刷実行する機器２０）を選択することができるようになる。
【０１２３】
一方で、表示制御部１１２は、フィールド名「サポートＰＤＬ」の機器情報と、フィールド名「ネットワーク情報」の機器情報とを機器情報インスタンス２００から取得することはできない。
【０１２４】
したがって、表示装置１２上には、表示制御部１１２により、機器２０のＩＰアドレスとモデル名とが表示される。これにより、例えば、サポートＰＤＬやネットワーク情報等、ユーザが必ずしも参照する必要のない機器情報が表示されることを防止することができる。
【０１２５】
ここで、上記のステップＳ１０６で表示装置１２上に表示される画面の一例として、印刷を実行する機器２０の機器情報を確認するための機器確認画面Ｇ１００を図１５に示す。図１５は、機器確認画面Ｇ１００の一例を示す図である。
【０１２６】
図１５に示す機器確認画面Ｇ１００には、機器情報表示欄Ｇ１１０が含まれる。機器情報表示欄Ｇ１１０には、機器情報インスタンス２００から取得可能な機器情報（すなわち、読取範囲が「全域」である機器情報。具体的には、フィールド名「ＩＰアドレス」の機器情報及びフィールド名「モデル名」の機器情報）が表示される。このように、表示制御部１１２は、機器情報インスタンス２００に保持されている機器情報のうち、読取範囲が「全域」となっている機器情報を機器情報表示欄Ｇ１１０に表示させる。
【０１２７】
一方で、表示制御部１１２は、機器情報インスタンス２００から取得することができない機器情報を機器情報表示欄Ｇ１１０に表示することはできない。すなわち、表示制御部１１２は、読取範囲が「ライブラリ内」である機器情報（具体的には、フィールド名「サポートＰＤＬ」の機器情報及びフィールド名「ネットワーク情報」の機器情報）を機器情報表示欄Ｇ１１０に表示することはできない。
【０１２８】
次に、ベンダ開発プログラム１１０の印刷対象データ設定部１１３は、ユーザによる印刷対象データの選択操作を受け付ける（ステップＳ１０７）。ユーザは、例えば、上記のステップＳ１０６で機器情報が表示されている画面からコンテンツデータの一覧画面に遷移させた上で、コンテンツデータの一覧画面から所望のコンテンツデータを選択することで、印刷対象データの選択操作を行うことができる。
【０１２９】
ベンダ開発プログラム１１０の印刷対象データ設定部１１３は、ユーザによる印刷対象データの選択操作を受け付けると、選択されたコンテンツデータを印刷対象データに設定する（ステップＳ１０８）。なお、上記のステップＳ１０１の処理が実行される前に、印刷対象データが予め設定されている場合等には、上記のステップＳ１０７及びステップＳ１０８の処理は実行されなくても良い。
【０１３０】
次に、ベンダ開発プログラム１１０の印刷設定部１１４は、ユーザによる印刷設定情報の指定操作を受け付ける（ステップＳ１０９）。ユーザは、例えば、印刷対象データを選択した後に表示される所定の画面において、各印刷設定情報の設定値を指定することで、印刷設定情報の指定操作を行うことができる。なお、ユーザが印刷設定情報を変更しない場合（すなわち、印刷設定情報の設定値としてデフォルト値を用いる場合）、本ステップの処理は実行されなくても良い。
【０１３１】
ベンダ開発プログラム１１０の印刷設定部１１４は、印刷設定情報インスタンス３００を生成する（ステップＳ１１０）。印刷設定情報インスタンス３００は、印刷設定情報クラス１２００をインスタンス化することで生成される。
【０１３２】
次に、ベンダ開発プログラム１１０の印刷設定部１１４は、上記のステップＳ１０９でユーザにより指定された印刷設定情報を印刷設定情報インスタンス３００に設定する（ステップＳ１１１）。
【０１３３】
すなわち、印刷設定部１１４は、ユーザにより指定された部数を引数に指定した上で、印刷設定情報クラス１２００のメソッド宣言１２０４に定義されているメソッド「ｓｅｔＣｏｐｉｅｓ」を呼び出す。これにより、フィールド名「部数」の印刷設定情報が印刷設定情報インスタンス３００に設定される。
【０１３４】
同様に、印刷設定部１１４は、ユーザにより指定された印刷ページ範囲を引数に指定した上で、印刷設定情報クラス１２００のメソッド宣言１２０６に定義されているメソッド「ｓｅｔＰｒｉｎｔＰａｇｅ」を呼び出す。これにより、フィールド名「印刷ページ範囲」の印刷設定情報が印刷設定情報インスタンス３００に設定される。
【０１３５】
同様に、印刷設定部１１４は、ユーザにより指定された印刷カラーを引数に指定した上で、印刷設定情報クラス１２００のメソッド宣言１２０８に定義されているメソッド「ｓｅｔＣｏｌｏｒ」を呼び出す。これにより、フィールド名「印刷カラー」の印刷設定情報が印刷設定情報インスタンス３００に設定される。
【０１３６】
なお、上記のステップＳ１０９で一部の印刷設定情報のみがユーザにより指定された場合（例えば、部数のみが指定された場合）、印刷設定部１１４は、ユーザにより指定された印刷設定情報のみを印刷設定情報インスタンス３００に設定しても良い。又は、印刷設定情報インスタンス３００が保持している各印刷設定情報がデフォルト値に初期化されていない場合は、印刷設定部１１４は、ユーザにより指定されていない印刷設定情報について、この印刷設定情報のデフォルト値を印刷設定情報インスタンス３００に設定しても良い。
【０１３７】
次に、ベンダ開発プログラム１１０の実行操作受付部１１５は、ユーザによる印刷実行操作を受け付ける（ステップＳ１１２）。ユーザは、例えば、印刷設定情報を指定した後に表示される所定の画面において、印刷実行ボタンを押下することで、印刷実行操作を行うことができる。
【０１３８】
ベンダ開発プログラム１１０の印刷実行要求部１１６は、実行操作受付部１１５により印刷実行操作が受け付けられると、印刷実行を印刷処理部１２２に要求する（ステップＳ１１３）。この印刷実行要求には、機器情報インスタンス２００と、印刷対象データと、印刷設定情報インスタンス３００とが含まれる。印刷実行要求部１１６は、機器情報インスタンス２００と、印刷対象データと、印刷設定情報インスタンス３００とを引数に指定した上で、印刷処理クラス１４００のメソッド宣言１４０３に定義されているメソッド「ｐｒｉｎｔ」を呼び出すことで、印刷実行要求を行うことができる。
【０１３９】
メソッド「ｐｒｉｎｔ」に対して機器情報インスタンス２００が引数に指定されることで、例えば、複数の機器情報インスタンス２００が存在する場合（すなわち、例えば、周囲に複数の機器２０が存在し、これら複数の機器２０からそれぞれ機器情報を取得した場合）、どの機器情報インスタンス２００を用いるかを指定することができるようになる。このため、ベンダ開発プログラム１１０からは操作することができない複数の情報を管理することができるようになる。
【０１４０】
例えば、複数の機器情報インスタンス２００が存在する場合、例えば、フィールド名「サポートＰＤＬ」の機器情報は機器２０毎に存在する。この場合、フィールド名「サポートＰＤＬ」の機器情報は、いずれもベンダ開発プログラム１１０からは参照することができない。このため、ベンダ開発プログラム１１０は、これらの機器情報のうちの一の機器情報を直接指定することはできないものの、機器情報インスタンス２００を指定することで、どの機器２０のサポートＰＤＬを用いるかを結果的に指定することができるようになる。
【０１４１】
印刷ライブラリ１２０の印刷処理部１２２は、印刷データ生成部１２３により、印刷実行要求に含まれる機器情報インスタンス２００からサポートＰＤＬを取得する（ステップＳ１１４）。すなわち、印刷データ生成部１２３は、機器情報インスタンス２００に保持されている機器情報のうち、フィールド名「サポートＰＤＬ」の機器情報を取得する。印刷データ生成部１２３は、機器情報クラス１１００のメソッド宣言１１０７に定義されているメソッド「ｇｅｔＳｕｐｐｒｏｔＰＤＬ」を呼び出すことで、フィールド名「サポートＰＤＬ」の機器情報を取得することができる。なお、印刷処理部１２２を実現する印刷処理クラス１４００と、機器情報クラス１１００とは同一のパッケージ「ｐｒｉｎｔｌｉｂｒａｒｙ」に属するため、印刷データ生成部１２３は、メソッド「ｇｅｔＳｕｐｐｒｏｔＰＤＬ」を呼び出すことができる。
【０１４２】
次に、印刷ライブラリ１２０の印刷処理部１２２は、印刷データ生成部１２３により、印刷実行要求に含まれる印刷設定情報インスタンス３００から各印刷設定情報を取得する（ステップＳ１１５）。すなわち、印刷データ生成部１２３は、印刷設定情報インスタンス３００に保持されている印刷設定情報を取得する。印刷データ生成部１２３は、印刷設定情報クラス１２００のメソッド宣言１２０３、メソッド宣言１２０５、及びメソッド宣言１２０７にそれぞれ定義されているメソッドを呼び出すことで、各印刷設定情報を取得することができる。
【０１４３】
次に、印刷ライブラリ１２０の印刷処理部１２２は、印刷データ生成部１２３により、印刷データを生成する（ステップＳ１１６）。すなわち、印刷データ生成部１２３は、上記のステップＳ１１４で取得されたサポートＰＤＬと、上記のステップＳ１１５で取得された印刷設定情報とを用いて、印刷対象データから印刷データを生成する。このとき、印刷データ生成部１２３は、上記のステップＳ１１４で取得されたサポートＰＤＬが示すデータ形式の印刷データを生成する。
【０１４４】
次に、印刷ライブラリ１２０の印刷処理部１２２は、印刷要求部１２４により、印刷実行要求に含まれる機器情報インスタンス２００からネットワーク情報を取得する（ステップＳ１１７）。すなわち、印刷要求部１２４は、機器情報インスタンス２００に保持されている機器情報のうち、フィールド名「ネットワーク情報」の機器情報を取得する。印刷要求部１２４は、機器情報クラス１１００のメソッド宣言１１０９に定義されているメソッド「ｇｅｔＮｅｔｗｏｒｋＩｎｆｏ」を呼び出すことで、フィールド名「ネットワーク情報」の機器情報を取得することができる。なお、印刷処理部１２２を実現する印刷処理クラス１４００と、機器情報クラス１１００とは同一のパッケージ「ｐｒｉｎｔｌｉｂｒａｒｙ」に属するため、印刷要求部１２４は、メソッド「ｇｅｔＮｅｔｗｏｒｋＩｎｆｏ」を呼び出すことができる。
【０１４５】
次に、印刷ライブラリ１２０の印刷処理部１２２は、印刷要求部１２４により、上記のステップＳ１１７で取得されたネットワーク情報に基づいて、機器２０との通信可否を判定する（ステップＳ１１８）。すなわち、印刷要求部１２４は、例えば、上記のステップＳ１１７で取得されたネットワーク情報に含まれるＳＳＩＤと、端末装置１０が接続しているアクセスポイントのＳＳＩＤとを比較することで、端末装置１０と機器２０とが通信可能であるか否かを判定する。
【０１４６】
なお、通信可能であるか否かは、例えば、これらのＳＳＩＤを比較して、端末装置１０と機器２０とが同一ネットワーク内にあるか否かを判定すれば良い。ただし、これに限られず、例えば、端末装置１０の通信方式と、機器２０の通信方式とを比較して、端末装置１０と機器２０とが通信可能であるか否かを判定しても良い。
【０１４７】
ステップＳ１１８において、機器２０と通信可能であると判定された場合、印刷ライブラリ１２０の印刷処理部１２２は、印刷要求部１２４により、印刷実行要求に含まれる機器情報インスタンス２００からＩＰアドレスを取得する（ステップＳ１１９）。すなわち、印刷要求部１２４は、機器情報インスタンス２００に保持されている機器情報のうち、フィールド名「ＩＰアドレス」の機器情報を取得する。印刷要求部１２４は、機器情報クラス１１００のメソッド宣言１１０３に定義されているメソッド「ｇｅｔＩＰＡｄｄｒｅｓｓ」を呼び出すことで、フィールド名「ＩＰアドレス」の機器情報を取得することができる。
【０１４８】
次に、印刷ライブラリ１２０の印刷処理部１２２は、印刷要求部１２４により、印刷要求を機器２０に送信する（ステップＳ１２０）。すなわち、印刷要求部１２４は、例えばＷｉ−Ｆｉ等の無線ＬＡＮにより、上記のステップＳ１１９で取得されたＩＰアドレス宛に印刷要求を送信する。印刷要求には、上記のステップＳ１１６で生成された印刷データが含まれる。これにより、印刷要求を受信した機器２０において印刷データの印刷が行われ、印刷結果が返信される。
【０１４９】
一方で、ステップＳ１１８において、機器２０と通信可能でないと判定された場合、印刷ライブラリ１２０の印刷処理部１２２は、印刷要求部１２４により、ベンダ開発プログラム１１０にエラーを返信する。これにより、例えば、印刷を行うことができないことを示すエラー画面が表示装置１２上に表示される。
【０１５０】
＜第一の実施形態のまとめ＞
以上のように、本実施形態に係る印刷システム１では、機器２０の製造元企業が提供する印刷ライブラリ１２０により管理される各種情報について、サードベンダにより開発されたベンダ開発プログラム１１０が読み取りや書き換えを制限することができる。これにより、本実施形態に係る印刷システム１では、印刷ライブラリ１２０により管理される各種情報について、ベンダ開発プログラム１１０により不正に書き換えられてしまったり、不要な情報が参照されてしまったりといった事態を防止することができる。
【０１５１】
また、本実施形態に係る印刷システム１では、ベンダ開発プログラム１１０による情報の書き換えを制限することで、機器２０の意図しない動作等を防止することができる。
【０１５２】
例えば、ベンダ開発プログラム１１０によりフィールド名「サポートＰＤＬ」の機器情報が書き換えられてしまった場合、図１４のステップＳ１１６で機器２０がサポートしていないデータ形式の印刷データが生成されてしまうことがある。このため、機器２０で意図しないエラー（印刷データのデータ形式エラー等）が発生することがある。
【０１５３】
また、例えば、フィールド名「ＩＰアドレス」の機器情報が書き換えられてしまった場合、図１４のステップＳ１２０で印刷要求が意図しない機器２０に送信されてしまうことがある。このため、意図しない機器２０で印刷が行われてしまうことができる。
【０１５４】
なお、本実施形態では、機器２０で印刷を行う場合について説明したが、例えば、機器２０でスキャンにより生成された画像データ（スキャン画像）をベンダ開発プログラム１１０が取得する場合についても同様に適用することができる。この場合、印刷ライブラリ１２０には、機器２０からスキャン画像を取得するためのクラス（スキャン画像取得クラス）が定義されていれば良い。そして、スキャン画像取得クラスにより実現されるスキャン画像取得部が、機器情報に基づいて、機器２０からスキャン画像を取得すれば良い。
【０１５５】
［第二の実施形態］
次に、第二の実施形態について説明する。第一の実施形態では機器２０がＭＦＰである場合について説明したが、第二の実施形態では機器２０がプロジェクタである場合について説明する。
【０１５６】
なお、第二の実施形態では、主に、第一の実施形態との相違点について説明し、第一の実施形態と同様の構成要素については、適宜、その説明を省略又は簡略化する。
【０１５７】
＜全体構成＞
まず、本実施形態に係る投影システム２の全体構成について、図１６を参照しながら説明する。図１６は、第二の実施形態に係る投影システム２の全体構成の一例を示す図である。
【０１５８】
図１６に示すように、本実施形態に係る投影システム２には、１台以上の端末装置１０と、１台以上の機器２０とが含まれる。また、端末装置１０と機器２０とは、例えば、Ｂｌｕｅｔｏｏｔｈ等の近距離無線通信を用いて、通信可能に接続される。更に、端末装置１０と機器２０とは、例えば、Ｗｉ−Ｆｉ等の無線ＬＡＮを用いて、通信可能に接続される。
【０１５９】
機器２０は、プロジェクタ等の投影装置である。機器２０は、端末装置１０からの要求に応じて、投影処理を行う。なお、機器２０のハードウェア構成としては、例えば、一般的なプロジェクタのハードウェア構成とすれば良い。
【０１６０】
端末装置１０は、スマートフォン等の情報処理装置である。端末装置１０には、サードベンダにより開発され、機器２０と連携した処理を行う投影アプリケーション４００がインストールされている。端末装置１０のユーザは、投影アプリケーション４００を用いて、機器２０で画像の投影を行うことができる。なお、端末装置１０のハードウェア構成は第一の実施形態と同様である。
【０１６１】
なお、端末装置１０は、第一の実施形態と同様に、スマートフォンに限られず、例えば、タブレット端末、ノート型ＰＣ（パーソナルコンピュータ）、デスクトップ型ＰＣ、ゲーム機器、デジタルカメラ、ウェアラブルデバイス等であっても良い。
【０１６２】
＜投影アプリケーション４００の構成＞
ここで、サードベンダにより開発された投影アプリケーション４００の構成について、図１７を参照しながら説明する。図１７は、投影アプリケーション４００の構成の一例を説明する図である。
【０１６３】
図１７に示すように、投影アプリケーション４００は、サードベンダにより開発され、独自の機能を提供するプログラムであるベンダ開発プログラム４１０と、機器２０の製造元企業が提供するＡＰＩ群である投影ライブラリ４２０とを有する。
【０１６４】
投影ライブラリ４２０は、投影機能を提供するためのプログラムである。投影ライブラリ４２０には、例えば、機器２０から機器情報を取得するためのＡＰＩや機器２０に対して投影を要求するためのＡＰＩ等が定義されている。このため、ベンダ開発プログラム４１０は、投影ライブラリ４２０に定義されたＡＰＩを呼び出すことで、機器２０からの機器情報の取得や機器２０への投影要求等、機器２０と連携した処理を実現することができる。
【０１６５】
なお、第一の実施形態と同様に、ベンダ開発プログラム４１０及び投影ライブラリ４２０は、Ｊａｖａ言語で開発されたプログラムであるものとする。
【０１６６】
＜機能構成＞
次に、本実施形態に係る端末装置１０の機能構成について、図１８を参照しながら説明する。図１８は、第二の実施形態に係る端末装置１０の機能構成の一例を示す図である。
【０１６７】
図１８に示すように、本実施形態に係る端末装置１０は、機器情報取得要求部４１１と、表示制御部４１２と、投影対象データ設定部４１３と、投影設定部４１４と、実行操作受付部４１５と、投影実行要求部４１６とを有する。これら各部は、ベンダ開発プログラム４１０がＣＰＵ１６に実行させる処理により実現される。
【０１６８】
また、本実施形態に係る端末装置１０は、機器情報取得部４２１と、投影処理部４２２とを有する。これら各部は、投影ライブラリ４２０がＣＰＵ１６に実行させる処理により実現される。
【０１６９】
機器情報取得要求部４１１は、ユーザによる機器情報の取得操作を受け付ける。また、機器情報取得要求部４１１は、ユーザによる機器情報の取得操作を受け付けると、機器情報の取得を機器情報取得部４２１に要求する。機器情報取得要求部４１１は、機器情報取得部４２１を実現するクラス（このクラスを、以降では「機器情報取得クラス２３００」と表す。）内のメソッドを呼び出すことで、機器情報の取得を要求することができる。
【０１７０】
表示制御部４１２は、機器情報取得部４２１により取得された機器情報を表示装置１２上に表示する。
【０１７１】
投影対象データ設定部４１３は、ユーザによる投影対象データの選択操作を受け付ける。投影対象データとは、ユーザが投影を所望するコンテンツデータのことである。コンテンツデータとしては、例えば、画像データや動画データ等が挙げられる。以降では、一例として、コンテンツデータは画像データであるものとする。
【０１７２】
また、投影対象データ設定部４１３は、ユーザによる投影対象データの選択操作を受け付けると、選択されたコンテンツデータを投影対象データに設定する。
【０１７３】
投影設定部４１４は、ユーザによる投影設定情報の指定操作を受け付ける。投影設定情報には、例えば、切替方法等がある。切替方法とは、投影対象の画像を他の画像に切り替える場合における切り替え時の表示態様のことである。
【０１７４】
また、投影設定部４１４は、ユーザによる投影設定情報の指定操作を受け付けると、各投影設定情報が保持される投影設定情報インスタンス６００を生成する。そして、投影設定部４１４は、ユーザにより指定された投影設定情報を投影設定情報インスタンス６００に設定する。投影設定部４１４は、投影設定情報インスタンス６００を実現するクラス（このクラスを、以降では「投影設定情報クラス２２００」と表す。）内のメソッドを呼び出すことで、投影設定情報を設定することができる。
【０１７５】
実行操作受付部４１５は、ユーザによる投影実行操作を受け付ける。投影実行要求部４１６は、実行操作受付部４１５により投影実行操作が受け付けられると、投影実行を投影処理部４２２に要求する。投影実行要求部４１６は、投影処理部４２２を実現するクラス（このクラスを、以降では「投影処理クラス２４００」と表す。）内のメソッドを呼び出すことで、投影実行を要求することができる。
【０１７６】
機器情報取得部４２１は、機器情報取得要求部４１１からの要求に応じて、機器２０から機器情報を取得する。このとき、機器情報取得部４２１は、例えばＢｌｕｅｔｏｏｔｈ等の近距離無線通信を用いて、機器２０から機器情報を取得する。機器情報には、例えば、ＩＰアドレス、モデル名、解像度、ネットワーク情報等がある。
【０１７７】
また、機器情報取得部４２１は、機器２０から機器情報を取得すると、取得した各機器情報が保持される機器情報インスタンス５００を生成する。そして、機器情報取得部４２１は、取得した機器情報を機器情報インスタンス５００に設定する。機器情報取得部４２１は、機器情報インスタンス５００を実現するクラス（このクラスを、以降では「機器情報クラス２１００」と表す。）内のメソッドを呼び出すことで、機器情報を設定することができる。
【０１７８】
投影処理部４２２は、投影実行要求部４１６からの要求に応じて、投影データを生成した上で、投影要求を機器２０に送信する。このとき、投影処理部４２２は、例えばＷｉ−Ｆｉ等の無線ＬＡＮを用いて、投影要求を機器２０に送信する。
【０１７９】
投影処理部４２２には、投影データ生成部４２３と、投影要求部４２４とが含まれる。投影データ生成部４２３は、投影データを生成する。投影データとは、投影対象データを機器２０が投影可能なデータ形式（例えば、機器２０が投影可能な解像度のデータ形式）に変換したデータである。投影要求部４２４は、投影データ生成部４２３により生成された投影データが含まれる投影要求を機器２０に送信する。
【０１８０】
ここで、機器情報インスタンス５００について、図１９を参照しながら説明する。図１９は、機器情報インスタンス５００の一例を示す図である。
【０１８１】
図１９に示すように、機器情報インスタンス５００は、フィールド名「ＩＰアドレス」の機器情報と、フィールド名「モデル名」の機器情報と、フィールド名「解像度」の機器情報と、フィールド名「ネットワーク情報」の機器情報とを保持する。これらの機器情報のうち、フィールド名「ＩＰアドレス」、「モデル名」及び「ネットワーク情報」の機器情報は、第一の実施形態と同様であるため、その説明を省略する。
【０１８２】
フィールド名「解像度」の機器情報は、フィールド値として、機器２０が投影可能な画像データの解像度が設定される。また、フィールド名「解像度」の機器情報の読取範囲及び書換範囲は「ライブラリ内」である。これは、フィールド名「解像度」の機器情報は、投影ライブラリ４２０以外のプログラムからは読み取りも書き換えも不可であることを示している。ただし、フィールド名「解像度」の機器情報の読取範囲は、「全域」であっても良い。
【０１８３】
なお、フィールド名「解像度」のフィールド値には、「１２８０×７２０」等の具体的な解像度の値が設定される場合に限られない。例えば、「ＸＧＡ（Extended Graphics Array）」や「ＨＤ（High Definition video）」等の解像度の規格又は分類が設定されても良い。
【０１８４】
以上のように、機器情報インスタンス５００には、当該機器情報インスタンス５００が保持している機器情報の読取範囲及び書換範囲が設定されている。これにより、機器２０の製造元企業は、サードベンダにより開発されたベンダ開発プログラム４１０が不要な機器情報を参照したり、不正に機器情報を書き換えたりすることを防止することができる。なお、機器情報インスタンス５００が保持する機器情報は、上記の「ＩＰアドレス」、「モデル名」、「解像度」、及び「ネットワーク情報」に限られない。機器情報インスタンス５００は、例えば、機器番号や製造年月日、製造元企業の情報等、種々の機器情報を保持しても良い。
【０１８５】
次に、投影設定情報インスタンス６００について、図２０を参照しながら説明する。図２０は、投影設定情報インスタンス６００の一例を示す図である。
【０１８６】
図２０に示すように、投影設定情報インスタンス６００は、フィールド名「切替方法」の投影設定情報を保持する。
【０１８７】
フィールド名「切替方法」の投影設定情報は、フィールド値として、ユーザにより設定された切替方法（又はデフォルトの切替方法）が設定される。切替方法とは、上述したように、投影対象の画像を他の画像に切り替える場合における切り替え時の表示態様のことである。フィールド名「切替方法」のフィールド値としては、例えば、「ｎｏｎｅ」、「ｆａｄｅ」、「ｃｕｔ」等が挙げられる。「ｎｏｎｅ」は、例えば、投影対象の画像を他の画像に単に切り替える表示態様のことである。「ｆａｄｅ」は、例えば、投影対象の画像をフェードアウト、他の画像をフェードインさせることで、投影対象の画像を他の画像に切り替える表示態様のことである。「ｃｕｔ」は、例えば、投影対象の画像をカットアウト、他の画像をカットインさせることで、投影対象の画像を他の画像に切り替える表示態様のことである。
【０１８８】
また、フィールド名「切替方法」の投影設定情報の読取範囲及び書換範囲は「全域」である。これは、フィールド名「切替方法」の投影設定情報は、投影ライブラリ４２０以外のプログラムから読み取りも書き換えも可能であることを示している。
【０１８９】
以上のように、投影設定情報インスタンス６００には、当該投影設定情報インスタンス６００が保持している投影設定情報の読取範囲及び書換範囲が設定されている。これにより、機器２０の製造元企業は、サードベンダにより開発されたベンダ開発プログラム４１０が不要な投影設定情報を参照したり、例えばデフォルト値のみが適用される投影設定情報が書き換えられたりすることを防止することができる。なお、投影設定情報インスタンス６００が保持する投影設定情報は、上記の「切替方法」に限られない。
【０１９０】
ここで、上記の機器情報インスタンス５００及び投影設定情報インスタンス６００の読取範囲及び書換範囲は、Ｊａｖａ言語のパッケージを用いて実現することができる。例えば、図２１に示すように、ベンダ開発プログラム４１０に定義された各クラスが属するパッケージと、投影ライブラリ４２０に定義された各クラスが属するパッケージとを異なるパッケージとする。
【０１９１】
これにより、機器情報インスタンス５００が保持するフィールド（すなわち、機器情報）を操作するメソッドに対してアクセスレベルを定義することで、このフィールドの読取範囲及び書換範囲を制限することができる。同様に、投影設定情報インスタンス６００が保持するフィールド（すなわち、投影設定情報）を操作するメソッドに対してアクセスレベルを定義することで、このフィールドの読取範囲及び書換範囲を制限することができる。以降では、投影ライブラリ４２０に定義された各クラスが属するパッケージのパッケージ名を「ｐｒｏｊｅｃｔｉｏｎｌｉｂｒａｒｙ」とする。
【０１９２】
なお、図２１に示す例では、ベンダ開発プログラム４１０に定義された各クラスが同一のパッケージに属する場合を示しているが、これに限られず、例えば、これらの各クラスが異なるパッケージに属していても良い。
【０１９３】
ここで、機器情報インスタンス５００を実現する機器情報クラス２１００について、図２２を参照しながら説明する。図２２は、機器情報クラス２１００の一例を示す図である。機器情報インスタンス５００は、例えば図２２に示す機器情報クラス２１００をインスタンス化することで生成される。
【０１９４】
図２２に示すように、機器情報クラス２１００には、パッケージ宣言２１０１と、クラス宣言２１０２とが含まれる。パッケージ宣言２１０１には、パッケージ名「ｐｒｏｊｅｃｔｉｏｎｌｉｂｒａｒｙ」が定義されている。クラス宣言２１０２には、各機器情報に対するメソッド宣言２１０３〜２１１０が含まれる。
【０１９５】
メソッド宣言２１０３〜２１０６及びメソッド宣言２１０９〜２１１０は、図９に示す機器情報クラス１１００のメソッド宣言１１０３〜１１０６及びメソッド宣言１１０９〜１１１０とそれぞれ同様であるため、その説明を省略する。
【０１９６】
メソッド宣言２１０７には、フィールド名「解像度」の機器情報を読み取るためのメソッド「ｇｅｔＲｅｓｏｌｕｔｉｏｎ」が定義されている。また、メソッド宣言２１０７では、このメソッド「ｇｅｔＲｅｓｏｌｕｔｉｏｎ」のアクセス修飾子が定義されていない。これにより、フィールド名「解像度」の機器情報の読取範囲「ライブラリ内」が実現される。
【０１９７】
メソッド宣言２１０８には、フィールド名「解像度」の機器情報を書き換えるためのメソッド「ｓｅｔＲｅｓｏｌｕｔｉｏｎ」が定義されている。また、メソッド宣言２１０８では、このメソッド「ｓｅｔＲｅｓｏｌｕｔｉｏｎ」のアクセス修飾子が定義されていない。これにより、フィールド名「解像度」の機器情報の書換範囲「ライブラリ内」が実現される。
【０１９８】
以上のように、機器情報クラス２１００では、機器情報を操作（読み取り又は書き換え）するためのメソッドに対して、アクセス修飾子「ｐｕｂｌｉｃ」を定義することで、他のパッケージに属するクラスからも機器情報に対する操作を行うことができるようになる。一方で、機器情報クラス２１００では、機器情報を操作するためのメソッドに対して、アクセス修飾子を定義しないことで、他のパッケージに属するクラスからは機器情報に対する操作を行えないようにすることができる。
【０１９９】
次に、投影設定情報インスタンス６００を実現する投影設定情報クラス２２００について、図２３を参照しながら説明する。図２３は、投影設定情報クラス２２００の一例を示す図である。投影設定情報インスタンス６００は、例えば図２３に示す投影設定情報クラス２２００をインスタンス化することで生成される。
【０２００】
図２３に示すように、投影設定情報クラス２２００には、パッケージ宣言２２０１と、クラス宣言２２０２とが含まれる。パッケージ宣言２２０１には、パッケージ名「ｐｒｏｊｅｃｔｉｏｎｌｉｂｒａｒｙ」が定義されている。クラス宣言２２０２には、各投影設定情報に対するメソッド宣言２２０３〜２２０４が含まれる。
【０２０１】
メソッド宣言２２０３には、フィールド名「切替方法」の投影設定情報を読み取るためのメソッド「ｇｅｔＳｗｉｔｃｈ」が定義されている。また、メソッド宣言２２０３には、このメソッド「ｇｅｔＳｗｉｔｃｈ」のアクセス修飾子「ｐｕｂｌｉｃ」が定義されている。これにより、フィールド名「切替方法」の投影設定情報の読取範囲「全域」が実現される。
【０２０２】
メソッド宣言２２０４には、フィールド名「切替方法」の投影設定情報を書き換えるためのメソッド「ｓｅｔＳｗｉｔｃｈ」が定義されている。また、メソッド宣言２２０４には、このメソッド「ｓｅｔＳｗｉｔｃｈ」のアクセス修飾子「ｐｕｂｌｉｃ」が定義されている。これにより、フィールド名「切替方法」の投影設定情報の書換範囲「全域」が実現される。
【０２０３】
以上のように、投影設定情報クラス２２００では、投影設定情報を操作（読み取り又は書き換え）するためのメソッドに対して、アクセス修飾子「ｐｕｂｌｉｃ」を定義することで、他のパッケージに属するクラスからも投影設定情報に対する操作を行うことができるようになる。一方で、投影設定情報クラス２２００では、投影設定情報を操作するためのメソッドに対して、アクセス修飾子を定義しないことで、他のパッケージに属するクラスからは投影設定情報に対する操作を行えないようにすることができる。
【０２０４】
次に、機器情報取得部４２１を実現する機器情報取得クラス２３００について、図２４を参照しながら説明する。図２４は、機器情報取得クラス２３００の一例を示す図である。機器情報取得部４２１は、例えば図２４に示す機器情報取得クラス２３００をインスタンス化することで生成される。
【０２０５】
図２４に示すように、機器情報取得クラス２３００には、パッケージ宣言２３０１と、クラス宣言２３０２とが含まれる。パッケージ宣言２３０１には、パッケージ名「ｐｒｏｊｅｃｔｉｏｎｌｉｂｒａｒｙ」が定義されている。クラス宣言２３０２には、メソッド宣言２３０３が含まれる。
【０２０６】
メソッド宣言２３０３には、機器２０から機器情報を取得するためのメソッド「ｇｅｔＰｒｏｊｅｃｔｏｒＩｎｆｏ」が定義されている。また、メソッド宣言２３０３には、このメソッド「ｇｅｔＰｒｏｊｅｃｔｏｒＩｎｆｏ」のアクセス修飾子「ｐｕｂｌｉｃ」が定義されている。これにより、メソッド「ｇｅｔＰｒｏｊｅｃｔｏｒＩｎｆｏ」は、同一パッケージ以外のパッケージに属するクラス（すなわち、投影ライブラリ４２０以外のプログラムに定義されたクラス）からも呼び出すことができる。
【０２０７】
次に、投影処理部４２２を実現する投影処理クラス２４００について、図２５を参照しながら説明する。図２５は、投影処理クラス２４００の一例を示す図である。投影処理部４２２は、例えば図２５に示す投影処理クラス２４００をインスタンス化することで生成される。
【０２０８】
図２５に示すように、投影処理クラス２４００には、パッケージ宣言２４０１と、クラス宣言２４０２とが含まれる。パッケージ宣言２４０１には、パッケージ名「ｐｒｏｊｅｃｔｉｏｎｌｉｂｒａｒｙ」が定義されている。クラス宣言２４０２には、メソッド宣言２４０３が含まれる。
【０２０９】
メソッド宣言２４０３には、投影要求を機器２０に送信するためのメソッド「ｐｒｏｊｅｃｔ」が定義されている。また、メソッド宣言２４０３には、このメソッド「ｐｒｏｊｅｃｔ」のアクセス修飾子「ｐｕｂｌｉｃ」が定義されている。これにより、メソッド「ｐｒｏｊｅｃｔ」は、同一パッケージ以外のパッケージに属するクラス（すなわち、投影ライブラリ４２０以外のプログラムに定義されたクラス）からも呼び出すことができる。
【０２１０】
なお、メソッド宣言２４０３には、メソッド「ｐｒｏｊｅｃｔ」の引数として、「ＰｒｏｊｅｃｔｏｒＩｎｆｏ  ｉｎｆｏ」と、「ＰｒｏｊｅｃｔＤａｔａ  ｄａｔａ」と、「ＰｒｏｊｅｃｔＳｅｔｔｉｎｇ  ｓｅｔｔｉｎｇ」とが定義されている。これは、メソッド「ｐｒｏｊｅｃｔ」の引数として、機器情報と、投影対象データと、投影設定情報とが指定されることを示している。
【０２１１】
次に、ベンダ開発プログラム４１０のプログラムコード２５００について、図２６を参照しながら説明する。図２６は、ベンダ開発プログラム４１０のプログラムコード２５００の一例を示す図である。なお、図２６では、一例として、機器情報取得要求部４１１と、投影対象データ設定部４１３と、投影設定部４１４と、投影実行要求部４１６とにそれぞれ対応するコードが定義されたプログラムコード２５００について説明する。表示制御部４１２や実行操作受付部４１５等に対応するコードは別途それぞれ定義する必要がある。
【０２１２】
図２６に示すように、プログラムコード２５００には、パッケージ宣言２５０１と、クラス宣言２５０２とが含まれる。パッケージ宣言２５０１には、パッケージ名「ｐｒｏｊｅｃｔｉｏｎａｐｐ」が定義されている。このため、ベンダ開発プログラム４１０は、パッケージ名「ｐｒｏｊｅｃｔｉｏｎｌｉｂｒａｒｙ」に属する各クラスに定義されたメソッドのうち、アクセス修飾子「ｐｕｂｌｉｃ」が定義されていないメソッドを呼び出すことができない。
【０２１３】
クラス宣言２５０２には、投影実行クラス２５０３が含まれる。そして、投影実行クラス２５０３には、機器情報取得要求部４１１に対応するコードが定義されたコード定義２５０４と、投影設定部４１４に対応するコードが定義されたコード定義２５０５とが含まれる。また、投影実行クラス２５０３には、投影対象データ設定部４１３に対応するコードが定義されたコード定義２５０６と、投影実行要求部４１６に対応するコードが定義されたコード定義２５０７とが含まれる。
【０２１４】
コード定義２５０７に示すように、ベンダ開発プログラム４１０は、パッケージ名「ｐｒｏｊｅｃｔｉｏｎｌｉｂｒａｒｙ」に属する投影処理クラス２４００のメソッド「ｐｒｏｊｅｃｔ」を呼び出す際に、機器情報インスタンス５００を示す「ｉｎｆｏ」を引数に指定する。これにより、メソッド「ｐｒｏｊｅｃｔ」における処理で、機器情報インスタンス５００のアクセス修飾子「ｐｕｂｌｉｃ」が定義されていないメソッドを呼び出した上で、機器２０に対して、処理要求（投影要求）を行うことができる。例えば、メソッド「ｐｒｏｊｅｃｔ」における処理で、機器情報インスタンス５００を示す「ｉｎｆｏ」のメソッド「ｇｅｔＲｅｓｏｌｕｔｉｏｎ」を呼び出してフィールド名「解像度」の機器情報を取得した上で、この機器情報を指定した投影要求を機器２０に行うことができる。
【０２１５】
このため、投影アプリケーション４００は、機器２０に対して、ベンダ開発プログラム４１０が操作することができない情報（例えば、フィールド名「解像度」の機器情報やフィールド名「ネットワーク情報」の機器情報）を使用した処理要求（登録要求）を行うことが可能となる。
【０２１６】
＜投影処理＞
次に、本実施形態に係る投影システム２の投影処理について説明する。以降では、端末装置１０のユーザが、投影アプリケーション４００を用いて、機器２０で画像の投影を行う場合の処理について、図２７を参照しながら説明する。図２７は、第二の実施形態に係る投影処理の一例を示すシーケンス図である。
【０２１７】
以降の図２７では、機器情報クラス２１００及び投影設定情報クラス２２００を除いて、ベンダ開発プログラム４１０及び投影ライブラリ４２０に定義されている各クラスはインスタンス化されているものとして説明する。なお、ベンダ開発プログラム４１０及び投影ライブラリ４２０に定義されている各クラスで、インスタンス化されていないクラスがあっても良い。この場合、当該クラスにより実現される機能部（インスタンス）の処理を実行する前に、適宜、インスタンス化されれば良い。また、機器情報クラス２１００及び投影設定情報クラス２２００も予めインスタンス化されていても良い。
【０２１８】
まず、ベンダ開発プログラム４１０の機器情報取得要求部４１１は、図１４のステップＳ１０１と同様に、ユーザによる機器情報の取得操作を受け付ける（ステップＳ２０１）。
【０２１９】
ベンダ開発プログラム４１０の機器情報取得要求部４１１は、ユーザによる機器情報の取得操作を受け付けると、機器情報の取得を機器情報取得部４２１に要求する（ステップＳ２０２）。機器情報取得要求部４１１は、機器情報取得クラス２３００のメソッド宣言２３０３に定義されているメソッド「ｇｅｔＰｒｏｊｅｃｔｏｒＩｎｆｏ」を呼び出すことで、機器情報の取得要求を行うことができる。
【０２２０】
投影ライブラリ４２０の機器情報取得部４２１は、図１４のステップＳ１０３と同様に、機器情報の取得要求を受け取ると、機器２０に対して、機器情報の問い合わせを行う（ステップＳ２０３）。そして、機器情報取得部４２１は、上記の問い合わせに応じて機器２０から返信された機器情報を受信する。これにより、機器情報取得部４２１は、ＩＰアドレス、モデル名、解像度、ネットワーク情報等の機器情報を機器２０から取得することができる。
【０２２１】
投影ライブラリ４２０の機器情報取得部４２１は、機器２０から機器情報を取得すると、機器情報インスタンス５００を生成する（ステップＳ２０４）。機器情報インスタンス５００は、機器情報クラス２１００をインスタンス化することで生成される。
【０２２２】
次に、投影ライブラリ４２０の機器情報取得部４２１は、機器２０から取得した機器情報を機器情報インスタンス５００に設定する（ステップＳ２０５）。
【０２２３】
すなわち、機器情報取得部４２１は、機器２０から取得したＩＰアドレスを引数に指定した上で、機器情報クラス２１００のメソッド宣言２１０４に定義されているメソッド「ｓｅｔＩＰＡｄｄｒｅｓｓ」を呼び出す。これにより、フィールド名「ＩＰアドレス」の機器情報が機器情報インスタンス５００に設定される。
【０２２４】
同様に、機器情報取得部４２１は、機器２０から取得したモデル名を引数に指定した上で、機器情報クラス２１００のメソッド宣言２１０６に定義されているメソッド「ｓｅｔＭｏｄｅｌＮａｍｅ」を呼び出す。これにより、フィールド名「モデル名」の機器情報が機器情報インスタンス５００に設定される。
【０２２５】
同様に、機器情報取得部４２１は、機器２０から取得した解像度を引数に指定した上で、機器情報クラス２１００のメソッド宣言２１０８に定義されているメソッド「ｓｅｔＲｅｓｏｌｕｔｉｏｎ」を呼び出す。これにより、フィールド名「解像度」の機器情報が機器情報インスタンス５００に設定される。
【０２２６】
同様に、機器情報取得部４２１は、機器２０から取得したネットワーク情報を引数に指定した上で、機器情報クラス２１００のメソッド宣言２１１０に定義されているメソッド「ｓｅｔＮｅｔｗｏｒｋＩｎｆｏ」を呼び出す。これにより、フィールド名「ネットワーク情報」の機器情報が機器情報インスタンス５００に設定される。
【０２２７】
そして、機器情報取得部４２１は、機器２０から取得した各機器情報が設定された機器情報インスタンス５００をベンダ開発プログラム４１０に返信する。
【０２２８】
ベンダ開発プログラム４１０の表示制御部４１２は、機器情報取得部４２１から返信された機器情報インスタンス５００から機器情報を取得する。そして、表示制御部４１２は、機器情報インスタンス５００から取得した機器情報を表示装置１２上に表示する（ステップＳ２０６）。このとき、表示制御部４１２は、図１４のステップＳ１０６と同様に、機器情報インスタンス２００に保持されている機器情報のうち、読取範囲が「全域」となっている機器情報を取得することができる。これにより、例えば、解像度やネットワーク情報等、ユーザが必ずしも参照する必要のない機器情報が表示されることを防止することができる。
【０２２９】
次に、ベンダ開発プログラム４１０の投影対象データ設定部４１３は、ユーザによる投影対象データの選択操作を受け付ける（ステップＳ２０７）。ユーザは、例えば、上記のステップＳ２０６で機器情報が表示されている画面からコンテンツデータの一覧画面に遷移させた上で、コンテンツデータの一覧画面から所望のコンテンツデータを選択することで、投影対象データの選択操作を行うことができる。
【０２３０】
ベンダ開発プログラム４１０の投影対象データ設定部４１３は、ユーザによる投影対象データの選択操作を受け付けると、選択されたコンテンツデータを投影対象データに設定する（ステップＳ２０８）。なお、上記のステップＳ２０１の処理が実行される前に、投影対象データが予め設定されている場合等には、上記のステップＳ２０７及びステップＳ２０８の処理は実行されなくても良い。
【０２３１】
次に、ベンダ開発プログラム４１０の投影設定部４１４は、ユーザによる投影設定情報の指定操作を受け付ける（ステップＳ２０９）。ユーザは、例えば、投影対象データを選択した後に表示される所定の画面において、各投影設定情報の設定値を指定することで、投影設定情報の指定操作を行うことができる。なお、ユーザが投影設定情報を変更しない場合（すなわち、投影設定情報の設定値としてデフォルト値を用いる場合）、本ステップの処理は実行されなくても良い。
【０２３２】
ベンダ開発プログラム４１０の投影設定部４１４は、投影設定情報インスタンス６００を生成する（ステップＳ２１０）。投影設定情報インスタンス６００は、投影設定情報クラス２２００をインスタンス化することで生成される。
【０２３３】
次に、ベンダ開発プログラム４１０の投影設定部４１４は、上記のステップＳ２０９でユーザにより指定された投影設定情報を投影設定情報インスタンス６００に設定する（ステップＳ２１１）。
【０２３４】
すなわち、投影設定部４１４は、ユーザにより指定された切替方法を引数に指定した上で、投影設定情報クラス２２００のメソッド宣言２２０４に定義されているメソッド「ｓｅｔＳｗｉｔｃｈ」を呼び出す。これにより、フィールド名「切替方法」の投影設定情報が投影設定情報インスタンス６００に設定される。
【０２３５】
次に、ベンダ開発プログラム４１０の実行操作受付部４１５は、ユーザによる投影実行操作を受け付ける（ステップＳ２１２）。ユーザは、例えば、投影設定情報を指定した後に表示される所定の画面において、投影実行ボタンを押下することで、投影実行操作を行うことができる。
【０２３６】
ベンダ開発プログラム４１０の投影実行要求部４１６は、実行操作受付部４１５により投影実行操作が受け付けられると、投影実行を投影処理部４２２に要求する（ステップＳ２１３）。この投影実行要求には、機器情報インスタンス５００と、投影対象データと、投影設定情報インスタンス６００とが含まれる。投影実行要求部４１６は、機器情報インスタンス５００と、投影対象データと、投影設定情報インスタンス６００とを引数に指定した上で、投影処理クラス２４００のメソッド宣言２４０３に定義されているメソッド「ｐｒｏｊｅｃｔ」を呼び出すことで、投影実行要求を行うことができる。
【０２３７】
メソッド「ｐｒｏｊｅｃｔ」に対して機器情報インスタンス５００が引数に指定されることで、例えば、複数の機器情報インスタンス５００が存在する場合（すなわち、例えば、周囲に複数の機器２０が存在し、これら複数の機器２０からそれぞれ機器情報を取得した場合）、どの機器情報インスタンス５００を用いるかを指定することができるようになる。このため、ベンダ開発プログラム４１０からは操作することができない複数の情報を管理することができるようになる。
【０２３８】
例えば、複数の機器情報インスタンス５００が存在する場合、例えば、フィールド名「解像度」の機器情報は機器２０毎に存在する。この場合、フィールド名「解像度」の機器情報は、いずれもベンダ開発プログラム４１０からは参照することができない。このため、ベンダ開発プログラム４１０は、これらの機器情報のうちの一の機器情報を直接指定することはできないものの、機器情報インスタンス５００を指定することで、どの機器２０の解像度を用いるかを結果的に指定することができるようになる。
【０２３９】
投影ライブラリ４２０の投影処理部４２２は、投影データ生成部４２３により、投影実行要求に含まれる機器情報インスタンス５００から解像度を取得する（ステップＳ２１４）。すなわち、投影データ生成部４２３は、機器情報インスタンス５００に保持されている機器情報のうち、フィールド名「解像度」の機器情報を取得する。投影データ生成部４２３は、機器情報クラス２１００のメソッド宣言２１０７に定義されているメソッド「ｇｅｔＲｅｓｏｌｕｔｉｏｎ」を呼び出すことで、フィールド名「解像度」の機器情報を取得することができる。なお、投影処理部４２２を実現する投影処理クラス２４００と、機器情報クラス２１００とは同一のパッケージ「ｐｒｏｊｅｃｔｉｏｎｌｉｂｒａｒｙ」に属するため、投影データ生成部４２３は、メソッド「ｇｅｔＲｅｓｏｌｕｔｉｏｎ」を呼び出すことができる。
【０２４０】
次に、投影ライブラリ４２０の投影処理部４２２は、投影データ生成部４２３により、投影実行要求に含まれる投影設定情報インスタンス６００から投影設定情報を取得する（ステップＳ２１５）。すなわち、投影データ生成部４２３は、投影設定情報インスタンス６００に保持されている投影設定情報を取得する。投影データ生成部４２３は、投影設定情報クラス２２００のメソッド宣言２２０３に定義されているメソッド「ｇｅｔＳｗｉｔｃｈ」を呼び出すことで、フィールド名「切替方法」の投影設定情報を取得することができる。
【０２４１】
次に、投影ライブラリ４２０の投影処理部４２２は、投影データ生成部４２３により、投影データを生成する（ステップＳ２１６）。すなわち、投影データ生成部４２３は、上記のステップＳ２１４で取得された解像度を用いて、投影対象データから投影データを生成する。このとき、投影データ生成部４２３は、例えば、当該投影対象データを、上記のステップＳ２１４で取得された解像度に変換することで、投影データを生成する。
【０２４２】
次に、投影ライブラリ４２０の投影処理部４２２は、図１４のステップＳ１１７と同様に、投影要求部４２４により、投影実行要求に含まれる機器情報インスタンス５００からネットワーク情報を取得する（ステップＳ２１７）。
【０２４３】
次に、投影ライブラリ４２０の投影処理部４２２は、図１４のステップＳ１１８と同様に、投影要求部４２４により、上記のステップＳ２１７で取得されたネットワーク情報に基づいて、機器２０との通信可否を判定する（ステップＳ２１８）。
【０２４４】
ステップＳ２１８において、機器２０と通信可能であると判定された場合、投影ライブラリ４２０の投影処理部４２２は、図１４のステップＳ１１９と同様に、投影要求部４２４により、投影実行要求に含まれる機器情報インスタンス５００からＩＰアドレスを取得する（ステップＳ２１９）。
【０２４５】
次に、投影ライブラリ４２０の投影処理部４２２は、投影要求部４２４により、投影要求を機器２０に送信する（ステップＳ４２０）。すなわち、投影要求部４２４は、例えばＷｉ−Ｆｉ等の無線ＬＡＮにより、上記のステップＳ２１９で取得されたＩＰアドレス宛に投影要求を送信する。投影要求には、上記のステップＳ２１６で生成された投影データが含まれる。これにより、投影要求を受信した機器２０で投影データが示す画像の投影が行われ、投影結果が返信される。
【０２４６】
一方で、ステップＳ２１８において、機器２０と通信可能でないと判定された場合、投影ライブラリ４２０の投影処理部４２２は、投影要求部４２４により、ベンダ開発プログラム４１０にエラーを返信する。これにより、例えば、投影を行うことができないことを示すエラー画面が表示装置１２上に表示される。
【０２４７】
＜第二の実施形態のまとめ＞
以上のように、本実施形態に係る投影システム２では、プロジェクタである機器２０の製造元企業が提供する投影ライブラリ４２０により管理される各種情報について、サードベンダにより開発されたベンダ開発プログラム４１０が読み取りや書き換えを制限することができる。これにより、本実施形態に係る投影システム２では、投影ライブラリ４２０により管理される各種情報について、ベンダ開発プログラム４１０により不正に書き換えられてしまったり、不要な情報が参照されてしまったりといった事態を防止することができる。
【０２４８】
また、本実施形態に係る投影システム２では、ベンダ開発プログラム４１０による情報の書き換えを制限することで、機器２０の意図しない動作等を防止することができる。
【０２４９】
［第三の実施形態］
次に、第三の実施形態について説明する。第一の実施形態及び第二の実施形態では、実行可能形式のアプリケーション（印刷アプリケーション１００又は投影アプリケーション４００）が端末装置１０にインストールされているものとして説明したが、当該アプリケーションはプログラムコードが定義されたソースファイルをコンパイル等することで作成される。そこで、第三の実施形態では、例えばＰＣ（パーソナルコンピュータ等）である開発用端末３０が、ソースファイルをコンパイルすることで、実行可能形式（例えば、Ｊａｖａバイトコード）のアプリケーション（印刷アプリケーション１００又は投影アプリケーション４００）を作成する場合について説明する。以降では、印刷アプリケーション１００又は投影アプリケーション４００を「アプリケーション７００」と表す。
【０２５０】
なお、第三の実施形態では、主に、第一の実施形態及び第二の実施形態との相違点について説明し、第一の実施形態及び第二の実施形態と同様の構成要素については、適宜、その説明を省略又は簡略化する。
【０２５１】
＜機能構成＞
まず、本実施形態に係る開発用端末３０の機能構成について、図２８を参照しながら説明する。図２８は、第三の実施形態に係る開発用端末３０の機能構成の一例を示す図である。
【０２５２】
図２８に示すように、本実施形態に係る開発用端末３０は、コンパイル処理部８００を有する。当該機能部は、開発用端末３０にインストールされた１以上のプログラムがＣＰＵに実行させる処理により実現される。
【０２５３】
また、本実施形態に係る開発用端末３０は、記憶部９００を有する。当該記憶部は、例えば、ＨＤＤやＳＳＤ等の補助記憶装置を用いて実現可能である。なお、当該記憶部は、開発用端末３０とネットワークを介して接続される記憶装置等を用いて実現されていても良い。
【０２５４】
記憶部９００には、ソースファイル９１０と、ライブラリ９２０とが記憶されている。ソースファイル９１０は、作成対象のアプリケーション７００が印刷アプリケーション１００である場合はベンダ開発プログラム１１０のソースコードが記述されたファイルであり、作成対象のアプリケーション７００が投影アプリケーション４００である場合はベンダ開発プログラム４１０のソースコードが記述されたファイルである。また、ライブラリ９２０は、作成対象のアプリケーション７００が印刷アプリケーション１００である場合は印刷ライブラリ１２０であり、作成対象のアプリケーション７００が投影アプリケーション４００である場合は投影ライブラリ４２０である。
【０２５５】
なお、ライブラリ９２０は、例えば、当該ライブラリ９２０に定義されているＡＰＩ（メソッド）の利用方法（例えば、引数の指定方法）等が記載されたマニュアルと共に、機器２０の製造元企業等から配布される。
【０２５６】
コンパイル処理部８００は、ソースファイル９１０とライブラリ９２０とを入力して、ソースファイル９１０をコンパイル（より正確には、ソースファイル９１０及びライブラリ９２０をコンパイル）することで、実行可能形式のアプリケーション７００を作成する。このとき、コンパイル処理部８００は、呼び出し対象のメソッドと、このメソッドの呼び出し元のクラスとの間でアクセス関係が正常に定義されているか否かを判定する。
【０２５７】
すなわち、コンパイル処理部８００は、呼び出し対象のメソッドが定義されたクラスと、当該メソッドの呼び出し元のクラスとが同一のパッケージに属するか否かを判定する。また、コンパイル処理部８００は、これらのクラスが同一のパッケージに属しないと判定された場合に、当該メソッドに対してアクセス識別子「ｐｕｂｌｉｃ」が定義されているか否かを判定する。
【０２５８】
そして、コンパイル処理部８００は、ソースファイル９１０の全てのメソッドに対してアクセス関係が正常に定義されていると判定した場合、ソースファイル９１０をコンパイルして、実行可能形式のアプリケーション７００を作成する。一方で、コンパイル処理部８００は、少なくとも１つのメソッドに対してアクセス関係が正常に定義されていないと判定した場合、例えばエラー画面等を表示する。
【０２５９】
＜コンパイル処理＞
次に、本実施形態に係る開発用端末３０が実行するコンパイル処理について説明する。以降では、開発用端末３０のユーザ（例えばサードベンダ等のアプリ開発者）が、ソースファイル９１０をコンパイルして、実行可能形式のアプリケーション７００を作成する処理について、図２９を参照しながら説明する。図２９は、第三の実施形態に係るコンパイル処理の一例を示すフローチャートである。図２９に示す処理は、例えば、開発用端末３０のユーザによる操作（ソースファイル９１０のコンパイル開始操作）に応じてソースファイル９１０及びライブラリ９２０がコンパイル処理部８００に入力されることで実行が開始され、当該ソースファイル９１０に定義されたメソッドの呼び出し処理を示すコード毎に繰り返し実行される。
【０２６０】
まず、コンパイル処理部８００は、当該コードに定義された呼び出し対象のメソッドのクラスが、呼び出し元のクラスと同一パッケージであるか否かを判定する（ステップＳ３０１）。
【０２６１】
ステップＳ３０１において、呼び出し対象のメソッドのクラスが、呼び出し元のクラスと同一パッケージでないと判定した場合、コンパイル処理部８００は、当該メソッドに対して、アクセス修飾子「ｐｕｂｌｉｃ」が定義されているか否かを判定する（ステップＳ３０２）。
【０２６２】
ステップＳ３０１において、呼び出し対象のメソッドのクラスが、呼び出し元のクラスと同一パッケージであると判定した場合、又は、ステップＳ３０２において、当該メソッドに対して、アクセス修飾子「ｐｕｂｌｉｃ」が定義されていると判定された場合、コンパイル処理部８００は、当該メソッドのアクセス関係が正常に定義されていると判定する（ステップＳ３０３）。
【０２６３】
一方で、ステップＳ３０２において、当該メソッドに対して、アクセス修飾子「ｐｕｂｌｉｃ」が定義されていないと判定された場合、コンパイル処理部８００は、当該メソッドのアクセス関係が正常に定義されていない（エラーである）と判定する（ステップＳ３０４）。この場合、コンパイル処理部８００は、例えば、ソースファイル９１０中に定義されたメソッドのアクセス関係が正常でないことを示すエラー画面を表示させて、コンパイル処理を終了させる。
【０２６４】
他方、ソースファイル９１０中の全てのメソッドに対してアクセス関係が正常に定義されていると判定された場合、コンパイル処理部８００は、当該ソースファイル９１０及びライブラリ９２０をコンパイルして、実行可能形式のアプリケーション７００を作成する（ステップＳ３０５）。これにより、ライブラリ９２０により管理される各種情報について、ベンダ開発プログラム１１０又はベンダ開発プログラム４１０による操作を制限したアプリケーション７００（印刷アプリケーション１００又は投影アプリケーション４００）が作成される。なお、より正確には、ソースファイル９１０及びライブラリ９２０をそれぞれコンパイルすることで作成されるオブジェクトファイルのリンク等が行われることで、当該アプリケーション７００が作成される。
【０２６５】
本発明は、具体的に開示された上記の実施形態に限定されるものではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。
【符号の説明】
【０２６６】
１          印刷システム
１０        端末装置
２０        機器
１００      印刷アプリケーション
１１０      ベンダ開発プログラム
１１１      機器情報取得要求部
１１２      表示制御部
１１３      印刷対象データ設定部
１１４      印刷設定部
１１５      実行操作受付部
１１６      印刷実行要求部
１２０      印刷ライブラリ
１２１      機器情報取得部
１２２      印刷処理部
１２３      印刷データ生成部
１２４      印刷要求部
２００      機器情報インスタンス
３００      印刷設定情報インスタンス
【先行技術文献】
【特許文献】
【０２６７】
【特許文献１】特開２０１３−１５２７４３号公報
【図１】
2019067367.tif 000003
【図２】
2019067367.tif 000004
【図３】
2019067367.tif 000005
【図４】
2019067367.tif 000006
【図５】
2019067367.tif 000007
【図６】
2019067367.tif 000008
【図７】
2019067367.tif 000009
【図８】
2019067367.tif 000010
【図９】
2019067367.tif 000011
【図１０】
2019067367.tif 000012
【図１１】
2019067367.tif 000013
【図１２】
2019067367.tif 000014
【図１３】
2019067367.tif 000015
【図１４】
2019067367.tif 000016
【図１５】
2019067367.tif 000017
【図１６】
2019067367.tif 000018
【図１７】
2019067367.tif 000019
【図１８】
2019067367.tif 000020
【図１９】
2019067367.tif 000021
【図２０】
2019067367.tif 000022
【図２１】
2019067367.tif 000023
【図２２】
2019067367.tif 000024
【図２３】
2019067367.tif 000025
【図２４】
2019067367.tif 000026
【図２５】
2019067367.tif 000027
【図２６】
2019067367.tif 000028
【図２７】
2019067367.tif 000029
【図２８】
2019067367.tif 000030
【図２９】
2019067367.tif 000031