(57)【特許請求の範囲】
【請求項１】
周辺装置と通信を行うための通信用チャネルを、複数のプログラム間で排他制御する情報処理装置であって、
前記周辺装置と前記通信用チャネルを介して通信する、前記周辺装置用のデバイスドライバと、
前記周辺装置と前記通信用チャネルを介して通信する複数の通信プログラムと、
前記デバイスドライバが起動指示されたときに、前記複数の通信プログラムのうちのいずれが前記通信用チャネルを使用しているかを、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）が管理しているプロセス情報を取得することにより識別する識別手段と、
前記識別手段により識別された通信プログラムに対し、前記通信用チャネルのクローズを要求し、前記デバイスドライバが前記通信用チャネルを使用可能にする制御手段とを有することを特徴とする情報処理装置。
【請求項２】
前記制御手段は、前記識別手段により識別された通信プログラムが複数あった場合、当該識別された複数の通信プログラムのうちの１つに対し、クローズ要求を行い、クローズできなかったときに前記識別された複数の通信プログラムのうちの他の１つに対し、クローズ要求を行うことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記制御手段は、前記識別手段により識別された通信プログラムが複数あった場合、当該識別された複数の通信プログラムのそれぞれに対し、クローズ要求を並行して行うことを特徴とする請求項１に記載の情報処理装置。
【請求項４】
前記識別手段は、前記デバイスドライバが、所定のＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ）に準拠しない要求に従って起動指示されたときに、前記通信用チャネルを使用している通信プログラムを識別することを特徴とする請求項１〜３のいずれか１項に記載の情報処理装置。
【請求項５】
前記所定のＡＰＩは、ＴＷＡＩＮ（Ｔｏｏｌ  Ｗｉｔｈｏｕｔ  Ａｎ  Ｉｎｔｅｒｒｅｓｔｉｎｇ  Ｎａｍｅ）であることを特徴とする請求項１〜４のいずれか１項に記載の情報処理装置。
【請求項６】
前記通信プログラムは、前記周辺装置における操作を監視するプログラムであることを特徴とする請求項１〜５のいずれか１項に記載の情報処理装置。
【請求項７】
周辺装置と通信を行うための通信用チャネルを、前記周辺装置用のデバイスドライバ及び複数の通信プログラム間で排他制御する情報処理装置の制御方法であって、
前記デバイスドライバが起動指示されたときに、前記複数の通信プログラムのうちのいずれが前記通信用チャネルを使用しているかを、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）が管理しているプロセス情報を取得することにより識別し、
前記識別された通信プログラムに対し、前記通信用チャネルのクローズを要求し、前記デバイスドライバが前記通信用チャネルを使用可能にすることを特徴とする情報処理装置の制御方法。
【請求項８】
コンピュータを、請求項１〜６のいずれか１項に記載の情報処理装置として機能させる、または請求項７に記載の制御方法をコンピュータにより実現することを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、周辺装置を制御する情報処理装置、その制御方法およびプログラムに関する。
【背景技術】
【０００２】
従来、周辺装置の一つとして画像読取装置（スキャナ専用機や、さらにプリンタ等を備えたマルチファンクションペリフェラルなど）が知られている。このような周辺装置としての画像読取装置は、コンピュータ等の情報処理装置にインストールされているスキャナドライバからの指示で画像の読み取りを行う。また、このような画像読取装置において、画像読取装置に設けた操作部から読み取りの指示を行って画像の読み取りを開始させ、情報処理装置に読取画像を転送する技術が知られている（特許文献１参照）。
【０００３】
このように画像読取装置の操作部からユーザが読取指示を行ったことを情報処理装置側で検知するために、情報処理装置においてスキャナ等の画像入力装置のボタンイベントを監視するボタン監視プログラムを用いるものがある。そして、ボタン監視プログラムが画像読取装置からの読取開始を指示するボタンが操作されたというイベントを検知すると、次のようにして画像の読み取りを実行させ、画像を読み取って得た画像データを情報処理装置において取得する。ボタン監視プログラムがイベントを検知すると、まず所定のアプリケーションを呼び出す。このアプリケーションはボタン押下時に起動するアプリケーションとして登録されているものである。そして、このアプリケーションが、例えばＴＷＡＩＮ（Ｔｏｏｌ  Ｗｉｔｈｏｕｔ  Ａｎ  Ｉｎｔｅｒｒｅｓｔｉｎｇ  Ｎａｍｅ）規格に準拠したスキャナドライバ（ＴＷＡＩＮドライバ）を呼び出して画像読取装置による画像の読み取りを実行させる。そして、このＴＷＡＩＮドライバによる読み取りによって得た画像データをアプリケーションが取得する。
【０００４】
この場合、画像読取装置と情報処理装置との間では、イベントの検知のための通信と画像データの通信とが行われる。ここで、情報処理装置のＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）によっては、ボタン監視プログラムとスキャナドライバとが同時に通信用のチャネルを確保できる仕組みが提供されていない場合がある。そのため、このような場合はボタン監視プログラムとスキャナドライバとの間で通信用のチャネルを排他制御する必要がある。即ち、ＯＳは、スキャナドライバが画像データの取得を行う前にボタン監視プログラムが使用している通信用チャネルをクローズさせてからスキャナドライバのための通信用チャネルをオープンさせることになる。このとき、ＯＳは、所定の箇所に記録されている、ボタン監視プログラムに対応付けられた画像読取装置を特定する情報（デバイス情報）と、スキャナドライバに対応付けられたデバイス情報とを参照し、これらが一致した場合、このような排他制御を行う。なお、スキャナドライバは上記のようなボタン監視プログラムを経由させて起動されるほか、ユーザがスキャナドライバを直接操作して画像読取装置に画像の読み取りを実行させることもある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平１１−３５５４８１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、例えば、既にスキャナドライバとボタン監視プログラムとが存在している情報処理装置に新たにスキャナドライバをインストールし、この新たなスキャナドライバを起動させて画像読取装置に画像の読み取りを実行させることがある。そして、この新たなスキャナドライバを起動させて画像読取装置に画像の読み取りを実行させる場合、既に起動しているボタン監視プログラムが使用している通信用チャネルをクローズさせる必要がある。
【０００７】
しかしながら、例えば、新たなスキャナドライバが上記したようなＴＷＡＩＮ等の所定のＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ）規格に準拠していないなど、ＯＳがデバイス情報を特定できない場合、上記排他制御が行えない。即ち、ＯＳは、新たなスキャナドライバが起動されても、所定の箇所にデバイス情報が記録されていない場合には、既に起動しているボタン監視プログラムが使用している通信用チャネルをクローズさせない。従って、所定のＡＰＩに準拠しない手順で起動されたスキャナドライバは読取処理を実行することができない。
【０００８】
また、１つの情報処理装置に複数のボタン監視プログラムが存在することがある。このような場合には、スキャナドライバを起動させる際、スキャナドライバが通信用チャネルをオープンしているボタン監視プログラムを指定して、クローズ要求を行う必要がある。
【０００９】
しかしながら、スキャナドライバがあるボタン監視プログラムを指定してクローズ要求を行っても、そのボタン監視プログラム以外が起動されていた場合にはクローズさせることができない。
【００１０】
このような課題は、画像読取装置以外の周辺装置でも生じ得る。即ち、複数のプログラムの間で使用する通信用のチャネルの排他制御が必要であり、デバイスドライバの起動によって他のプログラムが使用している通信用チャネルをクローズさせる術のない状況下では同様の課題が生じ得る。
【００１１】
本発明は、上記課題に鑑みなされたもので、デバイスドライバの起動だけでは他のプログラムが使用している通信用チャネルをクローズさせることができない場合であっても適切に当該チャネルをクローズさせる仕組みを提供するものである。
【課題を解決するための手段】
【００１２】
上記課題を解決するため、本発明の情報処理装置は、周辺装置と通信を行うための通信用チャネルを、複数のプログラム間で排他制御する情報処理装置であって、前記周辺装置と前記通信用チャネルを介して通信する、前記周辺装置用のデバイスドライバと、前記周辺装置と前記通信用チャネルを介して通信する複数の通信プログラムと、前記デバイスドライバが起動指示されたときに、前記複数の通信プログラムのうちのいずれが前記通信用チャネルを使用しているかを、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）が管理しているプロセス情報を取得することにより識別する識別手段と、前記識別手段により識別された通信プログラムに対し、前記通信用チャネルのクローズを要求し、前記デバイスドライバが前記通信用チャネルを使用可能にする制御手段とを有する。
【発明の効果】
【００１３】
本発明によれば、デバイスドライバを起動させるときに通信用チャネルを使用している通信プログラムを特定し、通信用チャネルをクローズさせることにより、デバイスドライバが通信用チャネルを使用できるようになる。
【図面の簡単な説明】
【００１４】
【図１】実施形態の画像読取システムを示すブロック図である。
【図２】コンピュータ２０のソフトウェア構成を示すブロック図である。
【図３】スキャナドライバ５０を用いた読取処理のシーケンスを示す図である。
【図４】クローズ対象のボタン監視プログラムを識別する処理を示すフローチャートである。
【図５】クローズ対象のボタン監視プログラムを識別する処理を示すフローチャートである。
【図６】クローズ対象のボタン監視プログラムを識別する処理を示すフローチャートである。
【発明を実施するための形態】
【００１５】
以下、本発明を実施するための形態について図面を用いて説明する。なお、この実施の形態で用いる装置の各構成要素の全てが本発明に必須のものではなく、また、各構成要素の種々の変形や応用も可能である。即ち、本発明は以下の実施形態の特定の構成に限定されるものではない。
【００１６】
図１は、本発明の一実施の形態に係る情報処理装置の一例であるコンピュータ２０と、周辺装置の一例であるスキャナ１０とを含む画像読取システムの構成を示すブロック図である。
【００１７】
スキャナ１０は、ハードウェア資源として、ＵＳＢインターフェース１１、ＣＰＵ１２、ＲＯＭ１３、ＲＡＭ１４、スキャナエンジン１５、操作パネル１６を有する。ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）インターフェース１１は、ＵＳＢの規格に従ってコンピュータ２０との間でデータの送受信を行う。ＣＰＵ１２は、ＲＯＭ１３に記憶されているスキャナ１０の制御プログラムを、ＲＡＭ１４にロードし、それを実行することでスキャナ１０の動作を制御する。ＲＯＭ１３は制御プログラムのほか、スキャナ１０の動作に必要なパラメータ等も記憶する。ＲＡＭ１４はＣＰＵ１２のワークエリアとして使用されるほか、スキャナ１０の状態情報や画像データの一時記憶領域等としても使用される。
【００１８】
スキャナエンジン１５は、原稿に光を照射する光源やその反射光を読み取り、光電変換するＣＣＤカラーイメージセンサ等を含む。スキャナ１０の原稿台に置かれた原稿上をスキャナエンジン１５により走査させて原稿上の画像を読み取り、読み取られた画像に応じた画像データ（読取画像データ）が生成される。操作パネル１６は、スキャナ１０の状態やユーザによる作業のためのメニューを表示する表示部と、ユーザが読取開始指示を含む種々の操作を行うハードキーを含む。操作パネル１６はタッチパネル等、他の形態としてもよい。
【００１９】
また、ここではスキャナ１０を、スキャナ専用機を例に示したが、これにプリンタなど他の機能をさらに付加したマルチファンクション機としてもよい。また、原稿上の画像を読み取る際、原稿台上に原稿を置いて走査するものとしたが、原稿搬送機構を設け、スキャナエンジン１５を固定させて、原稿の搬送により走査するようにしてもよい。また、スキャナ１０からの読み取り開始のための操作としては、操作パネル１６を用いるものに代え、読取対象の原稿がスキャナ１０にセットされたことを検知した場合に、それをコンピュータ２０に通知するものとしてもよい。また、スキャナ１０は、ＣＰＵ１２を持たないものとし、コンピュータ２０からの制御でスキャナエンジン１５を動作させるものとしてもよい。またカラースキャナに代えて、モノクロスキャナとしてもよいし、フィルムを読み取るフィルムスキャナとしてもよい。
【００２０】
コンピュータ２０は、ハードウェア資源として、ＵＳＢインターフェース２１、表示装置２２、入力装置２３、補助記憶装置２４、ＣＰＵ２５、ＲＯＭ２６、ＲＡＭ２７を有する。コンピュータ２０は、汎用的なパーソナルコンピュータを採用可能である。ＵＳＢインターフェース２１は、ＵＳＢ規格に従って周辺装置との間でデータの送受信を行う。表示装置２２は、コンピュータ２０にインストールされているソフトウェアに基づき、スキャナ１０を操作するための各種ユーザインターフェース（ＵＩ）など種々の情報を表示する。入力装置２３は、キーボード、ポインティングデバイス等で実現され、ユーザからの操作を示す情報を入力する。補助記憶装置２４は、内蔵又は外付けのハードディスク等で実現され、スキャナ１０の制御プログラムなどスキャナ１０の動作に関わる各種情報を記憶する。ＣＰＵ２５は、補助記憶装置２４やＲＯＭ２６に記憶されている各種プログラムを、ＲＡＭ２７にロードし、それを実行することでコンピュータ２０の動作を制御する。ＲＯＭ２６はコンピュータ２０を動作させるための各種プログラムや各種情報を記憶する。ＲＡＭ２７はＣＰＵ２５のワークエリアとして使用されるほか、各種情報を記憶する。
【００２１】
次に、図２を用いて、図１に示したコンピュータ２０においてソフトウェアによって実現される機能の構成を説明する。図２に示す各機能は、例えばＣＰＵ２５がＲＡＭ２７をワーク領域としてＲＯＭ２６や補助記憶装置２４に記憶された（インストールされた）プログラムを読み込み実行することで実現される。
【００２２】
コンピュータ２０の機能は、ＯＳ３０、アプリケーション４０、スキャナドライバ５０、第１のボタン監視プログラム６０、第２のボタン監視プログラム７０、ＵＳＢインターフェース制御部８０に大きく分けられる。
【００２３】
ＯＳ３０は、コンピュータ２０の動作の基本的な部分を司り、表示装置２２への出力や入力装置２３からの入力の制御、補助記憶装置２４などの各種メモリの管理機能などを含む。また、ＯＳ３０は、ＴＷＡＩＮデータソースマネージャ（ＴＷＡＩＮ  ＤＳＭ）３１、ボタン監視プログラム制御部３２、アプリケーション起動部３３を備えている。
【００２４】
ＴＷＡＩＮ  ＤＳＭ３１は、アプリケーション４０、スキャナドライバ５０を制御する。ＴＷＡＩＮ  ＤＳＭ３１は、ＴＷＡＩＮ規格に従ってアプリケーション４０とスキャナドライバ５０との通信を実現するＡＰＩである。ＴＷＡＩＮ  ＤＳＭ３１は、ＴＷＡＩＮ規格に準拠したコマンドによりスキャナドライバ５０の起動が指示されると、ボタン監視プログラム６０にクローズ要求を行う。ボタン監視プログラム制御部３２は、スキャナ１０などの周辺装置が操作されたかどうかを監視する監視プログラムがコンピュータ２０に存在する場合に、その監視プログラムの起動や終了を行う。アプリケーション起動部３３は、指定したアプリケーションを起動する機能を提供するＡＰＩにより実現される。
【００２５】
アプリケーション４０は、入力された画像データを処理するソフトウェアである。アプリケーション４０は、ＴＷＡＩＮ  ＤＳＭ３１を介してＴＷＡＩＮ規格に準拠したデータソース（スキャナドライバ）に指示して当該データソースから画像データを取得することが可能である。そして、取得した画像データを編集したり補正したりし、その結果を表示装置２２に表示させたり、画像ファイルとして補助記憶装置２４に記憶させたりする。また、アプリケーション４０としては、入力された画像データに含まれる文字情報を認識してそれを文字コードに変換する文字認識ソフト等もある。
【００２６】
スキャナドライバ５０は、スキャナ１０を制御するためのコマンドの送信やスキャナ１０からの画像データの受信等の制御を行うスキャナドライバである。スキャナドライバ５０におけるコマンドの送信や画像データの受信は、ＵＳＢインターフェース制御部８０を介して行われる。スキャナドライバ５０は、ＴＷＡＩＮ規格に準拠した動作を行うＴＷＡＩＮモードと、ＴＷＡＩＮ規格外の動作（例えば、ＲＡＷデータによる読取画像データの生成等）も可能な非ＴＷＡＩＮモードとを有する。スキャナドライバ５０は、画像読取装置を特定するためのデバイス情報と対応付けられるが、ここではスキャナ１０を示すデバイス情報と対応付けられているものとする。このスキャナ１０を示すデバイス情報はスキャナドライバ５０と関連付けられた所定のファイルに記録される。ただし、このファイルは、スキャナドライバ５０がＴＷＡＩＮモードで動作しＴＷＡＩＮドライバとして機能する際にはデバイス情報が記録されるが、非ＴＷＡＩＮモードで動作する際には記録されない。従って、スキャナドライバ５０がＴＷＡＩＮモードとして動作する場合には、ＯＳ３０のＴＷＡＩＮ  ＤＳＭ３１によるＵＳＢポートの排他制御が行われるが、非ＴＷＡＩＮモードとして動作する場合には、排他制御が行われない。また、スキャナドライバ５０は、画像データ取得部５１と、ＴＷＡＩＮ通信制御部５２と、起動プロセス識別部５３と、イベント送信部５４とを含む。
【００２７】
画像データ取得部５１は、スキャナ１０により読み取られた画像データを、ＵＳＢインターフェース制御部８０を介して取得する。画像データ取得部５１により取得された画像データは、ＲＡＭ２７に記憶された後、ＴＷＡＩＮ通信制御部５２の制御に従いアプリケーション４０に転送される。
【００２８】
ＴＷＡＩＮ通信制御部５２は、スキャナドライバ５０とアプリケーション４０のＴＷＡＩＮ規格に準拠したコマンド群の授受を行う。ＴＷＡＩＮ通信制御部５２は、アプリケーション４０から読取解像度やカラーモード、原稿サイズ等の読取設定を受け付け、スキャナドライバ５０に設定する。また、アプリケーション４０からの画像転送要求に対して、スキャナ１０が読み取った画像データがアプリケーション４０に転送されるよう制御する。この読取設定の情報や画像データの転送はＴＷＡＩＮ  ＤＳＭ３１を介して行われる。
【００２９】
起動プロセス識別部５３は、ＯＳ３０上で現在動作している（起動されている）種々のプログラムを特定する情報を、ＯＳ３０が管理しているプロセス情報を参照することによって識別する。起動プロセス識別部５３は、当該プロセス情報に含まれるいずれのプログラムがスキャナ１０と通信するためのＵＳＢポートをオープンしているかも識別可能である。
【００３０】
イベント送信部５４は、所定のアプリケーションに対し、プロセス間通信（動作中のプログラム間での通信）を利用して予め定義しておいたイベント情報を送信する。
【００３１】
なお、スキャナドライバ５０は、ＴＷＡＩＮ対応のアプリケーションからの指示に従った起動だけではなく、ユーザによる直接の操作でスキャナドライバ５０を起動させ、さらにユーザからの読み取り指示がなされた場合にも読み取り指示を行うことが可能である。ユーザによる直接の操作とは、ユーザが入力装置２３を用いてスキャナドライバ５０を起動させ、スキャナドライバ５０が有するＵＩ（ユーザインターフェース）画面を表示装置２２に表示させ、その画面を介してユーザが読取指示行うことである。この直接の操作が行われた場合に、スキャナドライバ５０を非ＴＷＡＩＮモードで動作させることができる。
【００３２】
第１のボタン監視プログラム６０、第２のボタン監視プログラム７０は、スキャナ１０を制御するためのコマンドの送信やスキャナ１０の状態を表すデータの受信等を行う（以下、単にボタン監視プログラム６０または７０とする）。このコマンドの送信や状態を表すデータの受信は、ＵＳＢインターフェース制御部８０を介して行われる。また、ボタン監視プログラム６０、７０は周辺装置を特定するためのデバイス情報と対応付けられるが、ここではスキャナ１０を示すデバイス情報と対応付けられているものとする。このスキャナ１０を示すデバイス情報はボタン監視プログラム６０、７０とそれぞれ関連付けられた所定のファイルに記録される。なお、ここでのスキャナ１０の状態は、「ボタン」の押下等に限定されるものではなく、ユーザによる何らかの操作があったことを取得できるものであればよい。また、本実施形態では、ボタン監視プログラム６０はコンピュータ２０（補助記憶装置２４）内に複数同時に存在し得る。しかしながら、本実施形態のＯＳ３０は、ＵＳＢインターフェース２１を介して接続されたスキャナ１０の状態を監視するボタン監視プログラムとしてはいずれか１つのボタン監視プログラムのみを起動させる。以下では、ボタン監視プログラム６０、７０は任意の１つのみが起動されるものとして説明する。
【００３３】
ボタン監視プログラム６０は、ボタンイベント監視部６１とイベント受信部６２とを有する。なお、ボタン監視プログラム７０もボタンイベント監視部７１とイベント受信部７２とを有するが、ボタンイベント監視部６１とイベント受信部６２とそれぞれ同様の機能を有するものであるので、以下では説明を省略する。
【００３４】
ボタンイベント監視部６１は、スキャナ１０の操作パネル１６におけるユーザの操作によって発生したボタンイベントの有無を定期的に監視する。ここでは、監視対象のユーザによる操作を“ボタン”の押下として説明するが、上述したようにボタンの押下には限らず、ユーザによる原稿の読み取りを意図した操作であればどのような操作でも構わない。ボタンイベント監視部６１は、操作パネル１６における読み取り開始等のボタンイベントを検知した場合、ＯＳ３０のアプリケーション起動部３３を介して所定のアプリケーションを起動するよう指示する。ここで、例えば、予め用意しておいたスキャナ１０の読取設定に関するファイルを、起動したアプリケーションに渡すことでボタンイベントの検知に連動させてスキャナドライバ５０から所望の形式の画像データの取得を行うこともできる。
【００３５】
イベント受信部６２は、所定のアプリケーションからプロセス間通信によって予め定義されているイベント情報を受信する。ボタン監視プログラム６０は、イベント受信部６２で受信したイベント情報がクローズ要求を示すものであると判断した場合、ＵＳＢインターフェース制御部８０を介してＵＳＢポートをオープンする。
【００３６】
また、ボタン監視プログラム６０、７０は、スキャナ１０がＵＳＢインターフェース２１を介して接続されたことをＯＳ３０が検知すると、所定の通信規格に準拠した手順でＵＳＢポートをオープンする（プラグ＆プレイ）。なお、ここでのＵＳＢポートとは、ＵＳＢインターフェース２１を介して通信するための論理的なチャネルのことを指す。このＵＳＢポートのオープンによりＵＳＢインターフェース２１を介して接続されているスキャナ１０と情報をやり取りするための転送用のパイプが確保される。そして、ここではスキャナ１０と通信を行うためのＵＳＢポートは１つのスキャナドライバまたは１つのボタン監視プログラムによって排他的に使用される。ここではスキャナ１０との接続開始時には、まずボタン監視プログラムが、スキャナ１０からのボタンイベントの監視のためにＵＳＢポートを使用する。もし、ボタン監視プログラムが複数存在していた場合、いずれか１つが所定の条件に従って選択され、起動される。また、ボタン監視プログラム６０、７０は、ＵＳＢインターフェース２１による接続が絶たれた場合、及びスキャナドライバ５０が起動された場合、所定の通信規格に準拠した手順でＵＳＢポートのクローズを行う。
【００３７】
次に、スキャナドライバ５０を非ＴＷＡＩＮモードで動作させてスキャナ１０に読取処理を行わせる場合の処理の流れについて説明する。ここではスキャナドライバ５０は、ＴＷＡＩＮ規格に準拠したコマンドを用いずにスキャナ１０に読取処理を実行させる。図３は、この場合のコンピュータ２０における処理のシーケンスの流れを示す。以下のシーケンスは、コンピュータ２０のＣＰＵ２５がＲＯＭ２６、補助記憶装置２４に記憶されているプログラムをＲＡＭ２７にロードし、それを実行することにより行われる処理の流れを示す。
【００３８】
まず、スキャナ１０がＵＳＢインターフェース２１を介して接続されると、ＯＳ３０によって１つのボタン監視プログラム（ここではボタン監視プログラム６０とする）が起動される。続いてボタン監視プログラム６０はスキャナ１０と通信を行うための論理的チャネルであるＵＳＢポートをオープンし（Ａ１０１）、スキャナ１０におけるボタンイベントの発生を監視するためのポーリングを繰り返し行う。
【００３９】
ここでユーザからの指示によりスキャナドライバ５０が起動されると、表示装置２２に、スキャナドライバ５０が提供する、読取指示を行うためのＵＩ画面が表示される。このＵＩ画面を介してユーザが読取指示を行うと、スキャナドライバ５０は非ＴＷＡＩＮモードで動作する。ここではボタン監視プログラム６０がＵＳＢポートを確保している間に、スキャナドライバ５０が非ＴＷＡＩＮモードで起動されたことになる。つまり、ＴＷＡＩＮ規格に準拠しない要求に従ってスキャナドライバ５０は起動指示がなされている。
【００４０】
ここでは、スキャナドライバ５０は、ＴＷＡＩＮドライバとして起動されないので、スキャナドライバ５０が起動されただけでは、ＯＳ３０（ＴＷＡＩＮ  ＤＳＭ３１）によるＵＳＢポートの排他制御は行われない。これはスキャナドライバ５０が非ＴＷＡＩＮモードで動作する場合、上述したＯＳ３０の排他制御を可能とする所定のファイルにデバイス情報を記録しないためである。
【００４１】
そこで、ここでは、スキャナドライバ５０が現在ＵＳＢポートをオープンしている通信プログラム（ボタン監視プログラム）を識別し、そのプログラムに対し、プロセス間通信によりクローズ要求を示すイベントをイベント送信部５４により送信する（Ａ２０１）。ＵＳＢポートをオープンしているボタン監視プログラムの識別の手順は後述する。
【００４２】
ボタン監視プログラム６０のイベント受信部６２がＡ２０１におけるクローズ要求を示すイベントを受信すると、自身が使用している既にオープンしているＵＳＢポートをクローズする（Ａ１０２）。そして、ボタン監視プログラム６０は、Ａ２０１におけるクローズ要求に対する応答として、成功を示す情報をスキャナドライバ５０に送信する（Ａ２０２）。
【００４３】
そして、スキャナドライバ５０は、ＵＳＢポートのクローズが成功したことを確認すると、自身がＵＳＢポートを使用可能となり、自身が読取処理を行うため、ＵＳＢポートをオープンする（Ａ２０３）。そして、スキャナドライバ５０のＵＩ画面で指定された読取設定等に従って、スキャナ１０による読取処理を実行させ、読取画像データを取得する。そして、スキャナ１０からの読取画像データの取得が終了すると、ＵＳＢポートをクローズする（Ａ２０４）。そして、ユーザによる指定に従って、画像ファイルとして当該画像データを補助記憶装置２４に保存するなどの処理を行う。なお、画像ファイルを生成して保存する処理は、ＵＳＢポートをクローズさせる前に行ってもよい。また、画像データの処理としてはファイル保存には限らず、他の処理としてもよい。また、処理内容は予め指定してあった処理を行うようにしてもよいし、読取画像データを受け取った後にユーザからの指示で指定された処理を行うようにしてもよい。
【００４４】
そして、スキャナドライバ５０は、読取処理（ここでは読取画像データの取得及びファイル保存）が終了すると、ボタン監視プログラム６０に対してオープン要求のイベントを送信する（Ａ２０５）。これを受けたボタン監視プログラム６０はＵＳＢポートをオープンする（Ａ１０３）。そして、ボタン監視プログラム６０によるＵＳＢポートのオープンが成功すると、ボタン監視プログラム６０は、オープン要求のイベント送信への応答として成功したことを示す情報を送信する（Ａ２０６）。ボタン監視プログラム６０がＵＳＢポートをオープンし、自身が占有した状態になって以降は、スキャナ１０におけるイベントを監視するためのポーリングを再開し、上記起動時の処理と同様の処理を行う。
【００４５】
以上のようなシーケンスにおいて、スキャナドライバ５０が、Ａ２０１におけるイベント送信先のプログラムを識別する処理の詳細について説明する。図４はこの場合の処理の第１の例の流れを示すフローチャートである。このフローチャートは、コンピュータ２０のＣＰＵ２５がＲＯＭ２６、補助記憶装置２４に記憶されているプログラムをＲＡＭ２７にロードし、それを実行することにより行われる処理の流れを示す。
【００４６】
スキャナドライバ５０は、非ＴＷＡＩＮモードで起動され、ユーザにより読取指示がなされると、Ｓ４０１において、ＯＳ３０が管理しているプロセス情報の中から、現在起動しているボタン監視プログラム（起動プロセス）を確認する。この確認は、ＯＳ３０が提供しているＡＰＩを介して、現在起動中の複数のプログラムの中からＵＳＢポートをオープンしているプログラムのＩＤを識別することにより行われる。もし、スキャナ１０と通信するためにＵＳＢポートをオープンする可能性のある通信プログラムがボタン監視プログラム６０、７０のいずれかしかないことが予めわかっている場合、いずれのプログラムが起動しているかを識別するだけでもよい。
【００４７】
そして、Ｓ４０２では、ＵＳＢポートをオープンしていたプログラムがＡであるかＢであるかを判定する。ここでは、該当するプログラムがボタン監視プログラム６０、７０のいずれかなので、これらのいずれかがＡまたはＢに対応するが、ここではＡがボタン監視プログラム６０、Ｂがボタン監視プログラム７０とする。
【００４８】
起動していたプログラムがボタン監視プログラム６０であれば、Ｓ４０３において図３のＡ２０１におけるイベントの送信先としてボタン監視プログラム６０を指定してクローズ要求のイベントを送信する。起動していたプログラムがボタン監視プログラム７０であれば、Ｓ４０４において図３のＡ２０１におけるイベントの送信先としてボタン監視プログラム７０を指定してクローズ要求のイベントを送信する。
【００４９】
そして、その後は図３のＡ１０２以降の処理が行われる。Ｓ４０５では、表示装置２２に表示させたスキャナドライバ５０のＵＩ画面を介してのユーザからの読取指示を待ち、読取指示がなされればスキャナ１０による画像の読み取り及び読取画像データの取得等を行われるが、ここでの説明は省略する。
【００５０】
そして、Ｓ４０６では、ユーザがスキャナドライバ５０を終了させる処理を行うか、予め指定されていた読取処理が終了したかにより、スキャナドライバ５０を終了させるべきか判断する。スキャナドライバ５０を終了させるべきと判断された場合、まずスキャナドライバ５０がオープンしたＵＳＢポートをクローズさせる。その後、Ｓ４０７において、Ｓ４０３及びＳ４０７においてクローズ要求を行ったボタン監視プログラムに対し、オープン要求のイベントを送信し（図３のＡ２０５）、スキャナドライバ５０を終了させる。
【００５１】
このように、コンピュータ２０に複数のボタン監視プログラムが存在しても、起動中のプログラムを識別して、そのプログラムにＵＳＢポートをクローズさせることができる。なお、ＵＳＢポートを使用するプログラムが３つ以上存在するような環境であっても同様にそれぞれのプログラムのいずれかを識別して、ＵＳＢポートのクローズを指示すればよい。
【００５２】
次に、スキャナドライバ５０が、Ａ２０１におけるイベント送信先のプログラムを識別する処理の第２の例について説明する。第２の例では、コンピュータ２０がＵＳＢインターフェース２１を複数有し、それぞれのＵＳＢインターフェースに異なるスキャナが接続可能な場合について説明する。ここでは、複数のスキャナが接続された場合、同時に複数のボタン監視プログラムが起動される。図５はこの場合の処理の流れを示すフローチャートであり、コンピュータ２０のＣＰＵ２５がＲＯＭ２６、補助記憶装置２４に記憶されているプログラムをＲＡＭ２７にロードし、それを実行することにより行われる処理の流れを示す。
【００５３】
Ｓ５０１では、Ｓ４０１と同様にＵＳＢポートをオープンしているプログラムを確認する。なお、ここでは、ボタン監視プログラムが起動していることは確認できるが、いずれのプログラムが複数のＵＳＢインターフェースのうちのいずれに対応したＵＳＢポートをオープンしているかまでは確認できないものとする。ここでの確認結果（Ｓ５０２）は、図４の結果以外に、ＡとＢの両方という結果となる可能性がある。ＡまたはＢであった場合は、Ｓ５０３、Ｓ５０４において、Ｓ４０３、Ｓ４０４と同様の処理を行う。ＡとＢの両方であった場合は、Ｓ５０５に進み、まず、ボタン監視プログラム６０を送信先としてクローズ要求のイベント送信を行う。
【００５４】
そして、スキャナドライバ５０は、Ｓ５０６において、自身が使用するスキャナを接続しているＵＳＢインターフェースに対応するＵＳＢポートの状態を確認する。この確認の結果、Ｓ５０７においてＵＳＢポートがオープンされたままであったと判断された場合、Ｓ５０８に進み、Ｓ５０５のイベント送信からＸ秒（Ｘは予め決められた時間）経過したか判断する。ここでＸ秒が経過していなかった場合、Ｓ５０６以降の処理を繰り返す。Ｘ秒が経過してもＵＳＢポートがオープンされたままであった場合はタイムアウトとし、Ｓ５０９におけるイベント送信先のボタン監視プログラムはスキャナドライバ５０が使用しようとしているＵＳＢポートをオープンしていなかったものと決定する。そしてＳ５０９に進み、ボタン監視プログラム７０を送信先としてクローズ要求のイベント送信を行う。そして、Ｓ５１０においてＳ５０６と同様にＵＳＢポートの状態を確認し、Ｓ５１１でＵＳＢポートがクローズされたことを確認すると、Ｓ５１２に進む。また、先のＳ５０７でＵＳＢポートがクローズされたことを確認した場合もＳ５１２に進む。
【００５５】
そして、Ｓ５１２における処理を行うに当たって図３のＡ１０２以降の処理が行われる。Ｓ５１２では、Ｓ４０５と同様にユーザからの読取指示を待ち、Ｓ５１３では、Ｓ４０６と同様にスキャナドライバ５０を終了させるか判断する。
【００５６】
Ｓ５１４では、Ｓ４０７と同様に、まず、自身がオープンしていたＵＳＢポートをクローズする。そして、Ｓ５０３、Ｓ５０４、Ｓ５０５、Ｓ５０９のＵＳＢポートのクローズ要求に対しＵＳＢポートをクローズしたボタン監視プログラムに対し、オープン要求を行う。Ｓ５０３でボタン監視プログラム６０に対しクローズ要求を行っていた場合は、Ｓ５１４でボタン監視プログラム６０に対しオープン要求を行う。Ｓ５０４でボタン監視プログラム７０に対しクローズ要求を行っていた場合は、Ｓ５１４でボタン監視プログラム７０に対しオープン要求を行う。Ｓ５０５でボタン監視プログラム６０に対しクローズ要求を行った結果、Ｓ５０７で否定判定が行われた場合はＳ５１４でボタン監視プログラム６０に対しオープン要求を行う。Ｓ５０９でボタン監視プログラム７０に対しクローズ要求を行った結果、ボタン監視プログラム７０がＵＳＢポートをクローズさせた場合は、Ｓ５１４でボタン監視プログラム７０に対しオープン要求を行う。そして、いずれかのボタン監視プログラムによるＵＳＢポートのオープンに成功すると、スキャナドライバ５０は終了する。
【００５７】
以上のように図５に示したような処理によれば、ＵＳＢポートを使用するプログラムが複数起動し得る環境であっても適切に起動中のプログラムに対し、ＵＳＢポートのクローズを指示することができる。なお、図５の例では、複数のボタン監視プログラムが起動されている場合、まずボタン監視プログラム６０にクローズ要求を行うようにしたが、この順序はプログラム毎の優先順位等で決定するようにすればよく、種々の順序としてもよい。また、図５の例では、ＵＳＢポートを使用し得るプログラムが２つの例で説明したが、３つ以上存在する場合でも起動中のプログラムの確認手順を追加して同様の処理とすればよい。
【００５８】
次に、図５で示した第２の例において、ボタン監視プログラムに対するイベント送信の処理にスレッドを用いる例について説明する。図６はこの場合の処理の流れを示すフローチャートであり、コンピュータ２０のＣＰＵ２５がＲＯＭ２６、補助記憶装置２４に記憶されているプログラムをＲＡＭ２７にロードし、それを実行することにより行われる処理の流れを示す。図６（Ａ）は、メインの処理を示し、図６（Ｂ）、（Ｃ）はイベント送信用のスレッドによる処理を示す。
【００５９】
Ｓ６０１では、Ｓ５０１と同様にＵＳＢポートをオープンしているプログラムを確認する。そして、Ｓ６０２において、起動中のボタン監視プログラムの確認結果を判断する。
【００６０】
この確認結果において、起動中のボタン監視プログラムが１つのみであれば、Ｓ６０３、またはＳ６０５でＳ５０３、Ｓ５０４と同様にそのボタン監視プログラムに対しクローズ要求のイベントを送信する。Ｓ６０４、Ｓ６０６ではイベント送信の結果、ＵＳＢポートのクローズに成功したか否かを、イベント送信先のボタン監視プログラムと対応付けてＲＡＭ２７に保存する。
【００６１】
Ｓ６０２における確認結果において、起動中のボタン監視プログラムが、ボタン監視プログラム６０と７０の両方であった場合、Ｓ６０７、Ｓ６０８においてそれぞれのボタン監視プログラムに対し、イベント送信を行うためのスレッドを作成する。ここでイベント送信用のスレッドが作成されると、それぞれのスレッドが並行して実行される。ボタン監視プログラム６０に対するイベント送信の処理は図６（Ｂ）であり、ボタン監視プログラム７０に対するイベント送信の処理は図６（Ｃ）である。Ｓ６５１、Ｓ６６１ではそれぞれのボタン監視プログラムに対し、ＵＳＢポートのクローズを要求するイベントを送信する。Ｓ６５２、Ｓ６６２ではイベント送信の結果、ＵＳＢポートのクローズに成功したか否かをボタン監視プログラムと対応付けてＲＡＭ２７に保存する。
【００６２】
Ｓ６０９では、Ｓ６０７、Ｓ６０８におけるイベント送信用スレッドの作成から一定時間待機し、Ｓ６１０において、イベント送信用のスレッドによる処理が完了しているか（ＲＡＭ２７に結果が保存されているか）判断し、完了するまで待つ。
【００６３】
そして、Ｓ６１１では、ＲＡＭ２７に保存されているイベント送信の結果、ＵＳＢポートのクローズに成功した方のボタン監視プログラムを識別する。この識別結果はＲＡＭ２７に保存しておく。
【００６４】
そして、Ｓ６１２における処理を行うに当たって図３のＡ１０２以降の処理が行われる。Ｓ６１２では、Ｓ５１２と同様にユーザからの読取指示を待ち、Ｓ６１３では、Ｓ５１３と同様にスキャナドライバ５０を終了させるか判断する。
【００６５】
Ｓ６１４では、スキャナドライバ５０がオープンしていたＵＳＢポートをクローズさせる。その後、Ｓ６０４、Ｓ６０６、Ｓ６１１においてＲＡＭ２７に保存されたイベント送信の結果、ＵＳＢポートをクローズさせることに成功したボタン監視プログラムに対し、オープン要求のイベントを送信する。そして、ボタン監視プログラムによるＵＳＢポートのオープンに成功すると、スキャナドライバ５０は終了する。
【００６６】
以上のように図６に示したような処理によれば、ＵＳＢポートをオープンしているプログラムの識別を、複数のイベント送信を並行して行えるなど、図５の処理よりも効率的に行える。また、図６の例では、ＵＳＢポートを使用し得るプログラムが２つの例で説明したが、３つ以上存在する場合でもイベント送信処理用のスレッドを追加して同様の処理とすればよい。
【００６７】
なお、以上の例において、スキャナドライバ５０は、ＴＷＡＩＮモードと非ＴＷＡＩＮモードとを有するものとしたが、非ＴＷＡＩＮモードでのみ動作可能なものとしてもよい。また、ＯＳ３０が、ＴＷＡＩＮモードでスキャナドライバが起動されるときにＵＳＢポートの排他制御を行うものとしたが、このような排他制御機能を有さないＯＳとしてもよい。また、ボタン監視プログラムは、ＯＳ３０による排他制御を可能とするための所定のファイルにデバイス情報を記録しないものであってもよい。
【００６８】
また、以上の例では、スキャナドライバ５０が非ＴＷＡＩＮモードで起動されたときに、図４〜６に示したようにボタン監視プログラムがオープンしているＵＳＢポートをクローズさせるものとしたが、このタイミングには限らない。スキャナドライバ５０が起動された後、スキャナドライバ５０のＵＩ画面を介して読取指示がなされた場合に、ボタン監視プログラムがオープンしているＵＳＢポートをクローズさせるようにしてもよい。
【００６９】
また、以上の例では、ＵＳＢポートをオープンしているボタン監視プログラムの識別、ボタン監視プログラムに対するクローズ要求を、スキャナドライバ５０が行うものとしたが、これには限らない。スキャナドライバ５０とは別に起動されるアプリケーションにおいて、非ＴＷＡＩＮモードで動作するスキャナドライバの起動が指示されたことを判定し、図３〜図６を用いて説明した処理のうち、読取処理以外の処理を行うようにしてもよい。
【００７０】
また、以上の例では、スキャナとのインターフェースとしてＵＳＢを用いる例について説明したが、通信用チャネルの排他制御を行う必要のあるものであれば、他のインターフェースとしてもよい。これは、ローカルインターフェース、ネットワークインターフェースのいずれでもよい。
【００７１】
また、スキャナとコンピュータとは外部接続されるものにも限らず、以上の例におけるスキャナに相当する機能とコンピュータに相当する機能とが内部的に接続され、一体化されたものとしてもよい。
【００７２】
また、周辺装置として、スキャナ以外のものを用いたものとしてもよい。例えば、周辺装置としてプリンタを用い、プリンタドライバが印刷用の画像データの通信を行う場合と、プリンタにおけるイベントを監視するプログラムがイベントの通信を行う場合とで通信用チャネルの排他制御を行うものであってもよい。即ち、周辺装置との間で画像データの通信を行うデバイスドライバと、周辺装置との間で行う通信を行う他の通信プログラムとの間での排他制御を行うものとすればよい。
【００７３】
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施例の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。また、プログラムは、１つのコンピュータで実行させても、複数のコンピュータが連動して実行するようにしてもよい。また、上記した処理の全てをソフトウェアで実現する必要はなく、一部または全部をハードウェアによって実現するようにしてもよい。
【００７４】
また、本発明は上記実施形態に限定されるものではなく、本発明の趣旨に基づき種々の変形（他の実施形態への応用、他の実施形態との組合せ等を含む）も可能である。
【図１】
0005473755.tif 000002
【図２】
0005473755.tif 000003
【図３】
0005473755.tif 000004
【図４】
0005473755.tif 000005
【図５】
0005473755.tif 000006
【図６】
0005473755.tif 000007