(57)【特許請求の範囲】
【請求項１】
複数のアプリケーションが動作する情報処理装置であって、
アプリケーションの切り替えを検出する検出手段と、
アプリケーションの切り替えに応じて、アプリケーションが前記情報処理装置にＵＳＢ接続されたＵＳＢデバイスを排他的に利用する際の制御を行うＵＳＢデバイス制御手段と
を有し、
前記ＵＳＢデバイス制御手段は、前記検出手段によりアプリケーションの切り替えを検出した場合、前記ＵＳＢデバイスの利用が許可されているアプリケーションによる前記ＵＳＢデバイスの利用を強制的にクローズし、切り替え後において表示部に表示されている画面に対応するアプリケーションに対して前記ＵＳＢデバイスの利用を許可するように制御することを特徴とする情報処理装置。
【請求項２】
前記ＵＳＢデバイス制御手段は、アプリケーションからＵＳＢデバイスの利用の要求を受け付けた際に、当該アプリケーションが前記ＵＳＢデバイスの利用を許可されているか否かを判定し、許可されていない場合には、前記情報処理装置に前記ＵＳＢデバイスがＵＳＢ接続されていないものとして当該アプリケーションを制御することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記ＵＳＢデバイス制御手段は、アプリケーションに対して前記ＵＳＢデバイスの利用を許可する場合、当該アプリケーションに対し、前記情報処理装置に前記ＵＳＢデバイスが新たにＵＳＢ接続されたものとして制御することを特徴とする請求項１または２に記載の情報処理装置。
【請求項４】
前記ＵＳＢデバイス制御手段は、アプリケーションによる前記ＵＳＢデバイスの利用を強制的にクローズする場合、当該アプリケーションに対し、前記ＵＳＢデバイスのＵＳＢ接続が解除されたものとして制御することを特徴とする請求項１乃至３のいずれか一項に記載の情報処理装置。
【請求項５】
前記ＵＳＢデバイス制御手段における、アプリケーションの切り替えが検出された場合に前記ＵＳＢデバイスの利用が許可されているアプリケーションによる前記ＵＳＢデバイスの利用を強制的にクローズし、切り替え後において前記表示部に表示されているアプリケーションに対して前記ＵＳＢデバイスの利用を許可する制御を行うか否かの設定を受け付けるための設定画面を提供する手段を更に有し、
前記ＵＳＢデバイス制御手段は、前記設定画面を介して受け付けた設定に基づいて、制御を切り替えることを特徴とする請求項１乃至４のいずれか一項に記載の情報処理装置。
【請求項６】
前記ＵＳＢデバイス制御手段における制御の対象外として、例外デバイスを管理する管理手段を更に有し、
前記管理手段にて前記例外デバイスとして管理されたＵＳＢデバイスに対しては、前記ＵＳＢデバイス制御手段による制御が行われないことを特徴とする請求項１乃至５のいずれか一項に記載の情報処理装置。
【請求項７】
前記管理手段は、前記例外デバイスとして、製品ごともしくはベンダごとにＵＳＢデバイスを管理することを特徴とする請求項６に記載の情報処理装置。
【請求項８】
前記ＵＳＢデバイス制御手段における制御の対象外として、例外アプリケーションを管理する管理手段を更に有し、
前記管理手段にて前記例外アプリケーションとして管理されたアプリケーションに対しては、前記ＵＳＢデバイス制御手段による制御が行われないことを特徴とする請求項１乃至５のいずれか一項に記載の情報処理装置。
【請求項９】
前記ＵＳＢデバイス制御手段は、ＵＳＢデバイスが前記情報処理装置にＵＳＢ接続された場合、もしくは、前記ＵＳＢデバイスが前記情報処理装置から取り外された場合に、前記ＵＳＢデバイスの利用が許可されているアプリケーションに対し、その旨を通知することを特徴とする請求項１乃至８のいずれか一項に記載の情報処理装置。
【請求項１０】
前記情報処理装置は複数のＵＳＢデバイスが接続可能であり、
前記ＵＳＢデバイス制御手段は、前記複数のＵＳＢデバイスそれぞれに対し、アプリケーションによる利用の許可を制御することを特徴とする請求項１乃至９のいずれか一項に記載の情報処理装置。
【請求項１１】
複数のアプリケーションが動作する情報処理装置の制御方法であって、
アプリケーションの切り替えを検出する検出工程と、
アプリケーションの切り替えに応じて、アプリケーションが前記情報処理装置にＵＳＢ接続されたＵＳＢデバイスを排他的に利用する際の制御を行うＵＳＢデバイス制御工程と
を有し、
前記ＵＳＢデバイス制御工程において、前記検出工程にてアプリケーションの切り替えを検出した場合、前記ＵＳＢデバイスの利用が許可されているアプリケーションによる前記ＵＳＢデバイスの利用を強制的にクローズし、切り替え後において表示部に表示されているアプリケーションに対して前記ＵＳＢデバイスの利用を許可するように制御することを特徴とする情報処理装置の制御方法。
【請求項１２】
コンピュータを、
アプリケーションの切り替えを検出する検出手段、
アプリケーションの切り替えに応じて、アプリケーションが前記コンピュータにＵＳＢ接続されたＵＳＢデバイスを排他的に利用する際の制御を行うＵＳＢデバイス制御手段
として機能させ、
前記ＵＳＢデバイス制御手段は、前記検出手段によりアプリケーションの切り替えを検出した場合、前記ＵＳＢデバイスの利用が許可されているアプリケーションによる前記ＵＳＢデバイスの利用を強制的にクローズし、切り替え後において表示部に表示されているアプリケーションに対して前記ＵＳＢデバイスの利用を許可するように制御することを特徴とするプログラム。 
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置およびその制御方法、並びにプログラムに関する。
【背景技術】
【０００２】
従来、アプリケーションをインストールすることで機能を追加できる情報処理装置が知られている。このような情報処理装置には、提供する機能や操作部を制御するための制御ＡＰＩが用意されており、アプリケーションは制御ＡＰＩを利用することで様々な機能を実現することができる。また、このような情報処理装置にはＵＳＢＨｏｓｔインタフェースが搭載されており、ＵＳＢ制御ＡＰＩを呼び出すことにより、ＵＳＢＨｏｓｔインタフェースに接続されたＵＳＢデバイスを制御することが可能である。ＵＳＢデバイスの例としては、ＩＣカードリーダやキーボードが挙げられる。
【０００３】
従来のＵＳＢ制御ＡＰＩは、ＵＳＢデバイスの制御が排他的になっており、あるアプリケーションがＵＳＢデバイスを制御している間は他のアプリケーションから同じＵＳＢデバイスを制御することはできない。従って、複数のアプリケーションから同じＵＳＢデバイスを制御したい場合、アプリケーションが他のアプリケーションとＵＳＢデバイスの制御が競合しないように実装する必要がある。
【０００４】
例えば、ＵＳＢデバイスから読み出したデータの転送を管理するサービスを設け、アプリケーションはサービス経由でデータを読み出すような技術が知られている（例えば、特許文献１）。この技術では、画面に表示されているアプリケーションのみにサービスがＵＳＢから読み出したデータを受け渡す。そのため、アプリケーションは表示状態を意識する必要がなくなり、より単純な実装で複数アプリケーションからの同一ＵＳＢデバイスの利用を実現することができる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許第８２８５７４６号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、従来のＵＳＢ制御ＡＰＩを用いて作られたアプリケーションを特許文献１の技術に対応させるには、サービスを利用するようにアプリケーションを修正する必要がある。そのため、同一ＵＳＢデバイスの制御を行う複数の既存アプリケーションを共存させるには、同時に利用したい全てのアプリケーションの実装を変える必要があり、アプリケーションの実装負荷が高くなってしまうという問題がある。
【課題を解決するための手段】
【０００７】
上記課題を解決するために本願発明は以下の構成を有する。すなわち、複数のアプリケーションが動作する情報処理装置であって、アプリケーションの切り替えを検出する検出手段と、アプリケーションの切り替えに応じて、アプリケーションが前記情報処理装置にＵＳＢ接続されたＵＳＢデバイスを排他的に利用する際の制御を行うＵＳＢデバイス制御手段とを有し、前記ＵＳＢデバイス制御手段は、前記検出手段によりアプリケーションの切り替えを検出した場合、前記ＵＳＢデバイスの利用が許可されているアプリケーションによる前記ＵＳＢデバイスの利用を強制的にクローズし、切り替え後において表示部に表示されているアプリケーションに対して前記ＵＳＢデバイスの利用を許可するように制御する。
【発明の効果】
【０００８】
本願発明により、既存アプリケーションを改変することなく、同じＵＳＢデバイスの制御を行う複数のアプリケーションを共存させることができる。
【図面の簡単な説明】
【０００９】
【図１】情報処理装置のハードウェア構成の例を示す図。
【図２】情報処理装置のソフトウェア構成の例を示す図。
【図３】情報処理装置の操作パネルに表示されるＵＩの一例を示す図。
【図４】ＵＳＢ接続数変化イベント受信時のフローチャート。
【図５】ＵＳＢキーボード入力読込時のフローチャート。
【図６】第一の実施形態に係るＵＳＢ制御ライブラリ呼び出し時のフローチャート。
【図７】ＵＳＢ制御ライブラリが保持しているアプリ管理テーブルの例を示す図。
【図８】第一の実施形態に係るアプリ管理テーブル更新処理のフローチャート。
【図９】第一の実施形態に係るアプリケーション切り替え時のフローチャート。
【図１０】第一の実施形態に係るＵＳＢデバイスの接続数変化時のフローチャート。
【図１１】第二の実施形態に係る動作モードの設定画面の例を示す図。
【図１２】第二の実施形態に係るＵＳＢ制御ライブラリ呼び出し時のフローチャート。
【図１３】第二の実施形態に係るアプリケーション切り替え時のフローチャート。
【図１４】第二の実施形態に係るＵＳＢデバイスの接続数変化時のフローチャート。
【図１５】第三の実施形態に係る例外デバイスリストの例を示す図。
【図１６】第三の実施形態に係るＵＳＢ制御ライブラリ呼び出し時のフローチャート。
【図１７】第三の実施形態に係るアプリ管理テーブル更新処理のフローチャート。
【図１８】第三の実施形態に係るＵＳＢデバイスの接続数変化時のフローチャート。
【発明を実施するための形態】
【００１０】
以下、図面を参照して本発明の実施形態を詳しく説明する。なお、以下の実施形態は特許請求の範囲に係る発明を限定するものでなく、また各実施形態で説明されている特徴の組み合わせの全てが発明の解決手段に必須のものとは限らない。
【００１１】
＜第一の実施形態＞
図１は、本発明が適用される情報処理装置の一例としてのデジタル複合機のハードウェア構成の例を示すブロック図である。デジタル複合機の一例としては、ＭＦＰ（Ｍｕｌｔｉ−Ｆｕｎｃｔｉｏｎ  Ｐｅｒｉｐｈｅｒａｌ）などが挙げられる。
【００１２】
ＣＰＵ１０１は、情報処理装置１００に係るソフトウェアプログラムを実行し、情報処理装置１００全体の制御を行う。ＲＯＭ１０２は、不揮発性の記憶手段であり、情報処理装置１００のブートプログラムや固定パラメータ等が格納されている。ＲＡＭ１０３は、揮発性の記憶手段であり、ＣＰＵ１０１が情報処理装置１００を制御する際に、一時的なデータの格納などに使用する。外部記憶装置１０４は、インストールされたアプリケーションやアプリケーションのデータや印刷データの格納など、様々なデータの格納に使用する。ＵＳＢＨ  Ｉ／Ｆ制御部１０５は、ＵＳＢＨｏｓｔインタフェースを制御し、様々なＵＳＢデバイス１１６との通信を制御する。以降、ＵＳＢＨｏｓｔのことをＵＳＢＨと記載する。スキャナＩ／Ｆ制御部１０６は、スキャナ１１１を制御する。プリンタＩ／Ｆ制御部１０７は、プリンタ１１２を制御する。
【００１３】
ＮＶＲＡＭ１０８は、不揮発性のメモリであり情報処理装置１００内で用いられる各種設定値が保存される。パネル制御部１０９は、操作パネル１１３を制御することで、各種情報の表示、ユーザからの指示入力の受け付けを行う。ネットワークＩ／Ｆ制御部１１０は、ＬＡＮネットワーク１１５とのデータの送受信を制御する。バス１１４には、ＣＰＵ１０１、ＲＯＭ１０２、ＲＡＭ１０３、外部記憶装置１０４、ＵＳＢＨ  Ｉ／Ｆ制御部１０５、スキャナＩ／Ｆ制御部１０６、プリンタＩ／Ｆ制御部１０７、ＮＶＲＡＭ１０８、パネル制御部１０９、およびネットワークＩ／Ｆ制御部１１０が接続される。また、バス１１４は、ＣＰＵ１０１からの制御信号や各構成要素間のデータ信号が送受信されるシステムバスである。ＵＳＢデバイス１１６は、ＵＳＢキーボードやＩＣカードリーダなどのＵＳＢデバイスであり、情報処理装置１００にインストールされたアプリケーションからの要求に応じて、そのアプリケーションから利用可能なように制御される。なお、本明細書にて記載するＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）のバージョンや規格は特に限定するものでは無く、いずれのものにも本願発明は適用可能である。また、本実施形態における情報処理装置１００には、ＵＳＢデバイス１１６をＵＳＢ接続するための物理的なＵＳＢポートが１または複数設けられており、情報処理装置１００は、１または複数のＵＳＢデバイスが接続可能であるとする。なお、情報処理装置に複数のＵＳＢデバイスが接続されている場合には、各ＵＳＢデバイスに対し、以下に説明する制御権に関する制御が行われるものとする。
【００１４】
図２は、本実施形態に係る情報処理装置１００のソフトウェアの構成例を示すブロック図である。ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）２０１は、情報処理装置１００のソフトウェアを動作させるための基本ソフトウェアである。ＵＳＢＨドライバ２０２は、ＵＳＢＨ  Ｉ／Ｆ制御部１０５に接続されたＵＳＢデバイス１１６を制御するためのデバイスドライバである。
【００１５】
ＪａｖａＶＭ２０３は、Ｊａｖａプログラムを動作させるための仮想マシンである。ジョブ制御ライブラリ２０４、ＵＳＢ制御ライブラリ２０５、アプリケーションフレームワーク２０６、アプリ管理サービス２０７、およびアプリケーション２０８は、Ｊａｖａ（登録商標）言語で記述されたＪａｖａプログラムである。ＪａｖａＶＭ２０３がこれらのプログラムを解釈し、実行する。
【００１６】
ジョブ制御ライブラリ２０４は、スキャンジョブやプリントジョブを実行するためのＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ）を備えたライブラリである。アプリケーション２０８は、各種ジョブの制御を行う場合にこのＡＰＩを利用する。ＵＳＢ制御ライブラリ２０５は、ＵＳＢＨ  Ｉ／Ｆ制御部１０５に接続されたＵＳＢデバイス１１６を制御するための各種ＡＰＩを備えたライブラリである。ＵＳＢ制御ライブラリ２０５は、ＵＳＢ制御部２０９、イベント通知部２１０、および制御権管理部２１１を含んで構成される。ＵＳＢ制御部２０９は、ＵＳＢＨドライバ２０２を利用して、アプリケーションに対してＵＳＢＨ制御する機能を提供する。具体的には、接続されているＵＳＢデバイス１１６の一覧取得機能、接続されている個々のＵＳＢデバイス１１６の情報取得機能、データ送受信機能などが挙げられる。イベント通知部２１０は、ＵＳＢＨドライバ２０２の機能を利用して、接続されているＵＳＢデバイス１１６の状態を監視し、アプリケーション２０８に対して、ＵＳＢデバイス１１６の接続数の変化を通知する。ここで通知されるイベントを、以下、「ＵＳＢデバイス接続数変化イベント」と称する。アプリケーション２０８は、ＵＳＢ制御ライブラリ２０５に対してイベントリスナを予め登録しておくことにより、ＵＳＢデバイス接続数変化イベントを受け取ることができる。制御権管理部２１１は、アプリ管理テーブル（図７）を用いてアプリケーション毎にＵＳＢデバイス１１６の利用・制御が許可されていることを示す制御権（権限）を管理する。制御権管理部２１１は、制御権をアプリケーションに設定することによって、各アプリケーションに対するＵＳＢ制御部２０９やイベント通知部２１０の動作を切り替える。
【００１７】
アプリケーションフレームワーク２０６は、ＪａｖａＶＭ２０３上でＪａｖａ（登録商標）によって記述された複数のアプリケーション２０８（Ｊａｖａプログラム）を動作させるためのフレームワークである。また、アプリケーションフレームワーク２０６は、表示部（ここでは、操作パネル１１３）におけるアプリケーション間の表示画面の切り替えに係る表示制御を行う。さらに、アプリケーションフレームワーク２０６は、表示されているアプリケーションが切り替えられたことをアプリケーション２０８に通知する機能を備える。さらに、アプリケーション２０８は、各アプリケーションを一意に識別するためのアプリ識別子という情報を有する。そのため、アプリケーションフレームワーク２０６や各ライブラリは、アプリ識別子に基づいてアプリケーションを一意に識別することが可能である。
【００１８】
アプリ管理サービス２０７は、アプリケーションフレームワーク２０６上で動作するアプリケーション２０８のライフサイクル管理を行うためのサービスであり、アプリケーション２０８のインストール、アンインストール、開始、および停止を制御する。ユーザは、外部装置（不図示）が備えるウェブブラウザ（不図示）等を利用してアプリ管理サービス２０７が提供するＵＩ（Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ）にアクセスし、アプリケーションのインストール、アンインストール、開始、停止を指示することができる。アプリケーション２０８は、ジョブ制御ライブラリ２０４やＵＳＢ制御ライブラリ２０５を介して、スキャナ１１１、プリンタ１１２、およびＵＳＢデバイス１１６等を制御し、様々な機能をユーザに提供する。
【００１９】
図３は、情報処理装置１００の操作パネル１１３に表示されるＵＩの一例を示す図である。ＵＩ３００における表示領域は、メニューボタン領域３０１とアプリケーション表示領域３０２に分かれる。メニューボタン領域３０１は、アプリケーションに依存せず、常に同じ内容が表示される領域である。アプリケーション表示領域３０２は、アプリケーションに応じた操作画面が表示される領域である。メインメニューボタン３０３は、メインメニュー画面（図３（ａ））に遷移するためのボタンである。設定ボタン３０４は、情報処理装置１００の各種設定を変更するための設定メニュー画面（不図示）に遷移するためのボタンである。設定メニュー画面（不図示）における設定の例としてはネットワーク通信を行うためのＩＰアドレスの設定や、Ｅｍａｉｌ送信時に利用するメールサーバの設定などが挙げられる。
【００２０】
図３（ａ）は、情報処理装置１００を起動直後に表示される画面の一例であるメインメニュー画面を示す。アプリケーション表示領域３０２には、情報処理装置１００上にインストールされ利用可能になっているアプリケーションのボタンの一覧が表示される。この例では、「簡単コピー」アプリケーションに遷移するための簡単コピーボタン３０５と、「Ｅｍａｉｌ送信」アプリケーションに遷移するためのＥｍａｉｌ送信ボタン３０６が表示されている。つまり、アプリケーション２０８として、「簡易コピー」アプリケーションと「Ｅｍａｉｌ送信」アプリケーションが含まれる例を示している。
【００２１】
図３（ｂ）は、ＵＩ３００にて、簡単コピーボタン３０５が押下された際に表示される「簡易コピー」アプリケーションの画面の例である。このアプリケーションは、原稿をそのまま指定された部数だけコピーするための機能を提供する。部数入力領域３１０は、設定されている部数を表示するための領域である。操作パネル１１３上のテンキーもしくはＵＳＢキーボード（すなわち、ＵＳＢデバイス１１６）から入力された数値が表示される。スタートボタン３１１は、コピー処理を実行指示するためのボタンである。スタートボタン３１１が押下されると、スキャナ１１１から読み込んだ原稿データを、指定された部数だけプリンタ１１２を用いて紙に出力する。
【００２２】
図３（ｃ）は、ＵＩ３００にて、Ｅｍａｉｌ送信ボタン３０６が押下された際に表示される「Ｅｍａｉｌ」アプリケーションの画面の例である。Ｅｍａｉｌアドレス入力領域３２０は、送信先のＥｍａｉｌアドレスを入力するためのＵＩであり、ＵＳＢキーボード（すなわち、ＵＳＢデバイス１１６）を使って入力することが可能である。ＵＳＢキーボードを接続していない場合は、この領域をタップした際にソフトキーボード（不図示）が表示され、ユーザはソフトキーボードを用いてＥｍａｉｌアドレスを入力することができるものとする。送信ボタン３２１は、送信処理を実行指示するためのボタンである。送信ボタン３２１が押下されると、スキャナ１１１から読み込んだ原稿のデータを、Ｅｍａｉｌアドレス入力領域３２０に入力されたＥｍａｉｌアドレスを宛先として送信する。
【００２３】
［処理フロー］
以下、図４〜図１０を用いて処理の流れを説明する。以降で説明する全てのフローチャートは、各フローチャートで示す手順のプログラムがＲＡＭ１０３、ＲＯＭ１０２、外部記憶装置１０４のいずれかの記憶手段に記憶され、ＣＰＵ１０１により読み出されて実行されることで実現される。
【００２４】
図４は、アプリケーション２０８がＵＳＢ制御ライブラリ２０５からＵＳＢデバイス接続数変化イベントを受信した際の処理の流れを示すフローチャートである。図４のフローチャートの各手順は全てアプリケーション２０８が実行するものである。なお、このアプリケーションは、ＵＳＢキーボード（すなわち、ＵＳＢデバイス１１６）からの入力を受け付けるアプリケーションであると想定する。また、アプリケーション２０８は、イベントを受信するためのイベントリスナをＵＳＢ制御ライブラリ２０５に事前に登録しておくものとする。
【００２５】
ＵＳＢ制御ライブラリ２０５からＵＳＢデバイス接続数変化イベントを受信すると、Ｓ４０１にて、アプリケーション２０８は、ＵＳＢ制御ライブラリ２０５のＡＰＩを呼び出して、接続デバイスのリストを取得する。
【００２６】
Ｓ４０２にて、アプリケーション２０８は、Ｓ４０１で取得した接続デバイスリストにＵＳＢキーボードの情報が含まれるか否かに基づいて、ＵＳＢキーボードが存在するか否かを判定する。ＵＳＢキーボードが存在すると判定した場合は（Ｓ４０２にてＹＥＳ）、Ｓ４０３へ進み、ＵＳＢキーボードが存在しないと判定した場合は（Ｓ４０２にてＮＯ）、Ｓ４０５へ進む。
【００２７】
Ｓ４０３にて、アプリケーション２０８は、ＵＳＢキーボードからキー入力を読み込むための処理を行うスレッドであるＵＳＢキーボード読込スレッドが動作中であるか否かを判定する。ＵＳＢキーボード読込スレッドは、後述するＳ４０４を実行することにより動作が開始するものであり、処理の詳細は図５を用いて後述する。ＵＳＢキーボード読込スレッドが動作中でないと判定した場合は（Ｓ４０３にてＮＯ）、Ｓ４０４に進み、ＵＳＢキーボード読込スレッドが動作中であると判定した場合は（Ｓ４０３にてＹＥＳ）本処理フローを終了する。
【００２８】
Ｓ４０４にて、アプリケーション２０８は、ＵＳＢキーボード読込スレッドを生成し、ＵＳＢキーボードからの入力の監視処理を開始する。その後、本処理フローを終了する。
【００２９】
Ｓ４０５にて、アプリケーション２０８は、ＵＳＢキーボード読込スレッドが動作中であるか否かを判定する。ＵＳＢキーボード読込スレッドが動作中であると判定した場合は（Ｓ４０５にてＹＥＳ）、Ｓ４０６に進み、動作中でないと判定した場合は（Ｓ４０５にてＮＯ）本処理フローを終了する。
【００３０】
Ｓ４０６にて、アプリケーション２０８は、ＵＳＢキーボード読込スレッドを停止させるため、ＵＳＢキーボード読み込みスレッドに終了指示を出力する。その後、本処理フローを終了する。
【００３１】
図５は、アプリケーション２０８がＵＳＢキーボードから入力データを読み込む際の処理の流れを示すフローチャートである。図５のフローチャートの各手順は全てアプリケーション２０８が実行するものである。
【００３２】
Ｓ５０１にて、アプリケーション２０８は、ＵＳＢ制御ライブラリ２０５のＡＰＩを呼び出し、Ｓ４０１で取得したデバイスリスト中に存在するＵＳＢキーボードをオープンする。この時、ＵＳＢ制御ライブラリ２０５のＵＳＢ制御部２０９によってＵＳＢデバイス制御を一意に識別するためのデバイス制御識別子が生成され、アプリケーション２０８にその値が渡される。アプリケーション２０８は、それ以降の処理において、オープンしたＵＳＢデバイスを制御する際にはオープン時に受け取ったデバイス制御識別子を指定してＵＳＢ制御ライブラリ２０５の各ＡＰＩを呼び出す。上述したように、ＵＳＢデバイスの制御はアプリケーション間にておいて排他的であるため、別のアプリケーションから重複して同じＵＳＢデバイスがオープンを要求された場合は、ＵＳＢ制御部２０９は、エラーを返す。なお、オープンが失敗し、エラーが返された場合には、アプリケーション２０８は、ＵＳＢデバイスのオープンが可能となるまで待機する。
【００３３】
Ｓ５０２にて、アプリケーション２０８は、ＵＳＢ制御ライブラリ２０５のＡＰＩを呼び出して、オープンしたＵＳＢキーボードから入力データを読み込む。
【００３４】
Ｓ５０３にて、アプリケーション２０８は、Ｓ５０２の読み込み処理でエラーが発生したか否かを判定する。ここでエラーが発生するパターンとしては、ＵＳＢキーボードがＵＳＢポートから引き抜かれた場合や、図８で後述する処理により強制的にＵＳＢデバイスをクローズされた場合などが挙げられる。エラーが発生していないと判定した場合は（Ｓ５０３にてＮＯ）Ｓ５０４に進み、エラーが発生したと判定した場合は（Ｓ５０３にてＹＥＳ）Ｓ５０６に進む。
【００３５】
Ｓ５０４にて、アプリケーション２０８は、スレッドの終了指示を受け付けたか否かを判定する。具体的には、図４のＳ４０６の処理が実行された場合にスレッド終了指示を受け付けたと判定され、Ｓ４０６の処理が実行されていなければスレッド終了指示を受け付けていないと判定される。スレッド終了指示を受け付けたと判定した場合には（Ｓ５０４にてＹＥＳ）Ｓ５０６に進み、スレッド終了指示を受け付けていないと判定した場合には（Ｓ５０４にてＮＯ）Ｓ５０５に進む。
【００３６】
Ｓ５０５にて、アプリケーション２０８は、Ｓ５０２で読み込んだデータを処理する。例えば、図３（ｃ）に示した「Ｅｍａｉｌ送信」アプリケーションの場合、入力された文字列をＥｍａｉｌアドレス入力領域３２０に表示する。その後、Ｓ５０２に戻り、アプリケーション２０８は、処理を繰り返す。
【００３７】
Ｓ５０６にて、アプリケーション２０８は、ＵＳＢ制御ライブラリ２０５のＡＰＩを呼び出し、Ｓ５０１でオープンしたＵＳＢキーボードをクローズする。その後、本処理フローを終了する。なお、このクローズ処理完了後は、他のアプリケーション等から再び同じＵＳＢキーボードデバイスをオープンできるようになる。したがって、Ｓ５０１にて、エラーが返された場合において、他のアプリケーションがＳ５０６の処理を行った後、同じＵＳＢデバイスのオープンが可能となる。
【００３８】
図６は、アプリケーション２０８からＵＳＢ制御ライブラリ２０５のＡＰＩが呼び出された際のＵＳＢ制御ライブラリ２０５の各ＡＰＩの処理の流れを示すフローチャートである。図６のフローチャートの各手順はＵＳＢ制御ライブラリ２０５の内部で実行されるものである。
【００３９】
アプリケーション２０８からＡＰＩ呼び出しを受け付けると、Ｓ６０１にて、ＵＳＢ制御ライブラリ２０５内の制御権管理部２１１は、呼び出し元のアプリケーションのアプリ識別子を特定する。
【００４０】
Ｓ６０２にて、制御権管理部２１１は、ＵＳＢ制御ライブラリ２０５が保持しているアプリ管理テーブル（図７）に呼び出し元のアプリケーションのアプリ識別子が登録されているか否かを判定する。
【００４１】
図７にアプリ管理テーブル７００の一例を示す。アプリ管理テーブル７００は、ＵＳＢ制御ライブラリ２０５が呼び出し元のアプリケーションに関する情報を管理するためのテーブルである。アプリ管理テーブル７００において、アプリ識別子７０１、制御権７０２、デバイス制御識別子７０３、およびイベントリスナ７０４が対応付けて管理されている。アプリ識別子７０１は、各アプリケーションを一意に識別するための識別子である。制御権７０２は、そのアプリケーションにＵＳＢデバイスの制御を許可するか否かを示すフラグである。制御権７０２において、ＵＳＢデバイスの制御を許可しない場合は“０”が設定され、ＵＳＢデバイスの制御を許可する場合は“１”が設定される。以降の説明では、制御権が“０”の場合を「制御権を持っていない」、制御権が“１”の場合を「制御権を持っている」と表現する。デバイス制御識別子７０３は、そのアプリケーションによるＵＳＢ制御を一意に識別するための識別子であり、アプリケーションがＵＳＢデバイスをオープンする際にＵＳＢ制御部２０９が生成したデバイス制御識別子を記憶する。イベントリスナ７０４は、アプリケーション２０８にイベントを通知するためのイベントリスナであり、ＵＳＢ制御ライブラリ２０５のＡＰＩを介して各アプリケーションから登録されたイベントリスナが記憶される。
【００４２】
呼び出し元のアプリケーションがアプリ管理テーブル７００に登録されていないと判定された場合は（Ｓ６０２にてＮＯ）Ｓ６０３に進み、登録されていると判定された場合は（Ｓ６０２にてＹＥＳ）Ｓ６０５に進む。
【００４３】
Ｓ６０３にて、制御権管理部２１１は、Ｓ６０１で取得したアプリケーションのアプリ識別子をアプリ管理テーブル７００に登録する。この時、登録したアプリケーションにおいて、初期値として、制御権は持っていない状態（つまり、“０”が設定される）、デバイス制御識別子は空の状態で登録されるものとする。
【００４４】
Ｓ６０４にて、制御権管理部２１１は、アプリ管理テーブル７００内の制御権７０２の情報をアプリケーションの表示状況に応じて更新する処理を行う。この処理の詳細は図８のフローチャートを用いて後述する。この処理の後、Ｓ６０５へ進む。
【００４５】
Ｓ６０５にて、制御権管理部２１１は、呼び出し元のアプリケーションが制御権を持っているか否かを判定する。制御権を持っていると判定した場合は（Ｓ６０５にてＹＥＳ）Ｓ６０６に進み、制御権を持っていないと判定した場合は（Ｓ６０５にてＮＯ）Ｓ６０７に進む。
【００４６】
Ｓ６０６にて、制御権管理部２１１は、呼び出されたＡＰＩ処理を通常実行する。その後、本処理フローを終了する。ここで「通常実行」とは、物理的に接続されているＵＳＢデバイスに対し、設定変更など何も手を加えずに処理を行うことを意味する。例えば、ＡＰＩ処理が接続デバイス一覧取得ＡＰＩの実行である場合は、接続されているＵＳＢデバイスの情報のリストをそのまま呼び出し元のアプリケーションに返す。
【００４７】
Ｓ６０７にて、ＵＳＢ制御部２０９は、接続デバイス数が“０”であると見なしてＡＰＩ処理を実行する。例えば、ＡＰＩ処理が接続デバイス一覧取得ＡＰＩの実行である場合は、アプリに空の情報を返す。ここでの空の情報とは、接続されているＵＳＢデバイスは無し、ということを示す。つまり、ＵＳＢ制御部２０９は、呼び出し元のアプリケーションがＵＳＢデバイスの制御権を持っていない場合、そのＵＳＢデバイスが物理的に情報処理装置１００に接続されている場合でも、接続されていないものとして呼び出し元に応答する。その後、本処理フローを終了する。
【００４８】
図８は、アプリ管理テーブル７００の制御権情報を更新する際の処理の流れを示すフローチャートである。本処理は、図６のＳ６０４や後述する図９Ｓ９０３に対応する。図８のフローチャートの各手順は、ＵＳＢ制御ライブラリ２０５の内部で実行されるものである。
【００４９】
Ｓ８０１にて、制御権管理部２１１は、操作パネル１１３に表示されているアプリケーションのアプリ識別子を特定する。ここでの表示されているアプリケーションとは、例えば、図３（ｂ）（ｃ）に示したように、操作パネル１１３において、対応する画面が表示されているアプリケーションを意味する。
【００５０】
Ｓ８０２にて、制御権管理部２１１は、Ｓ８０１で特定したアプリケーションのアプリ識別子がアプリ管理テーブル７００に含まれているか否かを判定する。含まれていないと判定した場合は（Ｓ８０２にてＮＯ）アプリ管理テーブル７００を更新せずに、本処理フローを終了する。アプリ管理テーブル７００に含まれていると判定した場合は（Ｓ８０２にてＹＥＳ）、Ｓ８０３に進む。
【００５１】
Ｓ８０３にて、制御権管理部２１１は、Ｓ８０１で特定したアプリケーションが制御権を持っているか否かを判定する。制御権を持っていると判定した場合は（Ｓ８０３にてＹＥＳ）アプリ管理テーブル７００を更新せずに、本処理フローを終了する。Ｓ８０１で特定したアプリケーションが制御権を持っていないと判定した場合は（Ｓ８０３にてＮＯ）Ｓ８０４に進む。
【００５２】
Ｓ８０４にて、制御権管理部２１１は、アプリ管理テーブル７００内に制御権を持っているアプリケーションが存在するか否かを判定する。制御権を持っているアプリケーションが存在しないと判定した場合は（Ｓ８０４にてＮＯ）Ｓ８０９に進み、制御権を持っているアプリケーションが存在すると判定した場合は（Ｓ８０４にてＹＥＳ）Ｓ８０５に進む。
【００５３】
Ｓ８０５にて、制御権管理部２１１は、Ｓ８０４で制御権を持っていると判定したアプリケーションの制御権を無効にする。すなわち、制御権管理部２１１は、アプリ管理テーブル７００におけるアプリケーションの制御権７０２の値を“０”に変更する。
【００５４】
Ｓ８０６にて、制御権管理部２１１は、Ｓ８０４で判定したアプリケーションが制御中のＵＳＢデバイスを全て強制的にクローズする。この時、制御権管理部２１１は、アプリ管理テーブル７００上のデバイス制御識別子に基づいて、クローズすべきデバイスを特定する。
【００５５】
Ｓ８０７にて、イベント通知部２１０は、アプリ管理テーブル７００を参照して、Ｓ８０４で判定したアプリケーションのイベントリスナが存在するか否かを判定する。イベントリスナが存在しないと判定した場合は（Ｓ８０７にてＮＯ）Ｓ８０９に進み、イベントリスナが存在すると判定した場合は（Ｓ８０７にてＹＥＳ）Ｓ８０８に進む。
【００５６】
Ｓ８０８にて、イベント通知部２１０は、Ｓ８０４で判定したアプリケーションに対し、ＵＳＢデバイス接続数変化イベントを通知する。その後、Ｓ８０９に進む。
【００５７】
Ｓ８０９にて、制御権管理部２１１は、Ｓ８０１で特定した表示中のアプリケーションに制御権を付与する。すなわち、制御権管理部２１１は、アプリ管理テーブル７００におけるアプリケーションの制御権７０２の値を“１”に変更する。
【００５８】
Ｓ８１０にて、イベント通知部２１０は、アプリ管理テーブル７００を参照し、Ｓ８０１で特定したアプリケーションのイベントリスナが存在するか否かを判定する。イベントリスナが存在しないと判定した場合は（Ｓ８１０にてＮＯ）本処理フローを終了し、イベントリスナが存在すると判定した場合は（Ｓ８１０にてＹＥＳ）Ｓ８１１に進む。
【００５９】
Ｓ８１１にて、イベント通知部２１０は、Ｓ８０１で特定したアプリケーションのイベントリスナに対し、ＵＳＢデバイス接続数変化イベントを通知する。その後、本処理フローを終了する。
【００６０】
以上の制御により、制御権を失ったアプリケーション（つまり、制御権の値が“１”から“０”に変更されたアプリケーション）に対しては、ＵＳＢデバイスが取り外された場合と同じ状況に制御することが可能になる。また、制御権を獲得したアプリケーション（つまり、制御権の値が“０”から“１”に変更されたアプリケーション）に対しては、ＵＳＢデバイスが新たに接続された際と同等の状況に制御することが可能になる。
【００６１】
図９は、ＵＳＢ制御ライブラリ２０５がアプリケーションの切り替えを検出した際の処理の流れを示すフローチャートである。図９のフローチャートの各手順はＵＳＢ制御ライブラリ２０５内の制御権管理部２１１が実行するものである。なお、アプリケーションの切り替えの検出はアプリケーションフレームワーク２０６を介して行う。なお、本実施形態において、アプリケーションの切り替えとは、例えば、操作パネル１１３に表示される画面が別のアプリケーションの画面に切り替える場合を想定する。
【００６２】
アプリケーションの切り替えを検出すると、Ｓ９０１にて、制御権管理部２１１は、切り替え先のアプリケーションのアプリ識別子がアプリ管理テーブル７００に登録されているか否かを判定する。登録されていないと判定した場合は（Ｓ９０１にてＮＯ）本処理フローを終了し、登録されていると判定した場合は（Ｓ９０１にてＹＥＳ）Ｓ９０２に進む。
【００６３】
Ｓ９０２にて、制御権管理部２１１は、アプリ管理テーブル７００を参照し、切り替え先のアプリケーションが制御権を持っているか否かを判定する。制御権を持っていると判定した場合は（Ｓ９０２にてＹＥＳ）本処理フローを終了し、制御権を持っていないと判定した場合は（Ｓ９０２にてＮＯ）Ｓ９０３に進む。
【００６４】
Ｓ９０３にて、制御権管理部２１１は、図８で説明した制御権更新処理を実行する。その後、本処理フローを終了する。
【００６５】
図１０は、ＵＳＢ制御ライブラリ２０５がＵＳＢデバイス１１６の接続もしくは取り外しを検出した際の処理の流れを示すフローチャートである。図１０のフローチャートの各手順はＵＳＢ制御ライブラリ２０５内のイベント通知部２１０が実行するものである。
【００６６】
ＵＳＢデバイスの接続もしくは取り外しを検出すると、Ｓ１００１にて、イベント通知部２１０は、アプリ管理テーブル７００を参照し、制御権を持っているアプリケーションが存在するか否かを判定する。制御権を持っているアプリケーションが存在しないと判定した場合は（Ｓ１００１にてＮＯ）本処理フローを終了し、制御権を持っているアプリケーションが存在すると判定した場合は（Ｓ１００１にてＹＥＳ）Ｓ１００２に進む。
【００６７】
Ｓ１００２にて、イベント通知部２１０は、アプリ管理テーブル７００を参照し、制御権を持っているアプリケーションのイベントリスナが存在するか否かを判定する。イベントリスナが存在しないと判定した場合は（Ｓ１００２にてＮＯ）処理を終了し、イベントリスナが存在すると判定した場合は（Ｓ１００２にてＹＥＳ）Ｓ１００３に進む。
【００６８】
Ｓ１００３にて、イベント通知部２１０は、制御権を持っているアプリケーションのイベントリスナにＵＳＢデバイス接続数変化イベントを通知する。その後、本処理フローを終了する。
【００６９】
以上、本実施形態では、ＵＳＢデバイスを制御するアプリケーションの制御権を管理して制御権のあるアプリケーションにのみＵＳＢデバイスを制御させる。また、本実施形態では、制御権のないアプリケーションに対しては接続デバイス数が０であるように見せかける。これにより、制御権を獲得したアプリケーションに対しては、新たにＵＳＢデバイスが接続されたように見せかける。一方、制御権を失ったアプリケーションに対しては、全てのＵＳＢデバイスが抜かれたように（つまり、ＵＳＢ接続が解除されたように）見せかける。そのため、アプリケーションがＵＳＢデバイスを占有して解放しない仕様になっていたとしても、アプリケーションを改変することなくＵＳＢデバイスを利用する複数のアプリケーションを共存させることができる。
【００７０】
＜第二の実施形態＞
次に、本発明の第二の実施形態について説明する。第一の実施形態は、ＵＳＢデバイスを利用するアプリケーションの切り替えに応じて制御権の更新を行い、操作部に表示されているアプリケーションがＵＳＢデバイスを優先的に制御できるような構成である。第二の実施形態では、先にＵＳＢデバイスをオープンしたアプリケーションにＵＳＢデバイスを占有させたい場合も考慮する。なお、以下では第一の実施形態と異なる点についてのみ説明し、それ以外の点については第一の実施形態と同様であるものとする。
【００７１】
図１１は、第二の実施形態に係る情報処理装置１００の設定画面１１００の一例を示す。設定画面１１００は、ＵＳＢ制御ライブラリ２０５の動作モードを切り替えるための設定画面である。設定画面１１００は、図３の設定ボタン３０４が押下された際に表示される設定メニュー画面（不図示）から遷移することができる。
【００７２】
ラジオボタン１１０１は、ＵＳＢ制御ライブラリ２０５の動作モードを選択するためのボタンである。本実施形態において、動作モードには「互換モード」と「表示アプリ優先モード」の２種類が存在する。互換モードとは、アプリケーション２０８が明示的にＵＳＢデバイス１１６をクローズしなければ他のアプリケーションから同じＵＳＢデバイス１１６を制御できない動作モードであり、過去のデバイスと互換動作をさせるためのモードである。つまり、互換モードでは、第一の実施形態にて述べた本実施形態に係る処理は行われない。一方、表示中アプリ優先モードは、第一の実施形態で説明した動作を行う動作モードである。キャンセルボタン１１０３は、動作モード設定を変更せずに設定メニュー画面（不図示）に戻るためのボタンである。ＯＫボタン１１０２は、ラジオボタン１１０１で選択した動作モードに設定を変更するためのボタンである。ここで設定された動作モードの情報はＮＶＲＡＭ１０８に保存される。なお、ＯＫボタン１１０２を押下しても操作パネル１１３上の表示が切り替わるだけですぐに動作には反映されず、実際の動作は情報処理装置１００の再起動後に切り替わるものとする。
【００７３】
［処理フロー］
図１２は、アプリケーション２０８からＵＳＢ制御ライブラリ２０５のＡＰＩが呼び出された際のＵＳＢ制御ライブラリ２０５の各ＡＰＩの処理の流れを示すフローチャートである。図１２のフローチャートの各手順はＵＳＢ制御ライブラリ２０５の内部で実行されるものである。
【００７４】
アプリケーション２０８からＡＰＩ呼び出しを受け付けると、Ｓ１２０１にて、ＵＳＢ制御ライブラリ２０５は、ＮＶＲＡＭ１０８に保存された情報を参照して、ＵＳＢ制御ライブラリ２０５の動作モードが互換モードであるか否かを判定する。ＵＳＢ制御ライブラリ２０５の動作モードが互換モードでないと判定した場合は（Ｓ１２０１にてＮＯ）Ｓ１２０２に進み、互換モードであると判定した場合は（Ｓ１２０１にてＹＥＳ）Ｓ１２０３に進む。
【００７５】
Ｓ１２０２にて、制御権管理部２１１は、図６で説明したフローチャートの処理を実行する。その後、本処理フローを終了する。
【００７６】
Ｓ１２０３にて、ＵＳＢ制御部２０９は、ＡＰＩ処理を通常実行する。ここでの処理は、図６のＳ６０６と同様の処理となる。その後、本処理フローを終了する。
【００７７】
図１３は、ＵＳＢ制御ライブラリ２０５がアプリケーション２０８の切り替えを検出した際の処理の流れを示すフローチャートである。図１３のフローチャートの各手順はＵＳＢ制御ライブラリ２０５内の制御権管理部２１１が実行するものである。
【００７８】
アプリケーション２０８の切り替えを検出すると、Ｓ１３０１にて、制御権管理部２１１は、ＮＶＲＡＭ１０８に保存された情報を参照して、ＵＳＢ制御ライブラリ２０５の動作モードが互換モードであるか否かを判定する。動作モードが互換モードでないと判定した場合は（Ｓ１３０１にてＮＯ）Ｓ１３０２に進み、互換モードであると判定した場合は（Ｓ１３０１にてＹＥＳ）本処理フローを終了する。
【００７９】
Ｓ１３０２にて、制御権管理部２１１は、図９で説明したフローチャートの処理を実行する。その後、本処理フローを終了する。
【００８０】
図１４は、ＵＳＢ制御ライブラリ２０５がＵＳＢデバイスの接続もしくは取り外しを検出した際の処理の流れを示すフローチャートである。図１４のフローチャートの各手順はＵＳＢ制御ライブラリ２０５内のイベント通知部２１０が実行するものである。
【００８１】
ＵＳＢデバイスの接続もしくは取り外しを検出すると、Ｓ１４０１にて、イベント通知部２１０は、ＮＶＲＡＭ１０８に保存された情報を参照して、ＵＳＢ制御ライブラリ２０５の動作モードが互換モードであるか否かを判定する。動作モードが互換モードでないと判定した場合は（Ｓ１４０１にてＮＯ）Ｓ１４０２に進み、互換モードであると判定した場合は（Ｓ１４０１にてＹＥＳ）Ｓ１４０３に進む。
【００８２】
Ｓ１４０２にて、イベント通知部２１０は、図１０で説明したフローチャートの処理を実行する。その後、本処理フローを終了する。
【００８３】
Ｓ１４０３にて、イベント通知部２１０は、アプリ管理テーブル７００上に登録されている全てのイベントリスナに対してＵＳＢデバイス接続数変化イベントを通知する。その後、本処理フローを終了する。
【００８４】
以上、本実施形態では、ＵＳＢ制御ライブラリ２０５の動作モードをユーザから設定可能とし動作を切り替えられるようにする。これにより、ＵＳＢデバイスをアプリケーションに占有させたい状況が発生した場合でも動作モードを切り替えることで対応できる。
【００８５】
＜第三の実施形態＞
次に、本発明の第三の実施形態について説明する。第三の実施形態では、特定のＵＳＢデバイスは、ＵＳＢデバイスを先にオープンしたアプリケーションがＵＳＢデバイスを占有したい場合を考慮する。なお、以下では第一の実施形態と異なる点についてのみ説明し、それ以外の点については第一の実施形態と同様であるものとする。
【００８６】
第三の実施形態において、特定のデバイスはアプリケーションに占有させたいという状況に対応するため、ＵＳＢ制御ライブラリ２０５は、例外デバイスリストを保持する。ここでの例外デバイスとは、情報処理装置１００に接続されるＵＳＢデバイスのうち、本願発明に係る画面表示の切り替えに伴う各アプリケーションの制御権の切り替え制御の対象外とするＵＳＢデバイスを意味する。
【００８７】
図１５は、本実施形態に係る例外デバイスリスト１５００の一例を示す。例外デバイスリスト１５００は、ＶＩＤ１５０１とＰＩＤ１５０２の組から構成される。ＶＩＤ１５０１は、ベンダＩＤでありＵＳＢデバイスのベンダを一意に識別するための識別子である。ＰＩＤ１５０２は、プロダクトＩＤであり、各ベンダの製品を一意に識別するための識別子である。これらのＩＤは、ＵＳＢデバイスの内部に保存されている。各種ソフトウェアモジュールは、ＵＳＢデバイスからこれらの情報を読み取ることでＵＳＢデバイスの機種判別を行うことができる。なお、第三の実施形態において例外デバイスリスト１５００は、ＵＳＢ制御ライブラリ２０５内に事前に組み込まれているものとする。
【００８８】
［処理フロー］
図１６は、アプリケーション２０８からＵＳＢ制御ライブラリ２０５のＡＰＩが呼び出された際のＵＳＢ制御ライブラリの各ＡＰＩの処理の流れを示すフローチャートである。図１６のフローチャートの各手順はＵＳＢ制御ライブラリ２０５の内部で実行されるものである。
【００８９】
アプリケーション２０８からＡＰＩ呼び出しを受け付けると、Ｓ１６０１にて、制御権管理部２１１は、呼び出し元のアプリケーションのアプリ識別子を特定する。
【００９０】
Ｓ１６０２にて、制御権管理部２１１は、ＵＳＢ制御ライブラリ２０５が保持しているアプリ管理テーブル７００に呼び出し元のアプリケーションが登録されているか否かを判定する。呼び出し元のアプリケーションがアプリ管理テーブル７００に登録されていないと判定された場合は（Ｓ１６０２にてＮＯ）Ｓ１６０３に進み、登録されていると判定された場合は（Ｓ１６０２にてＹＥＳ）Ｓ１６０５に進む。
【００９１】
Ｓ１６０３にて、制御権管理部２１１は、アプリ管理テーブル７００にＳ１６０１で特定したアプリケーションのアプリ識別子を登録する。この時、登録したアプリケーションにおいて、初期値として、制御権は持っていない状態（つまり、“０”が設定される）、デバイス制御識別子は空の状態で登録されるものとする。
【００９２】
Ｓ１６０４にて、制御権管理部２１１は、アプリ管理テーブル７００内の制御権７０２の値を状況に応じて更新する。この処理の詳細は、図１７を用いて後述する。本処理の後、Ｓ１６０５に進む。
【００９３】
Ｓ１６０５にて、制御権管理部２１１は、アプリ管理テーブル７００を参照して、呼び出し元のアプリケーションが制御権を持っているか否かを判定する。呼び出し元のアプリケーションが制御権を持っていると判定した場合は（Ｓ１６０５にてＹＥＳ）Ｓ１６０６に進み、制御権を持っていないと判定した場合は（Ｓ１６０５にてＮＯ）Ｓ１６０７に進む。
【００９４】
Ｓ１６０６にて、ＵＳＢ制御部２０９は、呼び出されたＡＰＩ処理を通常実行する。ここでの処理は、図６のＳ６０６の処理と同様である。その後、本処理フローを終了する。
【００９５】
Ｓ１６０７にて、ＵＳＢ制御部２０９は、例外デバイスリスト１５００に登録されているＵＳＢデバイスだけが接続されている状態であると見なしてＡＰＩ処理を実行する。例えば、ＡＰＩ処理が接続デバイス一覧取得ＡＰＩの実行である場合、例外デバイスリスト１５００にＵＳＢデバイスが登録されていれば、登録されたＵＳＢデバイスの情報のリストを返し、登録されていなければアプリに空の情報を返す。ここでの空の情報とは、接続されているＵＳＢデバイスは無し、ということを示す。つまり、ＵＳＢ制御部２０９は、呼び出し元のアプリケーションがＵＳＢデバイスの制御権を持っていない場合、例外デバイスリスト１５００に登録され、物理的に情報処理装置１００に接続されたＵＳＢデバイスの情報のみを呼び出し元に応答する。その後、本処理フローを終了する。
【００９６】
第三の実施形態において、ＵＳＢ制御ライブラリ２０５がアプリケーションの切り替えを検出した際の処理は、第一の実施形態にて説明した図９の処理のうち、Ｓ９０３の制御権更新処理が図１７に示す処理となる。それ以外の処理は同じである。
【００９７】
図１７は、第三の実施形態におけるアプリ管理テーブル７００の制御権情報を更新する際の処理の流れを示すフローチャートである。図１７のフローチャートの各手順はＵＳＢ制御ライブラリ２０５の内部で実行される。
【００９８】
Ｓ１７０１にて、制御権管理部２１１は、操作パネル１１３に表示中のアプリケーションのアプリ識別子を特定する。
【００９９】
Ｓ１７０２にて、制御権管理部２１１は、Ｓ１７０１で特定したアプリケーションのアプリ識別子がアプリ管理テーブル７００に含まれているか否かを判定する。含まれていないと判定した場合は（Ｓ１７０２にてＮＯ）アプリ管理テーブル７００を更新せずに本処理フローを終了する。アプリ管理テーブル７００に含まれていると判定した場合は（Ｓ１７０２にてＹＥＳ）、Ｓ１７０３に進む。
【０１００】
Ｓ１７０３にて、制御権管理部２１１は、アプリ管理テーブル７００を参照して、Ｓ１７０１で特定したアプリケーションが制御権を持っているか否かを判定する。制御権を持っていると判定した場合は（Ｓ１７０３にてＹＥＳ）アプリ管理テーブル７００を更新せずに、本処理フローを終了する。表示中のアプリケーションが制御権を持っていないと判定した場合は（Ｓ１７０３にてＮＯ）Ｓ１７０４に進む。
【０１０１】
Ｓ１７０４にて、制御権管理部２１１は、アプリ管理テーブル７００内に制御権を持っているアプリケーションが存在するか否かを判定する。制御権を持っているアプリケーションが存在しないと判定した場合は（Ｓ１７０４にてＮＯ）Ｓ１７１０に進み、制御権を持っているアプリケーションが存在すると判定した場合は（Ｓ１７０４にてＹＥＳ）Ｓ１７０５に進む。
【０１０２】
Ｓ１７０５にて、制御権管理部２１１は、Ｓ１７０４で制御権を持っていると判定したアプリケーションの制御権を無効にする。すなわち、制御権管理部２１１は、アプリ管理テーブル７００においてそのアプリケーションの制御権７０２の値を“０”に変更する。
【０１０３】
Ｓ１７０６にて、制御権管理部２１１は、アプリケーションから制御されているＵＳＢデバイス（すなわち、オープンされているＵＳＢデバイス）が全て例外デバイスリスト１５００に含まれるＵＳＢデバイスであるか否かを判定する。全て例外デバイスリスト１５００に含まれていると判定した場合は（Ｓ１７０６にてＹＥＳ）Ｓ１７１０に進み、例外デバイスリスト１５００に含まれないＵＳＢデバイスが１つでもオープン中であると判定した場合は（Ｓ１７０６にてＮＯ）Ｓ１７０７に進む。
【０１０４】
Ｓ１７０７にて、制御権管理部２１１は、例外デバイスリスト１５００に登録されていないオープン中のＵＳＢデバイスのクローズ処理を行う。つまり、制御権管理部２１１は、オープン中のＵＳＢデバイスに対し、強制的にクローズ処理を行う。
【０１０５】
Ｓ１７０８にて、イベント通知部２１０は、アプリ管理テーブル７００を参照し、Ｓ１７０４で判定したアプリケーションのイベントリスナが存在するか否かを判定する。イベントリスナが存在しないと判定した場合は（Ｓ１７０８にてＮＯ）Ｓ１７１０に進み、イベントリスナが存在すると判定した場合は（Ｓ１７０８にてＹＥＳ）Ｓ１７０９に進む。
【０１０６】
Ｓ１７０９にて、イベント通知部２１０は、Ｓ１７０４で判定したアプリケーションにＵＳＢデバイス接続数変化イベントを通知する。
【０１０７】
Ｓ１７１０にて、制御権管理部２１１は、Ｓ１７０１で特定した表示中のアプリケーションに制御権を付与する。すなわち、制御権管理部２１１は、アプリ管理テーブル７００において、そのアプリケーションの制御権７０２の値を“１”に変更する。
【０１０８】
Ｓ１７１１にて、制御権管理部２１１は、Ｓ１７０７にてクローズ処理を行ったか否かを判定する。すなわち、オープン中のＵＳＢデバイスが全て例外デバイスであるか否かを判定する。クローズ処理を行ったと判定した場合は（Ｓ１７１１にてＹＥＳ）Ｓ１７１２に進み、クローズ処理を行っていないと判定した場合は（Ｓ１７１１にてＮＯ）、本処理フローを終了する。
【０１０９】
Ｓ１７１２にて、イベント通知部２１０は、アプリ管理テーブル７００を参照し、Ｓ１７０１で特定したアプリケーションのイベントリスナが存在するか否かを判定する。イベントリスナが存在しないと判定した場合は（Ｓ１７１２にてＮＯ）本処理フローを終了し、イベントリスナが存在すると判定した場合は（Ｓ１７１２にてＹＥＳ）Ｓ１７１３に進む。
【０１１０】
Ｓ１７１３にて、イベント通知部２１０は、Ｓ１７０１で特定したアプリケーションのイベントリスナに対してＵＳＢデバイス接続数変化イベントを通知する。その後、本処理フローを終了する。
【０１１１】
図１８は、ＵＳＢ制御ライブラリ２０５がＵＳＢデバイスの接続もしくは取り外しを検出した際の処理の流れを示すフローチャートである。図１８のフローチャートの各手順はＵＳＢ制御ライブラリ２０５内のイベント通知部２１０が実行するものである。
【０１１２】
ＵＳＢデバイスの接続もしくは取り外しを検出すると、Ｓ１８０１にて、イベント通知部２１０は、接続もしくは取り外されたＵＳＢデバイスが例外デバイスリスト１５００に登録されていたＵＳＢデバイスか否かを判定する。例外デバイスリスト１５００に登録されていないＵＳＢデバイスであると判定した場合は（Ｓ１８０１にてＮＯ）Ｓ１８０２に進み、登録されていたＵＳＢデバイスであると判定した場合は（Ｓ１８０１にてＹＥＳ）。Ｓ１８０３に進む。
【０１１３】
Ｓ１８０２にて、イベント通知部２１０は、図１０のフローチャートと同様の処理を行う。その後、本処理フローを終了する。
【０１１４】
Ｓ１８０３にて、イベント通知部２１０は、アプリ管理テーブル７００に登録されている全てのイベントリスナに対してＵＳＢデバイス接続数変化イベントを通知する。その後、本処理フローを終了する。
【０１１５】
以上、第三の実施形態においては、例外デバイスリストを保持し、それに基づいて制御を切り分ける。これにより、特定のＵＳＢデバイスだけはアプリケーションに占有させたいという状況にも対応できる。なお、本実施形態では例外デバイスリストは事前にＵＳＢ制御ライブラリ２０５に組み込まれている構成としたが、ユーザが例外デバイスリストにデバイスを登録できるようにしてもよい。また、アプリケーション自身が例外デバイスを登録できるようにしてもよい。
【０１１６】
また、例外デバイスリストにおいて、例外デバイスとして各ＵＳＢデバイスを登録する例を示したが、これに限定するものではない。例えば、ベンダＩＤのみを登録し、そのベンダＩＤが示すベンダのＵＳＢデバイス製品すべてを例外デバイスとして扱えるようにしてもよい。また、製品グループを示すＩＤを新たに設け、そのグループに属するＵＳＢデバイスを例外デバイスとして扱えるようにしてもよい。
【０１１７】
また、上記の実施形態では、いずれのアプリケーションも同じ扱いとしたがこれに限定するものではない。例えば、例外アプリケーションとして、リストに登録をしておき、登録されたアプリケーションについては、例えば、対応する画面が表示パネル上に表示中でない場合でもＵＳＢデバイスを占有できるような構成にしてもよい。この場合、ユーザが例外アプリケーションをリストに登録できるようにしてもよいし、アプリケーション自身が登録できるようにしてもよい。
【０１１８】
＜その他の実施形態＞
本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施例の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【符号の説明】
【０１１９】
１０５：ＵＳＢＨ  Ｉ／Ｆ制御部、１１６：ＵＳＢデバイス、２０２：デバイスドライバ、２０５：ＵＳＢ制御ライブラリ、２０８：アプリケーション、２０９：ＵＳＢ制御部、２１０：イベント通知部、２１１：制御権管理部
【図１】
0006643832.tif 000002
【図２】
0006643832.tif 000003
【図３】
0006643832.tif 000004
【図４】
0006643832.tif 000005
【図５】
0006643832.tif 000006
【図６】
0006643832.tif 000007
【図７】
0006643832.tif 000008
【図８】
0006643832.tif 000009
【図９】
0006643832.tif 000010
【図１０】
0006643832.tif 000011
【図１１】
0006643832.tif 000012
【図１２】
0006643832.tif 000013
【図１３】
0006643832.tif 000014
【図１４】
0006643832.tif 000015
【図１５】
0006643832.tif 000016
【図１６】
0006643832.tif 000017
【図１７】
0006643832.tif 000018
【図１８】
0006643832.tif 000019