(57)【特許請求の範囲】
【請求項１】
第１操作部材が接続されるＫＶＭスイッチを介してサーバに接続されると共に、第２操作部材が接続され、前記第２操作部材の操作により移動する情報処理装置のカーソルと前記第１操作部材及び前記第２操作部材のいずれかの操作によって移動する前記サーバのカーソルとを表示する情報処理装置であって、
前記第２操作部材の操作から前記第１操作部材の操作に切り替わった時点の前記情報処理装置のカーソルの位置を保存する保存手段と、
前記第１操作部材の操作中に、前記ＫＶＭスイッチから前記サーバに出力されたデータの累積値を取得する取得手段と、
前記第１操作部材の操作から前記第２操作部材の操作に切り替え後、前記第２操作部材が操作されると、前記保存された情報処理装置のカーソルの位置及び前記取得された累積値に基づいて、現在のサーバのカーソルの位置を算出し、当該現在のサーバのカーソルの位置と現在の情報処理装置のカーソルの位置との差分を算出し、当該算出された差分と前記第２操作部材の操作による情報処理装置のカーソルの移動量との合算値を前記サーバに出力する制御手段と
を備えることを特徴とする情報処理装置。
【請求項２】
前記保存手段は、前記情報処理装置のカーソルの移動量と、前記サーバのカーソルの移動量と、当該情報処理装置のカーソルの移動量と当該サーバのカーソルの移動量とが一致するような、前記第２操作部材から出力される単一又は複数の操作データとの対応関係を示すテーブルデータを有し、
前記制御手段は、前記テーブルデータに基づいて前記合算値に対応する単一又は複数の操作データを前記サーバに出力することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記ＫＶＭスイッチから前記サーバに出力されたデータの累積値は、前記サーバのカーソルの画像を抽出し、前記第１操作部材の操作より移動する前記抽出されたサーバのカーソルの画像の移動後の位置を検出し、前記抽出されたサーバのカーソルの画像の移動前の位置と前記検出されたサーバのカーソルの画像の移動後の位置とに基づいて、前記サーバのカーソルの移動量を算出することにより求められる算出値であることを特徴とする請求項１に記載の情報処理装置。
【請求項４】
第１操作部材が接続されるＫＶＭスイッチで、且つ第２操作部材が接続されると共に前記第２操作部材の操作により移動する情報処理装置のカーソルと前記第１操作部材及び前記第２操作部材のいずれかの操作によって移動するサーバのカーソルとを表示する情報処理装置、及び前記サーバに接続可能なＫＶＭスイッチであって、
前記第２操作部材の操作から前記第１操作部材の操作に切り替わったときの前記情報処理装置のカーソルの位置を前記情報処理装置から取得し保存すると共に前記第１操作部材の操作中に、前記ＫＶＭスイッチから前記サーバに出力されたデータの累積値を保存する保存手段と、
前記第１操作部材の操作から前記第２操作部材の操作に切り替わったときの前記情報処理装置のカーソルの位置を前記情報処理装置から取得し、前記保存された情報処理装置のカーソルの位置及び前記取得された累積値に基づいて、現在のサーバのカーソルの位置を算出し、当該現在のサーバのカーソルの位置と前記第１操作部材の操作から前記第２操作部材の操作に切り替わったときの情報処理装置のカーソルの位置との差分を算出し、当該算出された差分と前記第２操作部材の操作による情報処理装置のカーソルの移動量との合算値を前記サーバに出力する制御手段と
を備えることを特徴とするＫＶＭスイッチ。
【請求項５】
前記保存手段は、前記情報処理装置のカーソルの移動量と、前記サーバのカーソルの移動量と、当該情報処理装置のカーソルの移動量と当該サーバのカーソルの移動量とが一致するような、前記第２操作部材から出力される単一又は複数の操作データとの対応関係を示すテーブルデータを有し、
前記制御手段は、前記テーブルデータに基づいて前記合算値に対応する単一又は複数の操作データを前記サーバに出力することを特徴とする請求項４に記載のＫＶＭスイッチ。
【請求項６】
第１操作部材が接続されるＫＶＭスイッチを介してサーバに接続されると共に、第２操作部材が接続され、前記第２操作部材の操作により移動する情報処理装置のカーソルと前記第１操作部材及び前記第２操作部材のいずれかの操作によって移動する前記サーバのカーソルとを表示する情報処理装置を、
前記第２操作部材の操作から前記第１操作部材の操作に切り替わった時点の前記情報処理装置のカーソルの位置を保存する保存手段、
前記第１操作部材の操作中に、前記ＫＶＭスイッチから前記サーバに出力されたデータの累積値を取得する取得手段、及び
前記第１操作部材の操作から前記第２操作部材の操作に切り替え後、前記第２操作部材が操作されると、前記保存された情報処理装置のカーソルの位置及び前記取得された累積値に基づいて、現在のサーバのカーソルの位置を算出し、当該現在のサーバのカーソルの位置と現在の情報処理装置のカーソルの位置との差分を算出し、当該算出された差分と前記第２操作部材の操作による情報処理装置のカーソルの移動量との合算値を前記サーバに出力する制御手段
として機能させることを特徴とする制御プログラム。
【請求項７】
第１操作部材が接続されるＫＶＭスイッチで、且つ第２操作部材が接続されると共に前記第２操作部材の操作により移動する情報処理装置のカーソルと前記第１操作部材及び前記第２操作部材のいずれかの操作によって移動するサーバのカーソルとを表示する情報処理装置、及び前記サーバに接続可能なＫＶＭスイッチを、
前記第２操作部材の操作から前記第１操作部材の操作に切り替わったときの前記情報処理装置のカーソルの位置を前記情報処理装置から取得し保存すると共に前記第１操作部材の操作中に、前記ＫＶＭスイッチから前記サーバに出力されたデータの累積値を保存する保存手段、及び
前記第１操作部材の操作から前記第２操作部材の操作に切り替わったときの前記情報処理装置のカーソルの位置を前記情報処理装置から取得し、前記保存された情報処理装置のカーソルの位置及び前記取得された累積値に基づいて、現在のサーバのカーソルの位置を算出し、当該現在のサーバのカーソルの位置と前記第１操作部材の操作から前記第２操作部材の操作に切り替わったときの情報処理装置のカーソルの位置との差分を算出し、当該算出された差分と前記第２操作部材の操作による情報処理装置のカーソルの移動量との合算値を前記サーバに出力する制御手段
として機能させることを特徴とする制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置のマウスカーソルの位置とサーバのマウスカーソルの位置とを一致させる情報処理装置、ＫＶＭスイッチ及び制御プログラムに関する。
【背景技術】
【０００２】
コンピュータを遠隔操作する手段は、これまで様々な技術が開発されてきた。遠隔操作する上では、操作される側（サーバ）と操作する側（リモートＰＣ）の二つのコンピュータが必要である。
【０００３】
遠隔操作の技術として、例えば、手元にある端末のディスプレイ上に表示した画面の操作性・視認性を損ねることなく、遠隔地の端末の画面情報と手元の端末の情報の両方を表示するシステム（例えば、特許文献１参照）、リモコン送信器と撮像手段との距離が異なっても、リモコン送信器の移動量に対するカーソル移動量が一定となるカーソル制御装置（例えば、特許文献２参照）、携帯電話端末から遠隔地にあるパソコンへ接続し、携帯電話端末からコンピュータを遠隔操作するシステム（例えば、特許文献２参照）などが知られている。
【０００４】
また、サーバには遠隔操作用ソフトウェアをインストールせず、サーバとリモートＰＣとの接続経路の間に変換器を配置して、その変換器が、サーバに接続されるキーボードやマウスを代行する技術が知られている（例えば、特許文献４参照）。
【０００５】
特許文献４の技術では、リモートＰＣに接続されているキーボード及びマウスが出力する信号がディジタルデータに変換され、変換されたデータが回線上に転送され、サーバでディジタルデータを受け取って信号に戻し、その信号を入力することで、サーバはキーボード及びマウスが直接接続されているように動作する。さらには、サーバが出力するビデオ信号がディジタルデータに変換され、変換されたデータが回線上に転送され、リモートＰＣがディジタルデータを受け取って信号に戻し、その信号を入力することで、リモートＰＣ側に設置されたモニタがサーバに接続されたモニタであるように動作する。
【０００６】
これら技術を流用した別の技術としては、例えば、特許文献５のＫＶＭスイッチを有するシステムが知られている。
【０００７】
この特許文献５のシステムは、特許文献４の基本概念を持ち、リモートＰＣが有するウィンドウシステムにおいて、一つのウィンドウを表示手段とし、そのウィンドウをキーボード・マウスのデータの入力経路としている。即ち、リモートＰＣのウィンドウ内で実行したキーボードやマウスの操作が、サーバに反映される。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００７−６５９４４号公報
【特許文献２】特開平６−７５６９５号公報
【特許文献３】特開２００６−１９７２９９号公報
【特許文献４】特許２６９８６８５号
【特許文献５】特表２００３−５３４６８５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
サーバの画面をリモートＰＣから操作するとき、一人のオペレータが操作するとは限らない。即ち、サーバの画面は、リモートＰＣの他に、ローカルでも操作する場合がある。ローカルとは、サーバに直接、キーボード、マウス及びモニタを接続し、サーバの画面を操作する環境である。
【００１０】
図１９（Ａ）は、従来のローカルの画面の一例を示す図であり、図１９（Ｂ）は、従来のリモートの画面の一例を示す図である。
【００１１】
同図において、符号２０１は、マウスカーソルの非表示を設定したウィンドウを示し、符号２０２は、マウスカーソルの表示を設定した他のウィンドウを示し、符号２０３はリモートＰＣの画面を示す。符号２０４はサーバのマウスカーソルを示し、符号２０５はリモートＰＣのマウスカーソルを示す。符号２０６はローカルの画面（即ち、サーバの画面）を示す。ウィンドウ２０１には、サーバの画面が表示される。
【００１２】
ここでは、サーバの画面をまず、ローカル側で操作するものとし、サーバのマウスカーソル２０４を位置ａから位置ｂ又は位置ｃに移動させ、次いで、リモートＰＣのマウスカーソル２０５を操作する例を説明する。
【００１３】
サーバのマウスカーソル２０４を位置ａから位置ｃまで移動させた後、リモートＰＣのマウスカーソル２０５の操作によって、サーバのマウスカーソル２０４を位置ｃから位置ｄまで移動させる場合、リモートＰＣのオペレータは、その時点でリモートＰＣのマウスカーソル２０５が何処にあるか分からない。例えば、リモートＰＣのマウスカーソル２０５が位置Ａ、位置Ｂ又は位置Ｃのいずれかにあるとすると、リモートＰＣのオペレータは、リモートＰＣのマウスカーソル２０５をＶｃｄの方向に動かす必要がある。この例では、リモートＰＣのマウスカーソル２０５が位置Ａ、位置Ｂ又は位置Ｃのいずれにあっても、問題なく、サーバのマウスカーソル２０４を位置ｄに移動させることが可能であることを示している。
【００１４】
サーバのマウスカーソル２０４を位置ａから位置ｂまで移動させた後、リモートＰＣのマウスカーソル２０５の操作によって、サーバのマウスカーソル２０４を位置ｂから位置ｄまで移動させる場合、リモートＰＣのマウスカーソル２０５が位置Ａにあるならば、問題は生じない。しかし、リモートＰＣのマウスカーソル２０５が位置Ｂ又は位置Ｃにある場合には、サーバのマウスカーソル２０４が位置ｄに移動させる前に、リモートＰＣのマウスカーソル２０５がウィンドウ２０１の枠を超えてしまうため、サーバのマウスカーソル２０４を位置ｄに移動させることはできない。
【００１５】
このように、リモート側及びローカル側で交互にサーバのマウスカーソル２０４を移動させる場合も、サーバのマウスカーソル２０４とリモートＰＣのマウスカーソル２０５の位置ズレにより、快適なマウス操作環境を提供できなかった。
【００１６】
本発明は、上記課題に鑑みなされたもので、その目的は、情報処理装置のオペレータに対して快適な操作部材の操作環境を提供することが可能な情報処理装置、ＫＶＭスイッチ及び制御プログラムを提供することにある。
【課題を解決するための手段】
【００１７】
上記目的を達成するため、本発明の情報処理装置は、第１操作部材が接続されるＫＶＭスイッチを介してサーバに接続されると共に、第２操作部材が接続され、前記第２操作部材の操作により移動する情報処理装置のカーソルと前記第１操作部材及び前記第２操作部材のいずれかの操作によって移動する前記サーバのカーソルとを表示する情報処理装置であって、前記第２操作部材の操作から前記第１操作部材の操作に切り替わった時点の前記情報処理装置のカーソルの位置を保存する保存手段と、前記第１操作部材の操作中に、前記ＫＶＭスイッチから前記サーバに出力されたデータの累積値を取得する取得手段と、前記第１操作部材の操作から前記第２操作部材の操作に切り替え後、前記第２操作部材が操作されると、前記保存された情報処理装置のカーソルの位置及び前記取得された累積値に基づいて、現在のサーバのカーソルの位置を算出し、当該現在のサーバのカーソルの位置と現在の情報処理装置のカーソルの位置との差分を算出し、当該算出された差分と前記第２操作部材の操作による情報処理装置のカーソルの移動量との合算値を前記サーバに出力する制御手段とを備えることを特徴とする。
【００１８】
かかる構成によれば、サーバのカーソルがＫＶＭスイッチに接続される第１操作部材で移動された場合でも、第１操作部材の操作から第２操作部材の操作に切り替え後、第２操作部材が操作されたときに、情報処理装置のカーソルとサーバのカーソルの位置ズレが補正でき、情報処理装置のオペレータに対して快適な第２操作部材の操作環境を提供できる。尚、保存手段の一例は、図１４（Ａ）のステップＳ８１の処理を実行するＣＰＵ３１及びＨＤＤ３４であり、取得手段の一例は、図１４（Ａ）のステップＳ８３の処理を実行するＣＰＵ３１及びネットワークインターフェース３７であり、制御手段の一例は、図１４（Ａ）のステップＳ８４〜Ｓ８７の処理を実行するＣＰＵ３１である。
【００１９】
好ましくは、前記保存手段は、前記情報処理装置のカーソルの移動量と、前記サーバのカーソルの移動量と、当該情報処理装置のカーソルの移動量と当該サーバのカーソルの移動量とが一致するような、前記第２操作部材から出力される単一又は複数の操作データとの対応関係を示すテーブルデータを有し、前記制御手段は、前記テーブルデータに基づいて前記合算値に対応する単一又は複数の操作データを前記サーバに出力することを特徴とする。
【００２０】
かかる構成によれば、情報処理装置及びサーバにおいて、いわゆるカーソルの加速処理が行われる場合でも、第１操作部材の操作から第２操作部材の操作に切り替え後、第２操作部材が操作されたときに、情報処理装置のカーソルとサーバのカーソルの位置ズレが補正でき、情報処理装置のオペレータに対して快適な第２操作部材の操作環境を提供できる。尚、テーブルデータの一例は、図７（Ｃ）のテーブルデータである。
【００２１】
好ましくは、前記ＫＶＭスイッチから前記サーバに出力されたデータの累積値は、前記サーバのカーソルの画像を抽出し、前記第１操作部材の操作より移動する前記抽出されたサーバのカーソルの画像の移動後の位置を検出し、前記抽出されたサーバのカーソルの画像の移動前の位置と前記検出されたサーバのカーソルの画像の移動後の位置とに基づいて、前記サーバのカーソルの移動量を算出することにより求められる算出値であることを特徴とする。
【００２２】
かかる構成によれば、情報処理装置で表示されるサーバのカーソルの画像から、ＫＶＭスイッチからサーバに出力されたデータの累積値を取得することができる。
【００２３】
上記目的を達成するため、ＫＶＭスイッチは、第１操作部材が接続されるＫＶＭスイッチで、且つ第２操作部材が接続されると共に前記第２操作部材の操作により移動する情報処理装置のカーソルと前記第１操作部材及び前記第２操作部材のいずれかの操作によって移動するサーバのカーソルとを表示する情報処理装置、及び前記サーバに接続可能なＫＶＭスイッチであって、前記第２操作部材の操作から前記第１操作部材の操作に切り替わったときの前記情報処理装置のカーソルの位置を前記情報処理装置から取得し保存すると共に前記第１操作部材の操作中に、前記ＫＶＭスイッチから前記サーバに出力されたデータの累積値を保存する保存手段と、前記第１操作部材の操作から前記第２操作部材の操作に切り替わったときの前記情報処理装置のカーソルの位置を前記情報処理装置から取得し、前記保存された情報処理装置のカーソルの位置及び前記取得された累積値に基づいて、現在のサーバのカーソルの位置を算出し、当該現在のサーバのカーソルの位置と前記第１操作部材の操作から前記第２操作部材の操作に切り替わったときの情報処理装置のカーソルの位置との差分を算出し、当該算出された差分と前記第２操作部材の操作による情報処理装置のカーソルの移動量との合算値を前記サーバに出力する制御手段とを備えることを特徴とする。
【００２４】
かかる構成によれば、サーバのカーソルがＫＶＭスイッチに接続される第１操作部材で移動された場合でも、第１操作部材の操作から第２操作部材の操作に切り替え後、第２操作部材が操作されたときに、情報処理装置のカーソルとサーバのカーソルの位置ズレが補正でき、情報処理装置のオペレータに対して快適な第２操作部材の操作環境を提供できる。尚、保存手段の一例は、図１５のステップＳ１０１，Ｓ１０２の処理を実行するコントローラ１０１及びメモリ１０５であり、制御手段の一例は、図１５のステップＳ１０３〜Ｓ１０６の処理を実行するコントローラ１０１である。
【００２５】
好ましくは、前記保存手段は、前記情報処理装置のカーソルの移動量と、前記サーバのカーソルの移動量と、当該情報処理装置のカーソルの移動量と当該サーバのカーソルの移動量とが一致するような、前記第２操作部材から出力される単一又は複数の操作データとの対応関係を示すテーブルデータを有し、前記制御手段は、前記テーブルデータに基づいて前記合算値に対応する単一又は複数の操作データを前記サーバに出力することを特徴とする。
【００２６】
かかる構成によれば、情報処理装置及びサーバにおいて、いわゆるカーソルの加速処理が行われる場合でも、第１操作部材の操作から前記第２操作部材の操作に切り替え後、第２操作部材が操作されたときに、情報処理装置のカーソルとサーバのカーソルの位置ズレが補正でき、情報処理装置のオペレータに対して快適な第２操作部材の操作環境を提供できる。尚、テーブルデータの一例は、図７（Ｃ）のテーブルデータである。
【００２７】
上記目的を達成するため、本発明の制御プログラムは、第１操作部材が接続されるＫＶＭスイッチを介してサーバに接続されると共に、第２操作部材が接続され、前記第２操作部材の操作により移動する情報処理装置のカーソルと前記第１操作部材及び前記第２操作部材のいずれかの操作によって移動する前記サーバのカーソルとを表示する情報処理装置を、前記第２操作部材の操作から前記第１操作部材の操作に切り替わった時点の前記情報処理装置のカーソルの位置を保存する保存手段、前記第１操作部材の操作中に、前記ＫＶＭスイッチから前記サーバに出力されたデータの累積値を取得する取得手段、及び前記第１操作部材の操作から前記第２操作部材の操作に切り替え後、前記第２操作部材が操作されると、前記保存された情報処理装置のカーソルの位置及び前記取得された累積値に基づいて、現在のサーバのカーソルの位置を算出し、当該現在のサーバのカーソルの位置と現在の情報処理装置のカーソルの位置との差分を算出し、当該算出された差分と前記第２操作部材の操作による情報処理装置のカーソルの移動量との合算値を前記サーバに出力する制御手段として機能させることを特徴とする。
【００２８】
かかる構成によれば、サーバのカーソルがＫＶＭスイッチに接続される第１操作部材で移動された場合でも、第１操作部材の操作から第２操作部材の操作に切り替え後、第２操作部材が操作されたときに、情報処理装置のカーソルとサーバのカーソルの位置ズレが補正でき、情報処理装置のオペレータに対して快適な第２操作部材の操作環境を提供できる。
【００２９】
上記目的を達成するため、本発明の制御プログラムは、第１操作部材が接続されるＫＶＭスイッチで、且つ第２操作部材が接続されると共に前記第２操作部材の操作により移動する情報処理装置のカーソルと前記第１操作部材及び前記第２操作部材のいずれかの操作によって移動するサーバのカーソルとを表示する情報処理装置、及び前記サーバに接続可能なＫＶＭスイッチを、前記第２操作部材の操作から前記第１操作部材の操作に切り替わったときの前記情報処理装置のカーソルの位置を前記情報処理装置から取得し保存すると共に前記第１操作部材の操作中に、前記ＫＶＭスイッチから前記サーバに出力されたデータの累積値を保存する保存手段、及び前記第１操作部材の操作から前記第２操作部材の操作に切り替わったときの前記情報処理装置のカーソルの位置を前記情報処理装置から取得し、前記保存された情報処理装置のカーソルの位置及び前記取得された累積値に基づいて、現在のサーバのカーソルの位置を算出し、当該現在のサーバのカーソルの位置と前記第１操作部材の操作から前記第２操作部材の操作に切り替わったときの情報処理装置のカーソルの位置との差分を算出し、当該算出された差分と前記第２操作部材の操作による情報処理装置のカーソルの移動量との合算値を前記サーバに出力する制御手段として機能させることを特徴とする。
【００３０】
かかる構成によれば、サーバのカーソルがＫＶＭスイッチに接続される第１操作部材で移動された場合でも、第１操作部材の操作から第２操作部材の操作に切り替え後、第２操作部材が操作されたときに、情報処理装置のカーソルとサーバのカーソルの位置ズレが補正でき、情報処理装置のオペレータに対して快適な第２操作部材の操作環境を提供できる。
【発明の効果】
【００３１】
本発明によれば、情報処理装置のオペレータに対して快適な操作部材の操作環境を提供することができる。
【図面の簡単な説明】
【００３２】
【図１】本発明の第１の実施の形態に係るＫＶＭ（Ｋ：キーボード、Ｖ：ビデオ、Ｍ：マウス）スイッチ、情報処理装置、及びサーバを備えるＫＶＭシステムの構成図である。
【図２】（Ａ）は、サーバ２ａのハードウエア構成を示すブロック図であり、（Ｂ）は、ＰＣ１１ａのハードウエア構成を示すブロック図である。
【図３】ＫＶＭスイッチ１のハードウエア構成を示すブロック図である。
【図４】（Ａ）は、サーバ２ａの画面の一例を示す図であり、（Ｂ）は、（Ａ）の部分拡大図であり、（Ｃ）は、ＰＣ１１ａの画面の一例を示す図である。
【図５】（Ａ）及び（Ｂ）は、位置ズレ補正機能を示すフローチャートである。
【図６】図５（Ａ）のステップＳ３の加速係数の検出処理を示すフローチャートである。
【図７】（Ａ）は、ステップＳ１６で作成されるテーブルデータの一例を示す図であり、（Ｂ）は、（Ａ）の各値を四捨五入したテーブルデータの一例を示す図であり、（Ｃ）は、ＰＣ１１ａのマウスカーソル１２６の位置とサーバ２ａのマウスカーソル１２２の位置とを一致させるためのテーブルデータの一例を示す図である。
【図８】（Ａ）及び（Ｂ）は、ＰＣ１１ａ及びＫＶＭスイッチ１で実行される処理を示すフローチャートである。
【図９】（Ａ）は、ＰＣ１１ａ、ＫＶＭスイッチ１及びサーバ２ａにおけるデータの処理経路をモデル化した図であり、（Ｂ）は、加速係数の検出処理を示すフローチャートである。
【図１０】ＰＣ１１ａの画面の一例を示す図である。
【図１１】加速係数の検出処理を半自動で実行する場合を示すフローチャートである。
【図１２】（Ａ）は、第２の実施の形態にかかるＰＣ１１ａ及びＫＶＭスイッチ１で実行される処理を示すフローチャートであり、（Ｂ）は（Ａ）の変形例を示すフローチャートである。
【図１３】（Ａ）は、第３の実施の形態に係るローカル（サーバ２ａ及びＫＶＭスイッチ１側）の画面を示す図であり、（Ｂ）は、第３の実施の形態に係るリモート（ＰＣ１１ａ側）の画面を示す図である。
【図１４】（Ａ）は、第３の実施の形態にかかるＫＶＭスイッチ１及びＰＣ１１ａで実行される処理を示すフローチャートであり、（Ｂ）は（Ａ）の一部の処理の変形例を示すフローチャートである。
【図１５】ＫＶＭスイッチ１で実行される処理を示すフローチャートである。
【図１６】第４の実施の形態に係るＰＣ１１ａの画面の一例を示す図である。
【図１７】ＰＣ１１ａのＣＰＵ３１が実行する処理を示すフローチャートである。
【図１８】ＫＶＭスイッチ１のコントローラ１０１が実行する処理を示すフローチャートである。
【図１９】（Ａ）は、従来のローカルの画面の一例を示す図であり、（Ｂ）は従来のリモートの画面の一例を示す図である。
【発明を実施するための形態】
【００３３】
以下、図面を参照しながら本発明の実施の形態を説明する。
【００３４】
（第１の実施の形態）
図１は、本発明の第１の実施の形態に係るＫＶＭ（Ｋ：キーボード、Ｖ：ビデオ、Ｍ：マウス）スイッチ、情報処理装置、及びサーバを備えるＫＶＭシステムの構成図である。
【００３５】
同図に示すように、ＫＶＭシステム１０００は、ＫＶＭスイッチ（Ｋ：キーボード、Ｖ：ビデオ、Ｍ：マウス）１、サーバ２ａ，２ｂ、モニタ３、キーボード４、及びマウス５を備えている。これらは、ローカルシステムを構成している。即ち、モニタ３は、サーバ２ａ又はサーバ２ｂの出力するビデオ信号を表示することができ、キーボード４及びマウス５は、サーバ２ａ又はサーバ２ｂにデータを出力することができる。
【００３６】
さらに、マルチモニタ対応切替システム１０００は、モニタ１２ａ、キーボード１３ａ及びマウス１４ａが接続されているＰＣ１１ａと、モニタ１２ｂ〜１２ｅ、キーボード１３ｂ及びマウス１４ｂが接続されているＰＣ１１ｂとを備えている。ＰＣ１１ａ及びＰＣ１１ｂはネットワーク１０を介してＫＶＭスイッチ１に接続される遠隔端末であり、いわゆるリモートシステムを構成している。即ち、ユーザは、ＰＣ１１ａ又はＰＣ１１ｂ上で動作している遠隔操作アプリケーションから、ネットワーク１０及びＫＶＭスイッチ１を介してサーバ２ａ又はサーバ２ｂを操作することができる。
【００３７】
尚、ＫＶＭスイッチ１に接続されるサーバ又は遠隔端末（ＰＣ）は単数でも複数でもよい。
【００３８】
図２（Ａ）は、サーバ２ａのハードウエア構成を示すブロック図であり、図２（Ｂ）は、ＰＣ１１ａのハードウエア構成を示すブロック図である。尚、サーバ２ｂのハードウエア構成はサーバ２ａのハードウエア構成と同一であり、ＰＣ１１ｂのハードウエア構成はＰＣ１１ａのハードウエア構成と同一である。
【００３９】
サーバ２ａは、装置全体を制御するＣＰＵ２１、制御プログラムを備えるＲＯＭ２２、ワーキングエリアとして機能するＲＡＭ２３、各種の情報やプログラムを備えるハードディスクドライブ（ＨＤＤ）２４、ビデオ信号を出力するためのビデオインターフェース２６、ネットワークインターフェース２７及びＵＳＢ（universal serial bus）インターフェース２８を備えている。ＣＰＵ２１はシステムバス２９を介してＲＯＭ２２、ＲＡＭ２３、ハードディスクドライブ（ＨＤＤ）２４、ビデオインターフェース２６、ネットワークインターフェース２７及びＵＳＢインターフェース２８に接続されている。ＵＳＢインターフェース２８は、ＫＶＭスイッチ１と接続するために使用され、さらに後述する図７（Ａ）〜（Ｃ）のテーブルデータをＫＶＭスイッチ１又はＰＣ１１ａ，１１ｂに送信する際に使用されると共に図７（Ａ）〜（Ｃ）のテーブルデータをＫＶＭスイッチ１又はＰＣ１１ａ，１１ｂから受信する際に使用される。
【００４０】
ＰＣ１１ａは、装置全体を制御するＣＰＵ３１、制御プログラムを備えるＲＯＭ３２、ワーキングエリアとして機能するＲＡＭ３３、各種の情報やプログラムを備えるハードディスクドライブ（ＨＤＤ）３４、ビデオ信号を出力するためのビデオインターフェース３６、ＫＶＭスイッチ１又は他のコンピュータと接続するためのネットワークインターフェース３７、及び不図示のＵＳＢ機器と接続するためのＵＳＢ（universal serial bus）インターフェース３８を備えている。ＣＰＵ３１はシステムバス３９を介してＲＯＭ３２、ＲＡＭ３３、ハードディスクドライブ（ＨＤＤ）３４、ビデオインターフェース３６、ネットワークインターフェース３７及びＵＳＢインターフェース３８に接続されている。
【００４１】
モニタ１２ａはビデオインターフェース３６に接続され、キーボード１３ａ及びマウス１４ａはＵＳＢインターフェース３８に接続されている。ネットワークインターフェース３７はＫＶＭスイッチ１と接続するために使用され、さらに後述する図７（Ａ）〜（Ｃ）のテーブルデータをＫＶＭスイッチ１又はサーバ２ａ，２ｂに送信する際に使用されると共に図７（Ａ）〜（Ｃ）のテーブルデータをＫＶＭスイッチ１又はサーバ２ａ，２ｂから受信する際に使用される。
【００４２】
図３は、ＫＶＭスイッチ１のハードウエア構成を示すブロック図である。
【００４３】
ＫＶＭスイッチ１は、スイッチ全体の動作を制御するコントローラ１０１、ビデオ信号の出力先やマウス又はキーボードのデータの入力先を切り替えるスイッチング回路１０２、サーバ２ａ，２ｂとそれぞれ接続するためのインターフェース（Ｉ／Ｆ）１０３ａ，１０３ｂ、ネットワーク１０を介してＰＣ１１ａ，１１ｂと接続するためのネットワークインターフェース（Ｉ／Ｆ）１０４ａ，１０４ｂ、モニタ３と接続するためのビデオインターフェース（Ｉ／Ｆ）１０６、並びにキーボード４及びマウス５と接続するためのキーボード・マウスインターフェース（Ｉ／Ｆ）１０７を備えている。コントローラ１０１は各種の制御プログラムやデータなどを格納するメモリ１０５を備えている。
【００４４】
インターフェース（Ｉ／Ｆ）１０３ａ，１０３ｂは、後述する図７（Ａ）〜（Ｃ）のテーブルデータをサーバ２ａ，２ｂにそれぞれ送信する際に使用されると共に図７（Ａ）〜（Ｃ）のテーブルデータをサーバ２ａ，２ｂからそれぞれ受信する際に使用される。ネットワークインターフェース（Ｉ／Ｆ）１０４ａ，１０４ｂは、後述する図７（Ａ）〜（Ｃ）のテーブルデータをＰＣ１１ａ，１１ｂにそれぞれ送信する際に使用されると共に図７（Ａ）〜（Ｃ）のテーブルデータをＰＣ１１ａ，１１ｂからそれぞれ受信する際に使用される。
【００４５】
以下の説明では、サーバの代表例としてサーバ２ａを使用し、遠隔端末の代表例としてＰＣ１１ａを使用するが、サーバや遠隔端末をこれらに限定するものではない。
【００４６】
本実施の形態では、サーバ２ａのマウスカーソルの加速処理に左右されない位置ズレ補正機能を実現するため、ＰＣ１１ａ又はＫＶＭスイッチ１がマウス１４ａが出力するマウスデータそのものを補正するためのテーブルデータ（図７（Ａ）〜（Ｃ）参照）を自動作成する機能を有する。尚、位置ズレ補正機能とは、ＰＣ１１ａが表示するＰＣ１１ａのマウスカーソルの位置とＰＣ１１ａが表示するサーバ２ａのマウスカーソルの位置が一致しない場合に、これらのマウスカーソルの位置を一致させる補正を実行する機能である。
【００４７】
まず、マウスデータを補正するためのテーブルデータを自動作成する第１の機能を説明する。
【００４８】
図４（Ａ）は、サーバ２ａの画面の一例を示す図であり、図４（Ｂ）は、（Ａ）の部分拡大図であり、図４（Ｃ）は、ＰＣ１１ａの画面の一例を示す図である。また、図５（Ａ）及び図５（Ｂ）は、位置ズレ補正機能を示すフローチャートである。
【００４９】
図４（Ａ）において、符号１２１はサーバ２ａの画面を示し、符号１２２はサーバ２ａのマウスカーソルを示す。図４（Ｃ）において、符号１２３はＰＣ１１ａの画面を示し、符号１２６は、ＰＣ１１ａのマウスカーソルを示す。符号１２４は、ＰＣ１１ａのマウスカーソル１２６の非表示を設定したウィンドウを示し、符号１２５は、マウスカーソルの表示を設定した他のウィンドウを示す。ウィンドウ１２４には、サーバ２ａの画面が表示され、サーバ２ａのマウスカーソル１２２が表示されている。ウィンドウ１２４やウィンドウ１２５におけるマウスカーソルの表示／非表示は、ＰＣ１１ａのオぺレーティングシステムで設定することができる。
【００５０】
初期状態では、図４（Ａ）に示すように、サーバ２ａのマウスカーソル１２２は、画面１２１のどの位置にあってもよいが、例えば、位置ａにあるものとする。また、図４（Ｃ）に示すように、ＰＣ１１ａのマウスカーソル１２６は画面１２３のどの位置にあってもよいが、例えば、位置Ａにあるものとする。ＰＣ１１ａのマウスカーソル１２６は、例えば、ウィンドウ１２５の直上にあったとしても、本処理においてはウィンドウ１２４の直上に移動させることになるため、ＰＣ１１ａのマウスカーソル１２６は画面１２３のどの位置にあってもよい。
【００５１】
図５（Ａ）において、ＰＣ１１ａのＣＰＵ３１は、現在のＰＣ１１ａのマウスカーソル１２６の座標をＨＤＤ３４に保存する（ステップＳ１）。これにより、図４（Ｃ）のマウスカーソル１２６の位置Ａの座標がＨＤＤ３４に保存される。
【００５２】
次いで、ＰＣ１１ａのＣＰＵ３１は、ＰＣ１１ａのマウスカーソル１２６をウィンドウ１２４の左上角に移動させるマウスデータをＰＣ１１ａ自身に出力すると共に当該マウスデータに応じたＰＣ１１ａのマウスカーソル１２６の移動量を示すデータをＫＶＭスイッチ１を介して、サーバ２ａに出力する（ステップＳ２）。これにより、図４（Ａ）のサーバ２ａのマウスカーソル１２２は位置ａから位置ｂに移動し、図４（Ｃ）のマウスカーソル１２６は位置Ａから位置Ｂに移動する。
【００５３】
尚、マウス１４ａが出力可能なマウスデータは１〜２５５である。ＰＣ１１ａのマウスカーソル１２６が移動する大きさは、図４（Ｃ）に示すように、ＶＡＢで示し、サーバ２ａに到達して実際にサーバ２ａのマウスカーソル１２２が移動する大きさをＶａｂで示す。この２つの移動の大きさの関係はＶＡＢ<<Ｖａｂであり、ＶａｂはＶＡＢよりも非常に大きな値とし、サーバ２ａの加速処理に左右されず、サーバ２ａのマウスカーソル１２２及びＰＣ１１ａのマウスカーソル１２６がそれぞれ画面１２１の左上角の位置Ｂ及びウィンドウ１２４の左上角の位置ｂに移動する大きさとする。
【００５４】
次いで、ＰＣ１１ａのＣＰＵ３１は、サーバ２ａの加速係数の検出処理を実行する（ステップＳ３）。この処理は、ＰＣ１１ａがＫＶＭスイッチ１を介してサーバ２ａに出力するＰＣ１１ａのマウスカーソル１２６の移動量を示すデータがサーバ２ａでどの様に加速されるのかを調べるために行う。この処理によって、サーバ２ａの加速係数を全て把握し、ＰＣ１１ａがＫＶＭスイッチ１を介してサーバ２ａが実行する加速処理に最適化したデータを出力できるようにする。サーバ２ａの加速係数の検出処理の詳細は後述する。
【００５５】
最後に、ＰＣ１１ａのＣＰＵ３１は、ＰＣ１１ａのマウスカーソル１２６をウィンドウ１２４の左上角の座標からＨＤＤ３４に保存されたＰＣ１１ａのマウスカーソル１２６の座標（即ち位置Ａの座標）の位置に戻すマウスデータをＰＣ１１ａ自身に出力すると共に当該マウスデータに応じたＰＣ１１ａのマウスカーソル１２６の移動量を示すデータをＫＶＭスイッチ１を介して、サーバ２ａに出力する（ステップＳ４）。ステップＳ２のマウスデータとステップＳ４のマウスデータとの関係は大きさが同一であるが、正負が逆になる。これにより、ＰＣ１１ａのマウスカーソル１２６は位置Ｂから位置Ａに戻り、サーバ２ａのマウスカーソル１２２は位置ｂから位置ａに戻る。
【００５６】
図５（Ａ）では、ＰＣ１１ａのＣＰＵ３１位置ズレ補正機能を実行したが、図５（Ｂ）では、ＫＶＭスイッチ１のコントローラ１０１が位置ズレ補正機能を実行する。
【００５７】
図５（Ｂ）において、ＫＶＭスイッチ１のコントローラ１０１は、ＰＣ１１ａから、現在のＰＣ１１ａのマウスカーソル１２６の座標を取得し、メモリ１０５に保存する（ステップＳ１−１）。これにより、図４（Ｃ）のマウスカーソル１２６の位置Ａの座標がメモリ１０５に保存される。
【００５８】
次いで、ＫＶＭスイッチ１のコントローラ１０１は、ＰＣ１１ａのマウスカーソル１２６をウィンドウ１２４の左上角に移動させるマウスデータをＰＣ１１ａに出力すると共に当該マウスデータに応じたＰＣ１１ａのマウスカーソル１２６の移動量を示すデータをサーバ２ａに出力する（ステップＳ２−１）。これにより、図４（Ａ）のサーバ２ａのマウスカーソル１２２は位置ａから位置ｂに移動し、図４（Ｃ）のマウスカーソル１２６は位置Ａから位置Ｂに移動する。尚、ＫＶＭスイッチ１が出力可能なマウスデータは１〜２５５である。
【００５９】
次いで、ＫＶＭスイッチ１のコントローラ１０１は、サーバ２ａの加速係数の検出処理を実行する（ステップＳ３−１）。この処理は、サーバ２ａに出力するＰＣ１１ａのマウスカーソル１２６の移動量を示すデータがサーバ２ａでどの様に加速されるのかを調べるために行う。この処理によって、サーバ２ａの加速係数を全て把握し、ＫＶＭスイッチ１が、サーバ２ａが実行する加速処理に最適化したデータを出力できるようにする。サーバ２ａの加速係数の検出処理の詳細は後述する。
【００６０】
最後に、ＫＶＭスイッチ１のコントローラ１０１は、ＰＣ１１ａのマウスカーソル１２６をウィンドウ１２４の左上角の座標からメモリ１０５に保存されたＰＣ１１ａのマウスカーソル１２６の元の位置（即ち位置Ａの座標）に戻すマウスデータをＰＣ１１ａ自身に出力すると共に当該マウスデータに応じたＰＣ１１ａのマウスカーソル１２６の移動量を示すデータをサーバ２ａに出力する（ステップＳ４−１）。ステップＳ２−１のマウスデータとステップＳ４−１のマウスデータとの関係は大きさが同一であるが、正負が逆になる。これにより、ＰＣ１１ａのマウスカーソル１２６は位置Ｂから位置Ａに戻り、サーバ２ａのマウスカーソル１２２は位置ｂから位置ａに戻る。
【００６１】
図６は、図５（Ａ）のステップＳ３の加速係数の検出処理を示すフローチャートである。
【００６２】
まず、ＰＣ１１ａのＣＰＵ３１は、サーバ２ａのマウスカーソル１２２が位置ｂにあり、ＰＣ１１ａのマウスカーソル１２６が位置Ｂにあるとき、図４（Ｂ）のマウスカーソル１２２を囲む閉領域ｒをウィンドウ１２４に表示している画像の領域上においてキャプチャし、サーバ２ａのマウスカーソル１２２に対応するビットマップを抽出し（ステップＳ１１）、ウィンドウ１２４内部でサーバ２ａのマウスカーソル１２２の移動を追尾できるようにする。
【００６３】
以降の処理では、ＰＣ１１ａのＣＰＵ３１は、マウス１４ａが１〜２５５の各マウスデータに応じたＰＣ１１ａのマウスカーソル１２６の移動量を示すデータをサーバ２ａに出力し、それに応じてサーバ２ａのマウスカーソル１２２がどの様に移動するかを検知し、サーバ２ａの加速係数を検出する。
【００６４】
ＰＣ１１ａのＣＰＵ３１は、マウスデータ（ｉ）の初期化を行う、即ちマウスデータとして１をセットする（ｉ＝１）（ステップＳ１２）。次いで、ＰＣ１１ａのＣＰＵ３１は、セットされたマウスデータ（ｉ）に応じたＰＣ１１ａのマウスカーソル１２６の移動量を算出すると共に、ＰＣ１１ａのマウスカーソル１２６の移動量を示すデータをサーバ２ａに出力する（ステップＳ１３）。これにより、ウィンドウ１２４内のサーバ２ａのマウスカーソル１２２は移動する。
【００６５】
次に、ＰＣ１１ａのＣＰＵ３１は、サーバ２ａのマウスカーソル１２２の画像のウィンドウ１２４内の移動先をパターンマッチングにより検出する（ステップＳ１４）。
【００６６】
ＰＣ１１ａのＣＰＵ３１は、サーバ２ａのマウスカーソル１２２の移動前の位置と移動後の位置との差分を計算し、マウスデータ（ｉ）に対するサーバ２ａのマウスカーソル１２２の移動量を算出する（ステップＳ１５）。この移動量の算出は、ステップＳ１３からステップＳ１８のループにより、マウス１４ａが出力可能なマウスデータ（１〜２５５）に対応する回数、即ち２５５回繰り返し実行される。
【００６７】
ＰＣ１１ａのＣＰＵ３１は、マウスデータ（ｉ）、ＰＣ１１ａのマウスカーソル１２６の移動量及びサーバ２ａのマウスカーソル１２２の移動量に基づいたテーブルデータを作成する（ステップＳ１６）。この作成されたテーブルデータはＨＤＤ３４に保存される。テーブルデータについては、後述する。
【００６８】
続けて、ＰＣ１１ａのＣＰＵ３１は、マウスデータ（ｉ）を１増加し（ステップＳ１７）、マウスデータ（ｉ）が２５５を超えたか否かを判別する（ステップＳ１８）。
【００６９】
ステップＳ１８で、マウスデータ（ｉ）が２５５を超えていない場合には（ＮＯ）、ステップＳ１３に戻る。一方、ステップＳ１８で、マウスデータ（ｉ）が２５５を超えた場合には（ＹＥＳ）、ＰＣ１１ａのＣＰＵ３１は、サーバ２ａのマウスカーソル１２２をウィンドウ１２４の左上角に移動させ（ステップＳ１９）、本処理を終了する。
【００７０】
尚、図５（Ｂ）のステップＳ３−１の加速係数の検出処理は、図６と同様に実行されるが、実行主体はＫＶＭスイッチ１のコントローラ１０１である。この場合、ＫＶＭスイッチ１のコントローラ１０１は、継続的にＰＣ１１ａの画面のデータを受信する。
【００７１】
図７（Ａ）は、ステップＳ１６で作成されるテーブルデータの一例を示す図であり、図７（Ｂ）は、図７（Ａ）の各値を四捨五入したテーブルデータの一例を示す図であり、図７（Ｃ）は、ＰＣ１１ａのマウスカーソル１２６の位置とサーバ２ａのマウスカーソル１２２の位置とを一致させるためのテーブルデータの一例を示す図である。
【００７２】
図７（Ａ）において、ＸはＰＣ１１ａへの入力に相当するマウスデータを示し、ＹはＰＣ１１ａのマウスカーソル１２６の移動量を示し、Ｚはサーバ２ａのマウスカーソル１２２の移動量を示す。上記ステップＳ１６により、ＰＣ１１ａのＣＰＵ３１は、図７（Ａ）のテーブルデータを作成するが、このとき、図７（Ａ）の各値を四捨五入した図７（Ｂ）のテーブルデータを同時に作成する。図７（Ｃ）のテーブルデータは、ステップＳ１９でＰＣ１１ａのＣＰＵ３１により作成され、ＨＤＤ３４に保存される、又はステップＳ１９でＫＶＭスイッチ１のコントローラ１０１に作成され、メモリ１０５に保存される。
【００７３】
サーバ２ａの加速係数を検出するために、図７（Ａ）及び図７（Ｂ）のマウスデータＸが利用されているが、サーバ２ａには、図７（Ａ）及び図７（Ｂ）に示されるＰＣ１１ａのマウスカーソル１２６の移動量Ｙが入力されている。マウスデータＸがＰＣ１１ａのマウスカーソル１２６の移動量Ｙと異なるのは、ＰＣ１１ａでもマウスの加速処理が実行されているためである。
【００７４】
サーバ２ａのマウスカーソル１２２の位置がＰＣ１１ａのマウスカーソル１２６の位置とズレないようにするためには、ＰＣ１１ａのマウスカーソル１２６の移動量Ｙとサーバ２ａのマウスカーソル１２２の移動量Ｚとが一致する必要がある。しかし、ＰＣ１１ａのマウスカーソル１２６の移動量Ｙとサーバ２ａのマウスカーソル１２２の移動量Ｚとが一致しないことは、図７（Ｂ）より明らかである。
【００７５】
そこで、本実施の形態では、ＰＣ１１ａのＣＰＵ３１又はＫＶＭスイッチ１のコントローラ１０１は、ＰＣ１１ａのマウスカーソル１２６の移動量Ｙとサーバ２ａのマウスカーソル１２２の移動量Ｚとが一致するように、ＰＣ１１ａのマウスカーソル１２６の移動量Ｙの出力を変換する出力変換処理を実行する。具体的には、出力変換処理では、ＰＣ１１ａのＣＰＵ３１又はＫＶＭスイッチ１のコントローラ１０１は、ＰＣ１１ａのマウスカーソル１２６の移動量Ｙとサーバ２ａのマウスカーソル１２２の移動量Ｚとが一致するような、１又は２以上のマウスデータをサーバ２ａに出力する。このマウスデータはＰＣ１１ａで加速処理が実行されていない、マウスからＰＣ１１ａに直接入力されたデータである。
【００７６】
図７（Ｃ）のテーブルデータは、ＰＣ１１ａのマウスカーソル１２６の移動量Ｙ、サーバ２ａに出力されるマウスデータ、及びサーバ２ａのマウスカーソル１２２の移動量Ｚとの関係を示す。
【００７７】
例えば、ＰＣ１１ａのマウスカーソル１２６の移動量Ｙ＝５の場合、その値がＰＣ１１ａからサーバ２ａに出力されると、図７（Ｂ）からサーバ２ａのマウスカーソル１２２の移動量Ｚは「７」となり、マウスカーソル１２２は「２」の分だけ加速される。この場合、ＰＣ１１ａのマウスカーソル１２６の移動量Ｙとサーバ２ａのマウスカーソル１２２の移動量Ｚとは一致しない。
【００７８】
しかし、図７（Ｃ）では、ＰＣ１１ａのマウスカーソル１２６の移動量Ｙ＝５の場合、ＰＣ１１ａからサーバ２ａにマウスデータＸ−１としての「３」及びマウスデータＸ−２としての「１」が出力される、即ち、マウスデータが２回に分けて出力される。マウスデータが「３」のときは、図７（Ｂ）に基づいて、サーバ２ａのマウスカーソル１２２の移動量Ｚ−１は「４」となり、マウスデータが「１」のときは、図７（Ｂ）に基づいて、サーバ２ａのマウスカーソル１２２の移動量Ｚ−２は「１」となり、移動量Ｚ−１及び移動量Ｚ−２の合計であるマウスカーソル１２２の移動量Ｚは「５」となる。この場合、ＰＣ１１ａのマウスカーソル１２６の移動量Ｙとサーバ２ａのマウスカーソル１２２の移動量Ｚとは一致する。
【００７９】
図８（Ａ）及び（Ｂ）は、ＰＣ１１ａ及びＫＶＭスイッチ１で実行される処理を示すフローチャートである。
【００８０】
まず、図８（Ａ）の処理について説明する。
【００８１】
ＰＣ１１ａでマウス１４ａが操作され、ＰＣ１１ａのマウスカーソル１２６が移動する（ステップＳ２１）と、ＰＣ１１ａのＣＰＵ３１は、ＰＣ１１ａのマウスカーソル１２６の移動量Ｙのデータを作成し（ステップＳ２２）、ＫＶＭスイッチ１へ送信する（ステップＳ２３）。ＫＶＭスイッチ１のコントローラ１０１は、ＰＣ１１ａのマウスカーソル１２６の移動量Ｙのデータを受信し（ステップＳ２４）、図７（Ｃ）のテーブルデータを使って、出力変換処理を実行し（ステップＳ２５）、１又は２以上のマウスデータをサーバ２ａに出力する（ステップＳ２６）。サーバ２ａは１又は２以上のマウスデータを受信し、サーバ２ａのマウスカーソル１２２を移動させ（ステップＳ２７）、本処理を終了する。尚、サーバ２ａのマウスカーソル１２２の移動は、ＰＣ１１ａのウィンドウ１２４に表示される。
【００８２】
次いで、図８（Ｂ）の処理について説明する。
【００８３】
ＰＣ１１ａでマウス１４ａが操作され、ＰＣ１１ａのマウスカーソル１２６が移動する（ステップＳ３１）と、ＰＣ１１ａのＣＰＵ３１は、図７（Ｃ）のテーブルデータを使って、出力変換処理を実行し（ステップＳ３２）、１又は２以上のマウスデータをＫＶＭスイッチ１へ送信する（ステップＳ３３）。ＫＶＭスイッチ１のコントローラ１０１は、１又は２以上のマウスデータを受信し（ステップＳ３４）、そのまま、サーバ２ａに出力する（ステップＳ３５）。サーバ２ａは１又は２以上のマウスデータを受信し、サーバ２ａのマウスカーソル１２２を移動させ（ステップＳ３６）、本処理を終了する。尚、サーバ２ａのマウスカーソル１２２の移動は、ＰＣ１１ａのウィンドウ１２４に表示される。
【００８４】
このように、ＰＣ１１ａ又はＫＶＭスイッチ１が、ＰＣ１１ａのマウスカーソル１２６とサーバ２ａのマウスカーソル１２２の位置ズレの起きないマウスデータをサーバ２ａに出力することで、サーバ２ａのマウスの加速処理に左右されない位置ズレ補正機能を提供できるようになり、従来のようにサーバのマウスの加速処理を無効にしなくて済むようになる。また、ＰＣ１１ａのマウスカーソル１２６がウィンドウ１２４の直上にある限り、ＰＣ１１ａのマウスカーソル１２６とサーバ２ａのマウスカーソル１２２の位置ズレが発生することがなく、マウス１４ａのオペレータに快適なマウス操作環境を提供できる。
【００８５】
次に、マウスデータを補正するためのテーブルデータを自動作成する第２の機能を説明する。ここでは、図７（Ａ）〜（Ｃ）のテーブルデータをサーバ２ａが自動作成する。
【００８６】
上記第１の機能では、図７（Ａ）〜（Ｃ）のテーブルデータを作成するために、ＰＣ１１ａがウィンドウ１２４でのサーバ２ａのマウスカーソル１２２の画像のキャプチャ及びパターンマッチング処理を実行している。
【００８７】
ＰＣ１１ａのマウスカーソル１２６の移動がサーバ２ａ上でどのように反映されるか、即ちＰＣ１１ａのマウスカーソル１２６の移動に従って、サーバ２ａのマウスカーソル１２２がどのように移動するかは、サーバ２ａ上で監視プログラムを動作させ、サーバ２ａのマウスカーソル１２２の位置を常に検出することにより調べることができる。
【００８８】
図９（Ａ）は、ＰＣ１１ａ、ＫＶＭスイッチ１及びサーバ２ａにおけるデータの処理経路をモデル化した図である。
【００８９】
サーバ２ａのＨＤＤ２４は、デバイスドライバ５１、ウィンドウ管理システム５２、プログラム５３を備えており、これらは、ＨＤＤ２４からＲＡＭ２３に読み出されて、適宜ＣＰＵ２１により実行されることによりそれぞれの機能を発揮する。
【００９０】
同図において、経路Ｐ１は、ＫＶＭスイッチ１とＰＣ１１ａとの間で成立するＩ／Ｆ（例えばEthernet（登録商標）や電話回線）を利用することを示す。経路Ｐ２は、デバイスドライバ５１とハードウェアであるＫＶＭスイッチ１との間で成立するＩ／Ｆ（例えばＰＳ２通信線やＵＳＢ）を利用していることを示す。経路Ｐ３は、プログラム５３とデバイスドライバ５１との間で成立するＩ／Ｆ（例えばApplication Program Interface）を利用していることを示す。経路Ｐ４は、サーバ２ａとＫＶＭスイッチ１が相互接続可能な通信経路に接続されている場合で、プログラム５３とＫＶＭスイッチ１との間で成立するＩ／Ｆ（例えばEthernet（登録商標）及びTCP/IP）を利用していることを示す。経路Ｐ５は、サーバ２ａとＰＣ１１ａが相互接続可能な通信経路に接続されている場合で、プログラム５３とＰＣ１１ａとの間で成立するＩ／Ｆ（例えばEthernet（登録商標）及びTCP/IP）を利用していることを示す。
【００９１】
ＰＣ１１ａ、ＫＶＭスイッチ１及びサーバ２ａの動作を以下に説明する。
【００９２】
ＰＣ１１ａから、ＰＣ１１ａのマウスカーソル１２６の移動量Ｙを示すデータ（図７（Ｂ）参照）がネットワーク１０を介してＫＶＭスイッチ１に通知される。ＫＶＭスイッチ１はサーバ２ａにとってマウスの役割を果たし、ＰＣ１１ａから通知されたデータをサーバ２ａに入力し、デバイスドライバ５１に渡す。
【００９３】
マウスカーソル１２６の移動量Ｙを示すデータがデバイスドライバ５１に渡った時点では、サーバ２ａの加速処理は行われておらず、マウスカーソル１２６の移動量Ｙは図７（Ｂ）に示す値である。
【００９４】
デバイスドライバ５１は、ウィンドウ管理システム５２にマウスカーソル１２６の移動量Ｙを示すデータを渡し、ウィンドウ管理システム５２は加速処理を実施して、プログラム５３に加速処理後のデータを渡す。プログラム５３に渡ったデータは、加速処理が施されているから、図７（Ｂ）のサーバ２ａのマウスカーソル１２２の移動量Ｚを示すデータになっている。尚、ＣＰＵ２１は、加速処理が実施されたサーバ２ａのマウスカーソル１２２の移動量Ｚに従って、サーバ２ａのマウスカーソル１２２を移動させる。
【００９５】
このように、サーバ２ａに入力されたＰＣ１１ａのマウスカーソル１２６の移動量Ｙを示すデータはデバイスドライバ５１で取得され、サーバ２ａのマウスカーソル１２２の移動量Ｚを示すデータはプログラム５３で取得される。尚、マウスデータは、後述するように、順番に１つずつ増加するので、デバイスドライバ５１は、最初に受信したＰＣ１１ａのマウスカーソル１２６の移動量Ｙを示すデータに対応するマウスデータが「１」であり、次に受信したＰＣ１１ａのマウスカーソル１２６の移動量Ｙを示すデータに対応するマウスデータが「２」であり、最後に受信したＰＣ１１ａのマウスカーソル１２６の移動量Ｙを示すデータに対応するマウスデータが「２５５」であることを判断することができる。つまり、デバイスドライバ５１は、ＰＣ１１ａのマウスカーソル１２６の移動量Ｙを示すデータを受信することで、これに対応するマウスデータの値を取得することができる。
【００９６】
よって、デバイスドライバ５１は、プログラム５３からサーバ２ａのマウスカーソル１２２の移動量Ｚを示すデータを取得することで、予め取得されたＰＣ１１ａのマウスカーソル１２６の移動量Ｙを示すデータ及びマウスデータと、サーバ２ａのマウスカーソル１２２の移動量Ｚを示すデータとに基づいて、図７（Ｂ）のテーブルデータ及び図７（Ｃ）のテーブルデータを作成することができる。
【００９７】
図９（Ｂ）は、加速係数の検出処理を示すフローチャートである。
【００９８】
デバイスドライバ５１は、マウスデータ（ｉ）の初期化を行う、即ちマウスデータとして１をセットする（ｉ＝１）（ステップＳ４１）。次いで、デバイスドライバ５１は、プログラム５３からサーバ２ａのマウスカーソル１２２の移動量Ｚを示すデータ、ＫＶＭスイッチ１からＰＣ１１ａのマウスカーソル１２６の移動量Ｙを示すデータを取得する（ステップＳ４２）。デバイスドライバ５１は、マウスデータ、サーバ２ａのマウスカーソル１２２の移動量Ｚ、及びＰＣ１１ａのマウスカーソル１２６の移動量Ｙに基づいてテーブルデータを作成する（ステップＳ４３）。このテーブルデータは図７（Ａ）であるが、デバイスドライバ５１は、マウスデータ、サーバ２ａのマウスカーソル１２２の移動量Ｚ、及びＰＣ１１ａのマウスカーソル１２６の移動量Ｙの各値を四捨五入することで図７（Ｂ）のテーブルデータを取得する。
【００９９】
次いで、デバイスドライバ５１は、マウスデータを１増加し（ステップＳ４４）、マウスデータが２５５を超えたか否かを判別する（ステップＳ４５）。
【０１００】
ステップＳ４５で、マウスデータが２５５を超えていない場合には（ＮＯ）、ステップＳ４２に戻る。一方、ステップＳ４５で、マウスデータが２５５を超えた場合には（ＹＥＳ）、本処理を終了する。この処理の終了後に、デバイスドライバ５１は、図７（Ｂ）のテーブルデータに基づいて図７（Ｃ）のテーブルデータを作成する。
【０１０１】
上記処理では、デバイスドライバ５１で図７（Ａ）〜図７（Ｃ）のテーブルデータを作成したが、ＰＣ１１ａのマウスカーソル１２６の移動量Ｙを示すデータ及びマウスデータは、ＫＶＭスイッチ１及びＰＣ１１ａでも取得されているデータなので、サーバ２ａのマウスカーソル１２２の移動量Ｚを示すデータを経路Ｐ１又は経路Ｐ２を使ってＫＶＭスイッチ１又はＰＣ１１ａに転送し、ＫＶＭスイッチ１又はＰＣ１１ａで図７（Ａ）〜図７（Ｃ）のテーブルデータを作成してもよい。
【０１０２】
また、ＫＶＭスイッチ１はプログラム５３からサーバ２ａのマウスカーソル１２２の移動量Ｚを示すデータを取得し、図７（Ａ）〜図７（Ｃ）のテーブルデータを作成し、それを自己保持したり、デバイスドライバ５１又はＰＣ１１ａに転送してもよい。また、ＰＣ１１ａはプログラム５３からサーバ２ａのマウスカーソル１２２の移動量Ｚを示すデータを取得し、図７（Ａ）〜図７（Ｃ）のテーブルデータを作成し、それを自己保持したり、デバイスドライバ５１又はＫＶＭスイッチ１に転送してもよい。
【０１０３】
このように、図７（Ａ）〜図７（Ｃ）のテーブルデータの作成は、ＰＣ１１ａ、ＫＶＭスイッチ１、又はデバイスドライバ５１のいずれでも実行可能である。また、図７（Ｃ）のテーブルデータに基づいて実行される出力変換処理（即ち、ＰＣ１１ａのマウスカーソル１２６の移動量Ｙとサーバ２ａのマウスカーソル１２２の移動量Ｚとが一致するような、１又は２以上のマウスデータをサーバ２ａ（より具体的にはプログラム５３）に出力する処理）は、ウィンドウ管理システム５２の前段までに実行されていればよい。サーバ２ａでは、デバイスドライバ５１が図７（Ｃ）のテーブルデータに基づいて出力変換処理を実行する。
【０１０４】
次に、加速係数の検出処理を半自動で実行する場合を説明する。半自動とは、ＰＣ１１ａのオペレータの操作が必要であることを意味する。
【０１０５】
図１０は、ＰＣ１１ａの画面の一例を示す図である。
【０１０６】
図１０において、符号１２３はＰＣ１１ａの画面を示し、符号１２６は、ＰＣ１１ａのマウスカーソルを示す。符号１２４は、サーバ２ａの画面が表示されるウィンドウを示し、符号１２５は、他のウィンドウを示す。ウィンドウ１２４には、サーバ２ａのマウスカーソル１２２が表示され、ＰＣ１１ａのマウスカーソルも表示される。しかし、このＰＣ１１ａのマウスカーソルは、この処理のときの場合のみ表示され、通常は、ＰＣ１１ａのマウスカーソルはウィンドウ１２４上では非表示に設定されている。
【０１０７】
図１０において、初期状態では、ＰＣ１１ａのマウスカーソル１２６の位置Ａ及びサーバ２ａのマウスカーソル１２２の位置ａはどのような位置にあってもよい。但し、ＰＣ１１ａのＣＰＵ３１は、ＰＣ１１ａのマウスカーソル１２６の位置Ａの座標及びサーバ２ａのマウスカーソル１２２の位置ａの座標は、予めＨＤＤ３４に保存しておく。
【０１０８】
ＰＣ１１ａのＣＰＵ３１は、最初にサーバ２ａのマウスカーソル１２２を移動させるデータをサーバ２ａに出力し、サーバ２ａのマウスカーソル１２２を位置ａから位置ｂに移動させる。ＰＣ１１ａのオペレータは、ＰＣ１１ａのマウスカーソル１２６を移動させ、位置ｂのサーバ２ａのマウスカーソル１２２の矢先をクリックする。このクリックにより、ＰＣ１１ａのＣＰＵ３１はサーバ２ａのマウスカーソル１２２の位置ｂとサーバ２ａのマウスカーソル１２２の位置が同位置であると認識できる。尚、このとき、ＰＣ１１ａのＣＰＵ３１は、ＰＣ１１ａのマウスカーソル１２６の移動量を示すデータをサーバ２ａに出力しない。これは、ＰＣ１１ａのマウスカーソル１２６の移動量を示すデータをサーバ２ａに出力してしまうと、ＰＣ１１ａのマウスカーソル１２６の移動に連動してサーバ２ａのマウスカーソル１２２が移動してしまい、クリックができないからである。
【０１０９】
次に、ＰＣ１１ａのＣＰＵ３１は、サーバ２ａのマウスカーソル１２２を移動させるデータをサーバ２ａに出力し、サーバ２ａのマウスカーソル１２２が位置ｂから位置ｃに移動したときに、ＰＣ１１ａのオペレータは、ＰＣ１１ａのマウスカーソル１２６を移動させ、位置ｃのサーバ２ａのマウスカーソル１２２の矢先をクリックする。
【０１１０】
これにより、ＰＣ１１ａのＣＰＵ３１から出力された、サーバ２ａのマウスカーソル１２２を位置ｂから位置ｃに移動させたデータが、サーバ２ａでどのように加速処理されたかが分かり、ＰＣ１１ａのＣＰＵ３１は、ＰＣ１１ａのマウスカーソル１２６の位置ｂから位置ｃまでの移動量と、サーバ２ａのマウスカーソル１２２の位置ｂから位置ｃまでの移動量との関係を決定できる。
【０１１１】
このように、サーバ２ａのマウスカーソル１２２を位置ａ〜位置ｈまで順次移動させ、その都度、ＰＣ１１ａのオペレータは、ＰＣ１１ａのマウスカーソル１２６を移動させ、サーバ２ａのマウスカーソル１２２の矢先をクリックすることで、ＰＣ１１ａのＣＰＵ３１は、ＰＣ１１ａのマウスカーソル１２６の移動量とサーバ２ａのマウスカーソル１２２の移動量との関係を決定する。
【０１１２】
図１１は、加速係数の検出処理を半自動で実行する場合を示すフローチャートである。
【０１１３】
まず、ＰＣ１１ａのＣＰＵ３１は、マウスデータ（ｉ）の初期化を行う、即ちマウスデータとして１をセットする（ｉ＝１）（ステップＳ６１）。次いで、ＰＣ１１ａのＣＰＵ３１は、セットされたマウスデータ（ｉ）に応じたＰＣ１１ａのマウスカーソル１２６の移動量を算出すると共に、ＰＣ１１ａのマウスカーソル１２６の移動量を示すデータをサーバ２ａに出力する（ステップＳ６２）。これにより、ウィンドウ１２４内のサーバ２ａのマウスカーソル１２２は移動する。
【０１１４】
次に、ＰＣ１１ａのＣＰＵ３１は、ＰＣ１１ａのオペレータによりＰＣ１１ａのマウスカーソル１２６でクリックされた座標を検出する（ステップＳ６３）。
【０１１５】
ＰＣ１１ａのＣＰＵ３１は、前回クリックされた座標と今回クリックされた座標の差分を計算し、マウスデータ（ｉ）に対するサーバ２ａのマウスカーソル１２２の移動量を算出する（ステップＳ６４）。この移動量の算出は、ステップＳ１３からステップＳ１８のループにより、マウス１４ａが出力可能なマウスデータ（１〜２５５）に対応する回数、即ち２５５回繰り返し実行される。尚、初期状態のサーバ２ａのマウスカーソル１２２の座標は、ＨＤＤ３４に記憶されているものを使用する。
【０１１６】
ＰＣ１１ａのＣＰＵ３１は、マウスデータ（ｉ）、ＰＣ１１ａのマウスカーソル１２６の移動量、及びサーバ２ａのマウスカーソル１２２の移動量に基づいたテーブルデータを作成する（ステップＳ６５）。この作成されたテーブルデータはＨＤＤ３４に保存される。ここで作成されるテーブルデータは図７（Ａ）及び図７（Ｂ）である。
【０１１７】
続けて、ＰＣ１１ａのＣＰＵ３１は、マウスデータ（ｉ）を１増加し（ステップＳ６６）、マウスデータ（ｉ）が２５５を超えたか否かを判別する（ステップＳ６７）。
【０１１８】
ステップＳ６７で、マウスデータ（ｉ）が２５５を超えていない場合には（ＮＯ）、ステップＳ６２に戻る。一方、ステップＳ６７で、マウスデータ（ｉ）が２５５を超えた場合には（ＹＥＳ）、ＰＣ１１ａのＣＰＵ３１は、サーバ２ａのマウスカーソル１２２をウィンドウ１２４の左上角に移動させ（ステップＳ６８）、本処理を終了する。この処理の終了後に、ＰＣ１１ａのＣＰＵ３１は、図７（Ｂ）のテーブルデータに基づいて図７（Ｃ）のテーブルデータを作成する。
【０１１９】
この加速係数の検出処理を半自動で実行する機能は、ＰＣ１１ａのＣＰＵ３１が、サーバ２ａのマウスカーソル１２２を囲む閉領域ｒをウィンドウ１２４に表示している画像の領域上においてキャプチャできない場合に有効である。これは、ＰＣ１１ａのオペレーティングシステム又はウィンドウシステムが用いるカーソルの形状は、図１０が示すように矢印の形状であるのが普通であるが、矢印ではなく指の形状であったり、点であったりと、サーバ２ａのオペレータの嗜好によってマウスカーソルの形状が定まらない場合があるためである。このような状況であっても、ＰＣ１１ａのオペレータに、サーバ２ａのマウスカーソル１２２の矢先がクリックされることでサーバ２ａのマウスカーソル１２２の座標を特定することが可能である。このように、加速係数の検出処理を半自動で実行する機能を用いても、図７（Ｃ）のテーブルデータを作成することができる。
【０１２０】
尚、図７（Ｃ）のテーブルデータを使用した出力変換処理は、上述したようにウィンドウ管理システム５２の前段までに実行される。
【０１２１】
（第２の実施の形態）
上述した課題２で説明したように、リモートＰＣ（ＰＣ１１に相当する）のマウスカーソル２０５を非表示にしても、リモートＰＣのマウスカーソル２０５が図２０におけるウィンドウ２０１の枠を超えた場合は、サーバの遠隔操作ができなくなる。
【０１２２】
そこで、本実施の形態では、上述した図８（Ａ）又は図８（Ｂ）のＰＣ１１ａ及びＫＶＭスイッチ１で実行される処理の前段に、ＰＣ１１ａのマウスカーソル１２６の移動範囲を制限する処理と、この移動範囲を制限する処理の有効又は無効を選択可能にする処理を追加する。
【０１２３】
尚、本実施の形態のＫＶＭシステムは、第１の実施の形態のＫＶＭシステム１０００と同一の構成である。
【０１２４】
図１２（Ａ）は、第２の実施の形態にかかるＰＣ１１ａ及びＫＶＭスイッチ１で実行される処理を示すフローチャートである。
【０１２５】
ＰＣ１１ａのＣＰＵ３１は、ＰＣ１１ａのマウスカーソル１２６の移動範囲の制限を有効にするか否かを判別する（ステップＳ７１）。具体的には、ＰＣ１１ａのＣＰＵ３１は、ＰＣ１１ａのマウスカーソル１２６の移動範囲を制限する指示が割り当てられているキーボード１３ａのファンクションキーの押下があったか又はＰＣ１１ａのマウスカーソル１２６の移動範囲を制限するメニューが選択されているかを判別する。この場合、上記ファンクションキーの押下があった場合又は上記メニューが選択されている場合は、ＰＣ１１ａのＣＰＵ３１は、ＰＣ１１ａのマウスカーソル１２６の移動範囲の制限を有効にすると判別する。上記ファンクションキーの押下がない場合又は上記メニューが選択されていない場合は、ＰＣ１１ａのＣＰＵ３１は、ＰＣ１１ａのマウスカーソル１２６の移動範囲の制限を無効にすると判別する。
【０１２６】
ステップＳ７１でＰＣ１１ａのマウスカーソル１２６の移動範囲の制限を有効にすると判別された場合（ＹＥＳ）には、ＰＣ１１ａのＣＰＵ３１は、ＰＣ１１ａのオペレーティングシステムが持っている機能を呼び出し、ＰＣ１１ａのマウスカーソル１２６の移動範囲をウィンドウ１２４内に限定する（ステップＳ７２）。尚、ＰＣ１１ａのオペレーティングシステムが持っている機能とは、例えばMicrosoft Windows（登録商標）のClipCursorを呼ばれるＡＰＩ（Application Program Interface）である。このＡＰＩは、一般にマウスカーソルの移動範囲をウィンドウ上の四角形の領域内に制限する。
【０１２７】
ステップＳ７２の処理後、上述した図８（Ａ）のステップＳ２１〜ステップＳ２７又は図８（Ｂ）のステップＳ３１〜ステップＳ３６の処理が実行され（ステップＳ７３）、本処理を終了する。
【０１２８】
一方、ステップＳ７１でＰＣ１１ａのマウスカーソル１２６の移動範囲の制限を無効にすると判別された場合（ＮＯ）には、本処理を終了する。
【０１２９】
図１２（Ａ）のステップＳ７１及びステップＳ７２の実行主体は、ＰＣ１１ａのＣＰＵ３１であるが、ＫＶＭスイッチ１のコントローラ１０１もステップＳ７１及びステップＳ７２の処理を実行できる。この場合の処理を図１２（Ｂ）に示す。
【０１３０】
ステップＳ７１ａでは、ＫＶＭスイッチ１のコントローラ１０１は、ＰＣ１１ａのマウスカーソル１２６の移動範囲を制限する指示が割り当てられているＫＶＭスイッチ上の所定のスイッチ（不図示）がオンになっている又はメモリ１０５内に格納されている、ＰＣ１１ａのマウスカーソル１２６の移動範囲を制限するメニューが選択されているか否かを判別する。そして、ＫＶＭスイッチ１のコントローラ１０１は、いずれかに該当した場合には（ステップＳ７１ａでＹＥＳ）、ＰＣ１１ａのオペレーティングシステムが持っている機能を呼び出し、ＰＣ１１ａのマウスカーソル１２６の移動範囲をウィンドウ１２４内に限定する（ステップＳ７２ａ）。
【０１３１】
このように、本実施の形態では、ＰＣ１１ａのマウスカーソル１２６の移動範囲をウィンドウ１２４内に制限した場合に、出力変換処理が実行される。よって、ＰＣ１１ａのマウスカーソル１２６の移動範囲をウィンドウ１２４内に制限した場合には、ＰＣ１１ａのマウスカーソル１２６とサーバ２ａのマウスカーソル１２２の位置ズレが発生することがなく、快適なマウス操作環境を提供できる。
【０１３２】
（第３の実施の形態）
本実施の形態では、サーバ２ａのマウスカーソル１２２をローカル又はリモートで交互に操作する場合について説明する。
【０１３３】
ここで、ローカルとは、サーバ２ａ及びＫＶＭスイッチ１側を指し、リモートとは、ＰＣ１１ａ側を指す。
【０１３４】
本実施の形態では、ＫＶＭスイッチ１のメモリ１０５及びＰＣ１１ａのＨＤＤ３４に図７（Ｂ）及び図７（Ｃ）のテーブルデータが保存されているものとする。また、本実施の形態では、サーバ２ａ及びＰＣ１１ａにおいて、マウス操作が行われると加算処理が行われることを前提に説明する。
【０１３５】
本実施の形態のＫＶＭシステムは、第１の実施の形態のＫＶＭシステム１０００と同一の構成である。
【０１３６】
以下、上記ＫＶＭスイッチ１及びＰＣ１１ａで実行される処理について、図１３（Ａ），（Ｂ）を用いて説明する。
【０１３７】
図１３（Ａ）は、ローカル（サーバ２ａ及びＫＶＭスイッチ１側）の画面を示す図であり、図１３（Ｂ）はリモート（ＰＣ１１ａ側）の画面を示す図である。
【０１３８】
図１３（Ａ）において、符号１２１はローカルの画面を示し、符号１２２はサーバ２ａのマウスカーソルを示す。図１３（Ｂ）において、符号１２３はリモートの画面を示し、符号１２６は、ＰＣ１１ａのマウスカーソルを示す。符号１２４は、ＰＣ１１ａのマウスカーソル１２６の非表示を設定したウィンドウを示し、符号１２５は、マウスカーソルの表示を設定した他のウィンドウを示す。ウィンドウ１２４には、ローカルの画面が表示される。ウィンドウ１２４やウィンドウ１２５におけるマウスカーソルの表示／非表示は、ＰＣ１１ａのオぺレーティングシステムで設定することができる。
【０１３９】
リモートのマウス操作からローカルのマウス操作に切り替わった時点のＰＣ１１ａのマウスカーソル１２６の位置を位置Ａとすると、サーバ２ａのマウスカーソル１２２の位置は位置ａにある。ローカルのマウス操作によって、サーバ２ａのマウスカーソル１２２が軌跡ｘを辿って位置ａから位置ｂに移動した場合、最終的にサーバ２ａのマウスカーソル１２２の移動量、即ち、ＫＶＭスイッチ１がサーバ２ａに出力したデータの累積値は、Ｖａｂとなる。
【０１４０】
ここで、ローカルのマウス操作からリモートのマウス操作に切り替わった時のサーバ２ａのマウスカーソル１２２の位置を位置ｂとし、ＰＣ１１ａのマウスカーソル１２６の位置を位置Ｂとする。ローカルのマウス操作からリモートのマウス操作に切り替わり、リモートのマウス操作により、ＰＣ１１ａのマウスカーソル１２６がいずれかの方向に移動すると、ＰＣ１１ａのＣＰＵ３１は、サーバ２ａのマウスカーソル１２２の移動量Ｖａｂをサーバ２ａから取得し、当該移動量Ｖａｂ及び位置ａの座標から位置ｂを割り出し、位置ｂとサーバ２ａのマウスカーソル１２２の位置Ｂとの差分（Ｖｂ’）を算出する。そして、ＰＣ１１ａのＣＰＵ３１は、ＰＣ１１ａのマウスカーソル１２６の移動量と上記算出された位置ｂと位置Ｂとの差分（Ｖｂ’）とを合算し、図７（Ｃ）のテーブルデータを使って合算された値に対応する１又は２以上のマウスデータをサーバ２ａに出力する。
【０１４１】
図１４（Ａ）は、第３の実施の形態にかかるＫＶＭスイッチ１及びＰＣ１１ａで実行される処理を示すフローチャートである。
【０１４２】
まず、ＰＣ１１ａのＣＰＵ３１は、リモート（ＰＣ１１ａ側）のマウス操作からローカル（サーバ２ａ及びＫＶＭスイッチ１側）のマウス操作に切り替わった時点のＰＣ１１ａのマウスカーソル１２６の位置、即ち、リモートのマウス操作の最終位置をＨＤＤ３４に保存する（ステップＳ８１）。
【０１４３】
次に、ＫＶＭスイッチ１のコントローラ１０１は、ローカルのマウス操作中に、サーバ２ａに出力したデータの累積値をＰＣ１１ａに出力する（ステップＳ８２）。ここで、ＫＶＭスイッチ１がサーバ２ａに出力したデータは、図７（Ｂ）又は図７（Ｃ）のテーブルデータのＰＣ１１ａのマウスカーソル１２６の移動量Ｙに相当する。
【０１４４】
ＰＣ１１ａのＣＰＵ３１は、ＫＶＭスイッチ１がサーバ２ａに出力したデータの累積値を取得する（ステップＳ８３）。次いで、ＰＣ１１ａのＣＰＵ３１は、ローカルのマウス操作からリモートのマウス操作に切り替わり、リモートのマウス操作により、ＰＣ１１ａのマウスカーソル１２６がいずれかの方向に移動する（ステップＳ８４）と、ＨＤＤ３４に保存されたリモートのマウス操作の最終位置及びＫＶＭスイッチ１がサーバ２ａに出力したデータの累積値に基づいて、現在のサーバ２ａのマウスカーソル１２２の位置を算出し（ステップＳ８５）、現在のサーバ２ａのマウスカーソル１２２の位置と現在のＰＣ１１ａのマウスカーソル１２６の位置との差分を算出する（ステップＳ８６）。
【０１４５】
次いで、ＰＣ１１ａのＣＰＵ３１は、ＰＣ１１ａのマウスカーソル１２６の移動量とステップＳ８５で算出された差分とを合算し、図７（Ｃ）のテーブルデータを使って合算された値に対応する１又は２以上のマウスデータをサーバ２ａに出力する（ステップＳ８７）。具体的には、ＰＣ１１ａのＣＰＵ３１は、当該合算された値と一致するＰＣ１１ａのマウスカーソル１２６の移動量Ｙの値を求め、この値に対応する１又は２以上のマウスデータをサーバ２ａに出力する。
【０１４６】
以上の処理により、ローカルのマウス操作からリモートのマウス操作に切り替わる時点で、サーバ２ａのマウスカーソル１２２の位置は、ＰＣ１１ａのマウスカーソル１２６の位置に一致する。
【０１４７】
上記ステップＳ８２，Ｓ８３に代えて、図１４（Ｂ）の処理を実行してもよい。この場合、全ての処理をＰＣ１１ａのＣＰＵ３１が実行することができる。
【０１４８】
図１４（Ｂ）において、ステップＳ８１の処理後、ＰＣ１１ａのＣＰＵ３１は、上記第１の実施の形態で説明したように、ウィンドウ１２４内のサーバ２ａのマウスカーソル１２２の画像をキャプチャし（ステップＳ９１）、サーバ２ａのマウスカーソル１２２の画像のウィンドウ１２４内の移動先をパターンマッチングにより検出し（ステップＳ９２）、マウスカーソル１２２の移動前の位置（即ち、リモートのマウス操作からローカルのマウス操作に切り替わった時のマウスカーソル１２２の位置）と移動後の位置（即ち、ローカルのマウス操作からリモートのマウス操作に切り替わった時のマウスカーソル１２２の位置）との差分を計算し、ローカルのマウス操作により移動したサーバ２ａのマウスカーソル１２２の移動量を算出する（ステップＳ９３）。
【０１４９】
そして、ＰＣ１１ａのＣＰＵ３１は、図７（Ｂ）のテーブルデータを使って、算出されたサーバ２ａのマウスカーソル１２２の移動量に対応するＰＣ１１ａのマウスカーソル１２６の移動量を、ＫＶＭスイッチ１がサーバ２ａに出力したデータの累積値とし（ステップＳ９４）、ステップＳ８４の処理に進む。
【０１５０】
次に、図１４（Ａ）の処理をＫＶＭスイッチ１のコントローラ１０１が実行する例を説明する。
【０１５１】
図１５は、ＫＶＭスイッチ１で実行される処理を示すフローチャートである。
【０１５２】
まず、ＫＶＭスイッチ１のコントローラ１０１は、リモート（ＰＣ１１ａ側）のマウス操作からローカル（サーバ２ａ及びＫＶＭスイッチ１側）のマウス操作に切り替わった時点のＰＣ１１ａのマウスカーソル１２６の位置、即ち、リモートのマウス操作の最終位置をＰＣ１１ａから取得し、メモリ１０５に保存する（ステップＳ１０１）。
【０１５３】
次に、ＫＶＭスイッチ１のコントローラ１０１は、ローカルのマウス操作中に、サーバ２ａに出力したデータの累積値をメモリ１０５に保存する（ステップＳ１０２）。
【０１５４】
次いで、ＫＶＭスイッチ１のコントローラ１０１は、ローカルのマウス操作からリモートのマウス操作に切り替わったときのＰＣ１１ａのマウスカーソル１２６の位置をＰＣ１１ａから取得する（ステップＳ１０３）。ＫＶＭスイッチ１のコントローラ１０１は、メモリ１０５に保存されたリモートのマウス操作の最終位置及びサーバ２ａに出力したデータの累積値に基づいて、現在のサーバ２ａのマウスカーソル１２２の位置を算出し（ステップＳ１０４）、現在のサーバ２ａのマウスカーソル１２２の位置とステップＳ１０３で取得されたＰＣ１１ａのマウスカーソル１２６の位置との差分を算出する（ステップＳ１０５）。
【０１５５】
その後、ＫＶＭスイッチ１のコントローラ１０１は、ＰＣ１１ａのマウスカーソル１２６の移動量を示すデータをＰＣ１１ａから受信すると、当該ＰＣ１１ａのマウスカーソル１２６の移動量とステップＳ１０５で算出された差分とを合算し、図７（Ｃ）のテーブルデータを使って合算された値に対応する１又は２以上のマウスデータをサーバ２ａに出力する（ステップＳ１０６）。具体的には、ＰＣ１１ａのＣＰＵ３１は、当該合算された値と一致するＰＣ１１ａのマウスカーソル１２６の移動量Ｙの値を求め、この値に対応する１又は２以上のマウスデータをサーバ２ａに出力する。
【０１５６】
以上の処理により、ローカルのマウス操作からリモートのマウス操作に切り替わる時点で、サーバ２ａのマウスカーソル１２２の位置は、ＰＣ１１ａのマウスカーソル１２６の位置に一致する。
【０１５７】
図１４（Ａ），（Ｂ）又は図１５の処理によれば、サーバ２ａのマウスカーソル１２２をローカル又はリモートで交互に操作する場合でも、ＰＣ１１ａのマウスカーソルとサーバ２ａのマウスカーソルの位置ズレが補正でき、マウス１４ａのオペレータに対して快適なマウス操作環境を提供できる。
【０１５８】
本実施の形態では、サーバ２ａ及びＰＣ１１ａにおいて、マウス操作が行われると加算処理が行われることを前提に説明したが、従来のように、サーバ２ａ及びＰＣ１１ａの加算処理を無効にするＫＶＭシステムでは、サーバ２ａ、ＫＶＭスイッチ１及びＰＣ１１ａの入出力されるマウスデータはいずれも同一である。
【０１５９】
このため、サーバ２ａ及びＰＣ１１ａの加算処理を無効にするＫＶＭシステムでも、図１４（Ａ）、図１４（Ｂ）及び図１５の処理を適用できるが、図７（Ｂ）及び図７（Ｃ）のテーブルデータを使う必要はない。この場合、上記ステップＳ８７では、ＰＣ１１ａのＣＰＵ３１は、ＰＣ１１ａのマウスカーソル１２６の移動量とステップＳ８５算出された差分とを合算し、その合算値のデータをサーバ２ａに出力する。また、上記ステップＳ９４では、算出されたサーバ２ａのマウスカーソル１２２の移動量が、ＫＶＭスイッチ１がサーバ２ａに出力したデータの累積値となる。さらに、上記ステップＳ１０６では、ＰＣ１１ａのマウスカーソル１２６の移動量とステップＳ１０５で算出された差分とを合算し、その合算値のデータをサーバ２ａに出力する。
【０１６０】
（第４の実施の形態）
本実施の形態では、ＰＣ１１ａのマウスカーソル１２６がウインドウ１２４の内部から外部に一旦出て、再度ウインドウ１２４の外部から内部に入る場合に実行される位置補正処理について説明する。
【０１６１】
本実施の形態のＫＶＭシステムは、第１の実施の形態のＫＶＭシステム１０００と同一の構成である。
【０１６２】
図１６は、ＰＣ１１ａの画面の一例を示す図である。
【０１６３】
図１６において、符号１２２はサーバ２ａのマウスカーソルを示し、符号１２３はＰＣ１１ａの画面を示し、符号１２６は、ＰＣ１１ａのマウスカーソルを示す。符号１２４は、ＰＣ１１ａのマウスカーソル１２６の非表示を設定したウィンドウを示し、符号１２５は、マウスカーソルの表示を設定した他のウィンドウを示す。ウィンドウ１２４には、ローカル（サーバ２ａ）の画面が表示される。ウィンドウ１２４やウィンドウ１２５におけるマウスカーソルの表示／非表示は、ＰＣ１１ａのオぺレーティングシステムで設定することができる。
【０１６４】
まず、ＰＣ１１ａのマウスカーソル１２６とサーバ２ａのマウスカーソル１２２との位置ズレが生じていないものとする。ＰＣ１１ａのマウスカーソル１２６が位置Ａからウィンドウ１２４の枠上の位置Ｂに移動したときに、ＰＣ１１ａのＣＰＵ３１は、位置Ｂの座標をＨＤＤ３４に保存する。このとき、サーバ２ａのマウスカーソル１２２は位置Ｂと同一の位置ｂにある。
【０１６５】
その後、ＰＣ１１ａのオペレータのマウス操作により、ＰＣ１１ａのマウスカーソル１２６は、ウィンドウ１２４の外部の任意の経路Ｃを辿り、ウィンドウ１２４の枠上の位置Ｇに到達する。このとき、位置Ｂの座標と位置Ｇの座標との差分はＶＢＧとなる。
【０１６６】
ＰＣ１１ａのＣＰＵ３１は、ウィンドウ１２４の枠上の位置Ｇに到達した瞬間に、ＨＤＤ３４に保存された位置Ｂの座標と位置Ｇの座標の差分ＶＢＧを算出し、算出された差分をサーバ２ａに出力する。これにより、サーバ２ａのマウスカーソル１２２は位置ｂから位置ｇに移動する。位置ｇと位置Ｇは同じ位置である。
【０１６７】
また、ＰＣ１１ａのマウスカーソル１２６が、ウィンドウ１２４の外部の任意の経路Ｃを辿っている最中に、サーバ２ａのマウスカーソル１２２がローカルのマウス操作によって、軌跡ｘを辿って位置ｂから位置ｂ’に移動していた場合は、ＰＣ１１ａのＣＰＵ３１は、予め位置ｂの座標と位置ｂ’の座標の差分Ｖｂ’ｂを算出し、ＨＤＤ３４に保存する。
【０１６８】
その後、ＰＣ１１ａのＣＰＵ３１は、ウィンドウ１２４の枠上の位置Ｇに到達した瞬間に、ＨＤＤ３４に保存された位置Ｂの座標と位置Ｇの座標の差分ＶＢＧを算出し、ＨＤＤ３４に保存された差分Ｖｂ’ｂと差分ＶＢＧとを合成し、合成値Ｖｂ’Ｇをサーバ２ａに出力する。これにより、サーバ２ａのマウスカーソル１２２は位置ｂ’から位置ｇに移動する。
【０１６９】
尚、ＰＣ１１ａのマウスカーソル１２６が位置Ｇからウィンドウ１２４の内部に入った後は、上述した第１〜第３の実施の形態で説明した処理が実行されるため、ＰＣ１１ａのマウスカーソル１２６とサーバ２ａのマウスカーソル１２２の位置ズレが発生することがなくなる。
【０１７０】
図１７は、ＰＣ１１ａのＣＰＵ３１が実行する処理を示すフローチャートである。
【０１７１】
まず、ＰＣ１１ａのＣＰＵ３１は、ＰＣ１１ａのマウスカーソル１２６がウィンドウ１２４の外部に出たときのウィンドウ１２４の枠上の座標をＨＤＤ３４に保存する（ステップＳ１１１）。次に、ＰＣ１１ａのＣＰＵ３１は、ローカルのマウス操作によって、サーバ２ａのマウスカーソル１２２の移動があるか否かを判別する（ステップＳ１１２）。
【０１７２】
ステップＳ１１２でＹＥＳの場合には、ＰＣ１１ａのＣＰＵ３１は、サーバ２ａのマウスカーソル１２２の移動前の位置の座標と移動後の位置の座標との差分を算出し、当該差分をＨＤＤ３４に保存する（ステップＳ１１３）。
【０１７３】
次いで、ＰＣ１１ａのＣＰＵ３１は、ＰＣ１１ａのマウスカーソル１２６が再びウィンドウ１２４の枠上に到達したときに、当該到達したときのウィンドウ１２４の枠上の座標とステップＳ１１１でＨＤＤ３４に保存された座標との差分を算出し、当該差分とステップＳ１１３でＨＤＤ３４に保存されたサーバ２ａのマウスカーソル１２２の移動の差分とを合成し、合成値をサーバ２ａに出力し（ステップＳ１１４）、本処理を終了する。
【０１７４】
一方、ステップＳ１１２でＮＯの場合には、ＰＣ１１ａのＣＰＵ３１は、ＰＣ１１ａのマウスカーソル１２６が再びウィンドウ１２４の枠上に到達したときに、当該到達したときのウィンドウ１２４の枠上の座標とＨＤＤ３４に保存された座標との差分を算出し、当該差分をサーバ２ａに出力し（ステップＳ１１５）、本処理を終了する。
【０１７５】
図１８は、ＫＶＭスイッチ１のコントローラ１０１が実行する処理を示すフローチャートである。
【０１７６】
まず、ＫＶＭスイッチ１のコントローラ１０１は、ＰＣ１１ａのマウスカーソル１２６がウィンドウ１２４の外部に出たときのウィンドウ１２４の枠上の座標をＰＣ１１ａから取得し、メモリ１０５に保存する（ステップＳ１２１）。次に、ＫＶＭスイッチ１のコントローラ１０１は、ローカルのマウス操作によって、サーバ２ａのマウスカーソル１２２の移動があるか否かを判別する（ステップＳ１２２）。
【０１７７】
ステップＳ１２２でＹＥＳの場合には、ＫＶＭスイッチ１のコントローラ１０１は、サーバ２ａのマウスカーソル１２２の移動前の位置の座標と移動後の位置の座標との差分を算出し、当該差分をメモリ１０５に保存する（ステップＳ１２３）。
【０１７８】
次いで、ＫＶＭスイッチ１のコントローラ１０１は、ＰＣ１１ａのマウスカーソル１２６が再びウィンドウ１２４の枠上に到達したときに、当該到達したときのウィンドウ１２４の枠上の座標をＰＣ１１ａから取得し、当該取得された座標とステップＳ１２１でメモリ１０５に保存された座標との差分を算出し、当該差分とステップＳ１２３でメモリ１０５に保存されたサーバ２ａのマウスカーソル１２２の移動の差分とを合成し、合成値をサーバ２ａに出力し（ステップＳ１２４）、本処理を終了する。
【０１７９】
一方、ステップＳ１２２でＮＯの場合には、ＫＶＭスイッチ１のコントローラ１０１は、ＰＣ１１ａのマウスカーソル１２６が再びウィンドウ１２４の枠上に到達したときに、当該到達したときのウィンドウ１２４の枠上の座標をＰＣ１１ａから取得し、当該取得された座標とメモリ１０５に保存された座標との差分を算出し、当該差分をサーバ２ａに出力し（ステップＳ１２５）、本処理を終了する。
【０１８０】
図１７又は図１８の処理によれば、ＰＣ１１ａのマウスカーソル１２６がウィンドウ１２４の枠外に一旦出て、再度ウィンドウ１２４の枠内に戻ったときに、自動的にＰＣ１１ａのマウスカーソル１２６とサーバ２ａのマウスカーソル１２２の位置ズレが補正されるので、マウス１４ａのオペレータに対して快適なマウス操作環境を提供できる。
【０１８１】
本実施の形態では、サーバのマウスカーソルが表示されるウィンドウがＰＣ１１ａの画面１２３に１つ表示されているが（ウィンドウ１２４参照）、例えば、ＰＣ１１ａの画面１２３が、サーバのマウスカーソルが表示されるウィンドウを複数表示する場合（即ち、複数のサーバに対する複数のウィンドウが表示される場合）には、図１７又は図１８の処理をウィンドウ毎に実行する。
【０１８２】
従来技術では、リモートＰＣのマウスカーソルが、サーバのマウスカーソルが表示されるウィンドウの枠外に出て、他のウィンドウに移るたびに、リモートＰＣのオペレータが手動で位置ズレ補正機能を発動させ、リモートＰＣのマウスカーソルとサーバのマウスカーソルの位置ズレを補正していたため、リモートＰＣのオペレータは煩わしさを感じていた。
【０１８３】
このような場合でも、上記図１７又は図１８の処理を実行することで、自動的にリモートＰＣのマウスカーソルとサーバのマウスカーソルの位置ズレが補正されるため、リモートＰＣのオペレータに煩わしさを感じさせず、快適なマウス操作環境を提供できる。
【０１８４】
上記第１〜第４の実施の形態では、ＰＣ１１ａのマウスカーソル１２６を操作するためにマウス１４ａが使用され、サーバ２ａのマウスカーソル１２２を操作するためにマウス１４ａ又はマウス５が使用されるが、ＰＣ１１ａのマウスカーソル１２６又はサーバ２ａのマウスカーソル１２２を操作するための操作部材は、マウスに限定されるものではなく、タブレットなどのマウスカーソルを移動させる機能を有する操作部材でもよい。
【０１８５】
各サーバの機能を実現するためのソフトウェアのプログラムが記録されている記録媒体を、当該サーバに供給し、当該サーバのＣＰＵが記憶媒体に格納されたプログラムを読み出し実行することによっても、上記第１〜第４の実施の形態と同様の効果を奏する。また、各遠隔端末の機能を実現するためのソフトウェアのプログラムが記録されている記録媒体を、当該遠隔端末に供給し、当該遠隔端末のＣＰＵが記憶媒体に格納されたプログラムを読み出し実行することによっても、上記第１〜第４の実施の形態と同様の効果を奏する。さらにＫＶＭスイッチ１の機能を実現するためのソフトウェアのプログラムが記録されている記録媒体を、当該ＫＶＭスイッチ１に供給し、当該ＫＶＭスイッチ１のコントローラ１０１が記憶媒体に格納されたプログラムを読み出し実行することによっても、上記第１〜第４の実施の形態と同様の効果を奏する。この場合、ＫＶＭスイッチ１は記憶媒体からプログラムを読み出す装置（ＣＤ−ＲＯＭドライブ又はＤＶＤ−ＲＯＭドライブなど）を備えている。尚、プログラムを供給するための記憶媒体としては、例えば、ＣＤ−ＲＯＭ、ＤＶＤ、又はＳＤカードなどがある。
【０１８６】
また、各サーバのＣＰＵが、各サーバの機能を実現するためのソフトウェアのプログラムを実行することによっても、上記第１〜第４の実施の形態と同様の効果を奏する。また、各遠隔端末のＣＰＵが、各遠隔端末の機能を実現するためのソフトウェアのプログラムを実行することによっても、上記第１〜第４の実施の形態と同様の効果を奏する。さらに、ＫＶＭスイッチ１のコントローラ１０１が、ＫＶＭスイッチ１の機能を実現するためのソフトウェアのプログラム（例えば、ドライバ）を実行することによっても、上記第１〜第４の実施の形態と同様の効果を奏する。
【０１８７】
なお、本発明は、上述した実施の形態に限定されるものではなく、その要旨を逸脱しない範囲内で種々変形して実施することが可能である。
【符号の説明】
【０１８８】
１  ＫＶＭスイッチ
２ａ，２ｂ  サーバ
３，１２ａ，１２ｂ  モニタ
４，１３ａ，１３ｂ  キーボード
５，１４ａ，１４ｂ  マウス
２１，３１  ＣＰＵ
２２，３２  ＲＯＭ
２３，３３  ＲＡＭ
２４，３４  ハードディスクドライブ（ＨＤＤ）
２６，３６  ビデオインターフェース
２７，３７  ネットワークインターフェース
２８，３８  ＵＳＢインターフェース
１０１  コントローラ
１０２  スイッチング回路
１０５  メモリ
【図１】
0005274688.tif 000002
【図２】
0005274688.tif 000003
【図３】
0005274688.tif 000004
【図４】
0005274688.tif 000005
【図５】
0005274688.tif 000006
【図６】
0005274688.tif 000007
【図７】
0005274688.tif 000008
【図８】
0005274688.tif 000009
【図９】
0005274688.tif 000010
【図１０】
0005274688.tif 000011
【図１１】
0005274688.tif 000012
【図１２】
0005274688.tif 000013
【図１３】
0005274688.tif 000014
【図１４】
0005274688.tif 000015
【図１５】
0005274688.tif 000016
【図１６】
0005274688.tif 000017
【図１７】
0005274688.tif 000018
【図１８】
0005274688.tif 000019
【図１９】
0005274688.tif 000020