(57)【特許請求の範囲】
【請求項１】
サーバが実行するポインタ位置補正方法であって、
前記サーバとネットワーク経由で接続されたクライアントで入力された、ポインタの移動を伴うイベントおよび移動後のポインタの位置を含むイベント情報を当該クライアントから受信し、受信したイベント情報をイベント履歴に記憶し、
前記イベント情報に基づいて処理した結果、処理前後でポインタの位置に変化があったとき、変化があったポインタの位置が前記イベント履歴に記憶されているいずれかのイベント情報のポインタの位置と一致しているか否かを判定し、
前記判定する処理の結果、該変化があったポインタの位置が前記イベント履歴に記憶されているいずれのイベント情報のポインタの位置とも一致していないと判定した場合に、該変化があったポインタの位置を前記クライアントに通知する
各処理を実行するポインタ位置補正方法。
【請求項２】
前記判定する処理の結果、該変化があったポインタの位置が前記イベント履歴に記憶されているいずれかのイベント情報のポインタの位置と一致したと判定した場合に、該一致したポインタの位置を含むイベント情報および当該イベント情報より以前に受信したイベント情報を削除する
処理を前記サーバがさらに実行することを特徴とする請求項１に記載のポインタ位置補正方法。
【請求項３】
前記判定する処理の結果、該変化があったポインタの位置が前記イベント履歴に記憶されているいずれかのイベント情報のポインタの位置と一致したと判定した場合であって、該一致したイベント情報および当該イベント情報より以前に受信したイベント情報の数が閾値より大きい場合に、前記イベントに基づく処理の間隔を現在の処理の間隔より大きくする
処理を前記サーバが実行することを特徴とする請求項２に記載のポインタ位置補正方法。
【請求項４】
前記イベントに基づいて処理した結果、処理前後でポインタの形状に変化があったとき、変化があったポインタの形状を前記クライアントに通知する
処理を前記サーバがさらに実行する
ことを特徴とする請求項１から請求項３のいずれか１つに記載のポインタ位置補正方法。
【請求項５】
前記判定する処理は、前記イベントに基づいて処理した結果、処理前後でポインタの位置に変化があったとき、処理前後のポインタの位置が位置を表す座標の軸のうち１つの軸方向のみに変化があったか否かを判定し、１つの軸方向のみに変化があったと判定した場合、変化があった軸方向について変化があったポインタの位置が前記イベント履歴に記憶されているいずれかのイベント情報のポインタの位置と一致しているか否かを判定する
処理を前記サーバが実行することを特徴とする請求項１から請求項４のいずれか１つに記載のポインタ位置補正方法。
【請求項６】
前記判定する処理は、１つの軸方向のみに変化があったと判定した場合、変化があった軸方向にポインタの移動を限定する旨を前記クライアントに通知する
処理を前記サーバがさらに実行する
ことを特徴とする請求項５に記載のポインタ位置補正方法。
【請求項７】
サーバに、
前記サーバとネットワーク経由で接続されたクライアントで入力された、ポインタの移動を伴うイベントおよび移動後のポインタの位置を含むイベント情報を当該クライアントから受信し、受信したイベント情報をイベント履歴に記憶し、
前記イベント情報に基づいて処理した結果、処理前後でポインタの位置に変化があったとき、変化があったポインタの位置が前記イベント履歴に記憶されているいずれかのイベント情報のポインタの位置と一致しているか否かを判定し、
前記判定する処理の結果、該変化があったポインタの位置が前記イベント履歴に記憶されているいずれのイベント情報のポインタの位置とも一致していないと判定した場合に、該変化があったポインタの位置を前記クライアントに通知する
各処理を実行させることを特徴とするポインタ位置補正プログラム。
【請求項８】
ポインタの移動を伴うイベントおよび移動後のポインタの位置を含むイベント情報を記憶する記憶部と、
自装置とネットワーク経由で接続されたクライアントで入力された前記イベントのイベント情報を当該クライアントから受信し、受信したイベント情報を前記記憶部に保存する保存部と、
前記イベント情報に基づいて処理した結果、処理前後でポインタの位置に変化があったとき、変化があったポインタの位置が前記記憶部に記憶されているいずれかのイベント情報のポインタの位置と一致しているか否かを判定部と、
前記判定部による判定の結果、該変化があったポインタの位置が前記記憶部に記憶されているいずれのイベント情報のポインタの位置とも一致していないと判定した場合に、該変化があったポインタの位置を前記クライアントに通知する通知部と
を有することを特徴とするサーバ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ポインタ位置補正方法等に関する。
【背景技術】
【０００２】
近年、セキュリティの強化やＴＣＯ（Total  Cost  of  Ownership）の削減の観点等からシンクライアント（thin  client）システムが注目されている。シンクライアントシステムでは、ネットワークで相互に接続されたサーバとクライアントから構成される。そして、クライアントで操作した内容がネットワーク経由でサーバへ転送され、操作結果がサーバからクライアントへ転送されてクライアントの画面に表示される。
【０００３】
シンクライントシステムのサーバとクライアント間の通信プロトコルは、大きく分けると２種類に分類される。１つ目は、Ｗｉｎｄｏｗｓ（登録商標）標準のリモートデスクトップ（ＲＤＰ：Remote  Desktop  Protocol）で採用されているコマンド転送方式である。コマンド転送方式は、サーバのデスクトップ画面に対する描画コマンドをクライアントへ転送し、描画コマンドを受信したクライアントでこの描画コマンドを実行することで画面描画を行う。２つ目は、ＶＮＣ（Virtual  Network  Computing）等で採用されている画面転送方式である。画面転送方式は、サーバのデスクトップ画面の内容をビットマップやＪＰＥＧ等の画像でクライアントへ転送し、転送した画像をクライアントの画面へ表示させる。
【０００４】
ＣＡＤ等のように大量のオブジェクトを表示する場合、コマンド転送方式では、オブジェクト数に比例して描画コマンド数が増大し操作遅延が大きくなる。したがって、この場合、コマンド転送方式より画面転送方式の方が向いている。しかしながら、画面転送方式においては、マウス操作によるマウスカーソルの描画速度が使いやすさを決める重要なポイントとなる。
【０００５】
マウスカーソルの描画方式として、画面転送方式におけるサーバ描画方式とコマンド転送方式におけるローカルエコー方式とがある。サーバ描画方式は、サーバのデスクトップ画面に描画されたマウスカーソルの内容をそのままクライアントへ送信し、送信したマウスカーソルの内容をクライアントの画面に描画する。図２３は、マウスカーソルの描画方式であるサーバ描画方式を説明する図である。図２３に示すように、クライアントが入力イベントをサーバへ送信する。そして、サーバは、送信された入力イベントを受信し、受信した入力イベントを処理し、処理後のマウスカーソルの内容をそのままクライアントへ送信する。クライアントは、送信されたマウスカーソルの内容を受信し、受信したマウスカーソルの内容でマウスカーソルの移動結果を画面に表示する。
【０００６】
一方、ローカルエコー方式は、クライアントから入力イベントをサーバへ送信するとともに、クライアント側でマウスカーソルを描画する。図２４は、マウスカーソルの描画方式であるローカルエコー方式を説明する図である。図２４に示すように、クライアントが入力イベントをサーバへ送信するとともに、マウスカーソルの移動結果を画面に描画する。したがって、クライアントからサーバへ送信してからその入力イベントの処理結果を待つサーバ描画方式より入力イベントの処理結果を待たないローカルエコー方式の方が、マウスカーソルの応答性能は良い。
【０００７】
また、画面転送方式におけるサーバ描画方式において、マウスカーソルの移動に伴う通信頻度を削減する技術が開示されている。かかる技術では、サーバが、クライアントからサーバへの入力イベントに応じた表示用描画データを生成すると、当該描画データに含まれるオブジェクトの領域情報にカーソルＩＤを関係付けて記述したテーブルを生成する。そして、サーバは、作成したテーブルを当該描画データとともにクライアントへ送信する。クライアントは、入力イベントに応じた描画データを表示した状態でカーソルを移動させる。すると、クライアントは、当該カーソルの移動位置に対応したオブジェクト領域におけるカーソルＩＤをテーブルから判断し、当該カーソルＩＤに対応するカーソルの形状を移動後のカーソル位置に描画する。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０１０−２１１７２４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、画面転送方式において、マウスカーソルの描画方式をローカルエコー方式とすると、サーバでマウスカーソルの位置や形状が自動的に変わった場合に、クライアント側は対応できないという問題がある。すなわち、クライアント側は、自身で入力イベントに応じた位置にマウスカーソルを描画するとともに、入力イベントをサーバへ送信する。したがって、クライアント側は、サーバのマウスカーソルの位置が例えばアプリケーションによって自動的に移動したような場合、移動したサーバのマウスカーソルの位置を把握できないので、移動した位置に対応できない。サーバのマウスカーソルの形状が自動的に変わった場合であってもクライアント側が対応できないのは同様である。
【００１０】
また、サーバ描画方式における開示された技術であっても、クライアントがカーソルを移動させると、それに応じて当該カーソルの移動位置に対応したオブジェクト領域に基づいてカーソルの形状を描画する。したがって、サーバのマウスカーソルの形状が自動的に変わった場合にクライアント側が対応できないのは同様である。
【００１１】
開示の技術は、画面転送方式において、ローカルエコー方式のマウスカーソルの応答性能を維持しつつ、サーバのマウスカーソルの変化をクライアントに対応させることができることを目的とする。
【課題を解決するための手段】
【００１２】
１つの側面では、ポインタ位置補正方法は、サーバが実行するポインタ位置補正方法であって、前記サーバとネットワーク経由で接続されたクライアントで入力された、ポインタの移動を伴うイベントおよび移動後のポインタの位置を含むイベント情報を当該クライアントから受信し、受信したイベント情報をイベント履歴に記憶し、前記イベント情報に基づいて処理した結果、処理前後でポインタの位置に変化があったとき、変化があったポインタの位置が前記イベント履歴に記憶されているいずれかのイベント情報のポインタの位置と一致しているか否かを判定し、前記判定する処理の結果、該変化があったポインタの位置が前記イベント履歴に記憶されているいずれのイベント情報のポインタの位置とも一致していないと判定した場合に、該変化があったポインタの位置を前記クライアントに通知する各処理を含む。
【発明の効果】
【００１３】
本願の開示するポインタ位置補正方法の一つの態様によれば、ローカルエコー方式のマウスカーソルの応答性能を維持しつつ、サーバのマウスカーソルの変化をクライアントに対応させることができる。
【図面の簡単な説明】
【００１４】
【図１】図１は、実施例１に係るシンクライアントシステムに含まれる各装置の構成を示す機能ブロック図である。
【図２】図２は、入力イベント履歴保持部のデータ構造の一例を示す図である。
【図３】図３は、実施例１に係るカーソル位置補正の具体例を説明する図である。
【図４】図４は、実施例１に係るクライアント装置における入力イベント処理の手順を示すフローチャートである。
【図５】図５は、実施例１に係るクライアント装置における画面描画処理の手順を示すフローチャートである。
【図６】図６は、実施例１に係るサーバ装置における入力イベント処理の手順を示すフローチャートである。
【図７】図７は、実施例１に係るサーバ装置におけるカーソル位置補正処理の手順を示すフローチャートである。
【図８】図８は、実施例１に係るサーバ装置における画面情報転送処理の手順を示すフローチャートである。
【図９】図９は、実施例２に係るシンクライアントシステムに含まれる各装置の構成を示す機能ブロック図である。
【図１０】図１０は、実施例２に係るカーソル位置補正の具体例を説明する図である。
【図１１】図１１は、実施例２に係るサーバ装置におけるカーソル位置補正処理の手順を示すフローチャートである。
【図１２】図１２は、実施例３に係るシンクライアントシステムに含まれる各装置の構成を示す機能ブロック図である。
【図１３】図１３は、実施例３に係るカーソル位置補正の具体例を説明する図である。
【図１４】図１４は、実施例３に係るクライアント装置における画面描画処理の手順を示すフローチャートである。
【図１５】図１５は、実施例３に係るサーバ装置におけるカーソル位置補正処理の手順を示すフローチャートである。
【図１６】図１６は、ローカルエコー方式における問題を説明する図である。
【図１７】図１７は、実施例４に係るシンクライアントシステムに含まれる各装置の構成を示す機能ブロック図である。
【図１８】図１８は、実施例４に係るカーソル位置補正の具体例を説明する図である。
【図１９】図１９は、実施例４に係るクライアント装置における入力イベント処理の手順を示すフローチャートである。
【図２０】図２０は、実施例４に係るクライアント装置におけるカーソル移動方向限定処理の手順を示すフローチャートである。
【図２１】図２１は、実施例４に係るサーバ装置におけるカーソル位置補正処理の手順を示すフローチャートである。
【図２２】図２２は、カーソル位置補正プログラムを実行するコンピュータの一例を示す図である。
【図２３】図２３は、マウスカーソルの描画方式であるサーバ描画方式を説明する図である。
【図２４】図２４は、マウスカーソルの描画方式であるローカルエコー方式を説明する図である。
【発明を実施するための形態】
【００１５】
以下に、本願の開示するポインタ位置補正方法、ポインタ位置補正プログラムおよびサーバ装置の実施例を図面に基づいて詳細に説明する。なお、実施例では、ポインタをマウス操作に伴い移動するカーソルとして説明する。また、実施例によりこの発明が限定されるものではない。
【実施例１】
【００１６】
［シンクライアントシステムに含まれる各装置の構成］
図１は、実施例１に係るシンクライアントシステムに含まれる各装置の構成を示す機能ブロック図である。図１に示すシンクライアントシステム９は、クライアント装置１が表示するデスクトップ画面をリモートでサーバ装置２に制御させるものである。つまり、シンクライアントシステム９は、実際にはサーバ装置２が実行した処理結果等をクライアント装置１に表示させつつも、あたかもクライアント装置１が主体となって処理を実行したかのように振る舞う。
【００１７】
図１に示すように、シンクライアントシステム９は、クライアント装置１と、サーバ装置２とを有する。なお、図１の例では、１つのサーバ装置２に対し、１つのクライアント装置１を接続する場合を図示したが、任意の数のクライアント装置１を接続できる。
【００１８】
クライアント装置１およびサーバ装置２は、ネットワーク３を介して相互に通信可能に接続される。かかるネットワークには、有線または無線を問わず、インターネット、ＬＡＮ（Local  Area  Network）やＶＰＮ（Virtual  Private  Network）等の任意の種類の通信網を採用できる。なお、サーバ装置２およびクライアント装置１間の通信プロトコルには、一例として、ＶＮＣにおける画面転送方式を採用する。すなわち、サーバ装置２のデスクトップ画面の内容をビットマップやＪＰＥＧ等の画像でクライアントへ転送し、転送した画像をクライアント装置１のデスクトップ画面へ表示させる。
【００１９】
サーバ装置２は、クライアント装置１に表示させる画面をリモートで制御するサービスを提供するコンピュータである。クライアント装置１は、サーバ装置２によるリモート画面制御サービスの提供を受ける側のコンピュータである。かかるクライアント装置１の一例としては、パーソナルコンピュータ等固定端末のほか、携帯電話機、ＰＨＳ（Personal  Handyphone  System）やＰＤＡ（Personal  Digital  Assistant）等の移動体端末を適用することもできる。
【００２０】
［クライアント装置の構成］
クライアント装置１は、ＯＳ（Operating  System）１０と、入力イベント処理部１１と、画面描画部１２とを有する。ＯＳ１０は、マウスやキーボードからの入力および画面への出力を含む入出力機能等を提供し、クライアント装置１の全体を管理する。かかるＯＳ１０の一例としては、Ｗｉｎｄｏｗｓ（登録商標）であるが、ＵＮＩＸ（登録商標）等の別のＯＳであっても良い。入力イベント処理部１１は、マウスやキーボードの操作により発生する入力イベントを処理する。さらに、入力イベント処理部１１は、入力イベント取得部１１１と、入力イベント送信部１１２と、カーソル描画部１１３とを有する。また、画面描画部１２は、サーバ装置２から受信した、カーソル位置を補正する情報（カーソル位置補正情報）に応じてカーソル位置を補正したりサーバ装置２から受信した画面情報に応じて画面を描画したりする。さらに、画面描画部１２は、カーソル位置補正情報受信部１２１と、カーソル位置補正部１２２と、画面情報受信部１２３と、画像展開処理部１２４と、画面情報描画部１２５とを有する。
【００２１】
入力イベント取得部１１１は、クライアント装置１に接続されたキーボードやマウス等の入出力デバイスから入力イベントを取得する。入力イベントは、例えばマウスの移動操作によりカーソルを移動させるイベントを指す。入力イベントの一例として、「ＭＯＵＳＥ＿ＭＯＶＥ  マウスのＸ座標、マウスのＹ座標、ホイールの移動量」がある。「ＭＯＵＳＥ＿ＭＯＶＥ」は、マウスの操作内容であり、ここではマウスの移動操作を示す。マウスのＸ座標およびマウスのＹ座標は、それぞれマウスの移動先のＸ座標の位置およびＹ座標の位置を示す。ホイールの移動量は、移動にホイールを用いた場合の移動量を示す。具体的な一例として、マウスのＸ座標が８００、マウスのＹ座標が６００、ホイールの移動量が０である「ＭＯＵＳＥ＿ＭＯＶＥ  ８００、６００、０」がある。
【００２２】
また、入力イベント取得部１１１は、取得した入力イベントについて、後述する入力イベント送信部１１２によりサーバ装置２へ送信させるとともに、後述するカーソル描画部１１３によりイベント処理後の位置にマウスカーソルを描画させる。入力イベント送信部１１２は、入力イベント取得部１１１によって取得された入力イベントをサーバ装置２へ送信する。
【００２３】
カーソル描画部１１３は、クライアント装置１のデスクトップ画面へマウスカーソルを再描画する。例えば、カーソル描画部１１３は、入力イベント取得部１１１によって取得された入力イベントに含まれるマウスカーソルの移動先の位置を抽出する。そして、カーソル描画部１１３は、自装置のデスクトップ画面の、抽出したマウスカーソルの位置に当該マウスカーソルを描画する。すなわち、入力イベント処理部１１は、ローカルエコー方式のように、発生した入力イベントをサーバ装置２へ送信するとともに、発生した入力イベントに対応するマウスカーソルを自装置で再描画する。
【００２４】
また、カーソル描画部１１３は、後述するカーソル位置補正部１２２からマウスカーソルの補正位置を取得し、自装置のデスクトップ画面の、取得したマウスカーソルの補正位置に当該マウスカーソルを描画する。
【００２５】
カーソル位置補正情報受信部１２１は、カーソル位置補正情報をサーバ装置２から受信する。ここで、カーソル位置補正情報とは、サーバ装置２によって補正されるカーソルの位置情報である。つまり、サーバ装置２では、クライアント装置１から送信された入力イベントを処理した結果、処理後のマウスカーソルの位置がＯＳによって自動的に変更される場合がある。例えば、ＯＳの操作によっては、自動的に特定のボタンに移動するように設定されているような場合がある。かかる場合に、カーソル位置補正情報受信部１２１は、カーソル位置補正情報をサーバ装置２から受信し、受信したカーソル位置補正情報を用いてカーソル位置を補正させてサーバ装置２のカーソル位置と対応させる。
【００２６】
カーソル位置補正部１２２は、カーソル位置補正情報受信部１２１によって受信されたカーソル位置補正情報からマウスカーソルの補正位置を抽出する。また、カーソル位置補正部１２２は、カーソル描画部１１３によって、抽出したマウスカーソルの補正位置に再描画させる。
【００２７】
画面情報受信部１２３は、サーバ装置２から圧縮後の画面表示データを受信する。画像展開処理部１２４は、画面情報受信部１２３によって受信された圧縮後の画面表示データを展開する。画面情報描画部１２５は、画像展開処理部１２４によって展開された画面表示データを用いて、画面内容を再描画する。なお、実施例では、マウスカーソル以外の画像処理は、画面転送方式に従うため、簡単に記載するものとする。
【００２８】
［サーバ装置の構成］
サーバ装置２は、ＯＳ２０と、入力イベント履歴保持部２１と、入力イベント処理部２２と、カーソル位置補正部２３と、画面情報転送部２４とを有する。ＯＳ２０は、入力イベント等のイベントの処理機能等を提供し、サーバ装置２の全体を管理する。かかるＯＳ２０の一例としては、Ｗｉｎｄｏｗｓ（登録商標）であるが、ＵＮＩＸ（登録商標）等の別のＯＳであっても良い。入力イベント履歴保持部２１は、クライアント装置１から受信した入力イベントのイベント情報をイベント履歴としてキューに保持する。
【００２９】
ここで、入力イベント履歴保持部２１のデータ構造について、図２を参照して説明する。図２は、入力イベント履歴保持部のデータ構造の一例を示す図である。図２に示すように、入力イベント履歴保持部２１は、入力イベント毎にＸ座標２１ａとＹ座標２１ｂとを対応付けて、入力イベントの履歴として保持する。Ｘ座標２１ａは、入力イベントに含まれる移動先のＸ座標の位置である。Ｙ座標２１ｂは、入力イベントに含まれる移動先のＹ座標の位置である。入力イベントの履歴は、クライアント装置１からサーバ装置２へ入力イベントが送信された順に保持される。一例として、一段目に最も古い入力イベントの履歴として、Ｘ座標が「７９７」、Ｙ座標が「６０３」が保持されている。四段目に最も新しい入力イベントの履歴として、Ｘ座標が「８００」、Ｙ座標が「６００」が保持されている。
【００３０】
図１に戻って、入力イベント処理部２２は、クライアント装置１から入力イベントを受信し、受信した入力イベントを処理する。さらに、入力イベント処理部２２は、入力イベント受信部２２１と、入力イベント保存部２２２と、入力イベント実行部２２３とを有する。カーソル位置補正部２３は、入力イベント履歴保持部２１を用いてクライアント装置１のカーソル位置を補正する。さらに、カーソル位置補正部２３は、カーソル位置変更チェック部２３１と、カーソル位置履歴チェック部２３２と、カーソル位置補正情報送信部２３３とを有する。画面情報転送部２４は、画面情報をクライアント装置１に転送する。さらに、画面情報転送部２４は、画面情報取得部２４１と、画面更新判定部２４２と、画像圧縮処理部２４３と、画面情報送信部２４４とを有する。
【００３１】
入力イベント受信部２２１は、クライアント装置１から送信された入力イベントを受信する。入力イベント保存部２２２は、入力イベント受信部２２１によって受信された入力イベントを入力イベントの履歴として入力イベント履歴保持部２１に保存する。
【００３２】
入力イベント実行部２２３は、入力イベント受信部２２１によって受信された入力イベントを実行する。例えば、入力イベント実行部２２３は、入力イベント受信部２２１によって受信された入力イベントをＯＳ２０へ受け渡して処理させる。
【００３３】
カーソル位置変更チェック部２３１は、入力イベント実行部２２３によって入力イベントが実行された結果、実行前後でカーソルの位置に変化があったか否かを判定する。例えば、カーソル位置変更チェック部２３１は、ＯＳ２０に入力イベントを処理させた結果、ＯＳ２０から処理に対応したマウスカーソルの位置を取得する。そして、カーソル位置変更チェック部２３１は、取得したマウスカーソルの位置が入力イベントを処理させる前のマウスカーソルの位置と一致しているか否かを判定する。なお、カーソル位置変更チェック部２３１は、１フレームの画面表示データの更新の都度、例えば後述する画面更新判定部２４２を実施後にチェックするようにする。
【００３４】
カーソル位置履歴チェック部２３２は、実行前後でカーソルの位置に変化があったとカーソル位置変更チェック部２３１によって判定された場合、変化があったカーソルの位置が入力イベント履歴保持部２１に保持されているかどうかをチェックする。例えば、カーソル位置履歴チェック部２３２は、変化があったマウスカーソルの位置が入力イベント履歴保持部２１の入力イベントの履歴として保持されているいずれかの座標位置と一致しているか否かを判定する。
【００３５】
カーソル位置履歴チェック部２３２は、変化があったマウスカーソルの位置が入力イベント履歴保持部２１に保持されていると判定した場合、保持されていると判定した入力イベントの履歴および当該履歴以前の履歴を削除する。すなわち、カーソル位置履歴チェック部２３２は、ＯＳ２０によって処理された結果のマウスカーソルの位置がＯＳ２０によって自動的に変更されていないので、処理された入力イベントの履歴以前の履歴を削除する。一方、カーソル位置履歴チェック部２３２は、変化があったマウスカーソルの位置が入力イベント履歴保持部２１に保持されていないと判定した場合、変化があったマウスカーソルの位置をカーソル位置補正情報送信部２３３に通知する。すなわち、カーソル位置履歴チェック部２３２は、ＯＳ２０によって処理された結果であるマウスカーソルの位置がＯＳ２０によって自動的に変更されたと判断し、変更されたマウスカーソルの位置をカーソル位置補正情報送信部２３３に通知する。
【００３６】
カーソル位置補正情報送信部２３３は、カーソル位置履歴チェック部２３２によって通知されたカーソルの位置を含むカーソル位置補正情報をクライアント装置１に送信する。これによって、ＯＳ２０によって自動的に変更されたマウスカーソルの位置をクライアント装置１に補正させることができる。
【００３７】
画面情報取得部２４１は、ＯＳ２０を介して画面表示データを取得する。画面更新判定部２４２は、画面情報取得部２４１によって、前回取得した画面表示データと今回取得した画面表示データとを比較し、画面表示データに更新があったか否かを判定する。画像圧縮処理部２４３は、画面更新判定部２４２によって画面表示データに更新があったと判定された場合、更新があった領域の画面表示データを圧縮する。画面情報送信部２４４は、画像圧縮処理部２４３によって圧縮された圧縮後の画面表示データをクライアント装置１に送信する。
【００３８】
［カーソル位置補正の具体例］
次に、カーソル位置補正の具体例について、図３を参照して説明する。図３は、実施例１に係るカーソル位置補正の具体例を説明する図である。
【００３９】
図３に示すように、クライアント装置１では、入力イベント取得部１１１が、クライアント装置１に接続されたマウスから入力イベントを取得する（ステップＳ１）。ここでは、入力イベントは、マウスの移動操作によりマウスの移動先が（ｘ２、ｙ２）となるイベントであるものとする。
【００４０】
入力イベント取得部１１１は、取得した入力イベントを入力イベント送信部１１２およびカーソル描画部１１３に引き渡す。そして、入力イベント送信部１１２は、引き渡された入力イベントをサーバ装置２に送信し、カーソル描画部１１３は、引き渡された入力イベントを、ＯＳ１０を介してデスクトップ画面に描画する（ステップＳ２）。ここでは、カーソル描画部１１３は、デスクトップ画面のＰ２にカーソルを描画する。
【００４１】
サーバ装置２では、入力イベント受信部２２１が、クライアント装置１から送信された入力イベントを受信する。そして、入力イベント保存部２２２が、入力イベント受信部２２１によって受信された入力イベントをイベント履歴として保持する。ここでは、入力イベント保存部２２２は、入力イベントに含まれる移動先の座標Ｐ２をイベント履歴として保持する。加えて、入力イベント実行部２２３が、入力イベント受信部２２１によって受信された入力イベントをＯＳ２０に処理させる（ステップＳ３）。
【００４２】
そして、カーソル位置変更チェック部２３１は、ＯＳ２０に処理させた結果であるマウスカーソルの座標を取得する（ステップＳ４）。そして、カーソル位置変更チェック部２３１は、取得したマウスカーソルの座標Ｐ２が処理前のマウスカーソルの座標と一致していない、すなわちマウスカーソルが移動したと判定する。そして、カーソル位置履歴チェック部２３２は、処理後のマウスカーソルの座標Ｐ２が入力イベント履歴として保持されているか否かを判定する（ステップＳ５）。ここでは、処理後のマウスカーソルの座標Ｐ２が入力イベント履歴として保持されているので、座標Ｐ２以前の履歴を削除する（ステップＳ６）。このように例えばマウスの移動先が座標Ｐ２となる入力イベントの場合には、処理後のマウスカーソルの座標Ｐ２がＯＳ２０によって自動的に変更されていないので、クライアント装置１に対して座標の補正をしないで、処理を終了することとなる。この結果、クライアント装置１およびサーバ装置２のそれぞれのマウスカーソルの座標は、Ｐ２に描画されている。
【００４３】
次に、マウスの移動先が座標Ｐ３（ｘ３、ｙ３）となる入力イベントの場合について説明する。クライアント装置１では、入力イベント取得部１１１は、マウスから取得した入力イベントを入力イベント送信部１１２およびカーソル描画部１１３に引き渡す。そして、入力イベント送信部１１２は、引き渡された入力イベントをサーバ装置２に送信し、カーソル描画部１１３は、引き渡された入力イベントを、ＯＳ１０を介してデスクトップ画面に描画する（ステップＳ２）。ここでは、カーソル描画部１１３は、デスクトップ画面のＰ３にカーソルを描画する。
【００４４】
サーバ装置２では、入力イベント受信部２２１が、クライアント装置１から送信された入力イベントを受信する。そして、入力イベント保存部２２２が、入力イベント受信部２２１によって受信された入力イベントをイベント履歴として保持する。ここでは、入力イベント保存部２２２は、入力イベントに含まれる移動先の座標Ｐ３をイベント履歴として保持する。加えて、入力イベント実行部２２３が、入力イベント受信部２２１によって受信された入力イベントをＯＳ２０に処理させる（ステップＳ３）。
【００４５】
そして、カーソル位置変更チェック部２３１は、ＯＳ２０に処理させた後のマウスカーソルの座標を取得する（ステップＳ４）。ここでは、ＯＳ２０によってマウスカーソルの位置が自動的にＰ３からＰ４（ｘ４、ｙ４）に変更したものとする。すると、カーソル位置変更チェック部２３１は、取得したマウスカーソルの座標Ｐ４が処理前のマウスカーソルの座標Ｐ２と一致していないと判定する。そして、カーソル位置履歴チェック部２３２は、処理後のマウスカーソルの座標Ｐ４が入力イベント履歴として保持されているか否かを判定する（ステップＳ５）。ここでは、処理後のマウスカーソルの座標Ｐ４がＯＳ２０によって入力イベントに含まれる移動先の座標Ｐ３から自動的に変更されたので、座標Ｐ４は入力イベント履歴として保持されていない。そこで、カーソル位置履歴チェック部２３２は、変更されたマウスカーソルの座標Ｐ４をカーソル位置補正情報送信部２３３に通知させる（ステップＳ７）。
【００４６】
クライアント装置１では、カーソル位置補正情報受信部１２１が、変更されたマウスカーソルの座標Ｐ４を受信する。そして、カーソル位置補正部１２２は、カーソル描画部１１３によって、変更されたマウスカーソルの座標Ｐ４にマウスカーソルを再描画させる。このように、サーバ装置２がクライアント装置１から送信された入力イベントを処理した結果、処理後のマウスカーソルの座標がＯＳ２０によって自動的に変更されても、変更された座標をクライアント装置１に対応させることができる。
【００４７】
［クライアント装置における入力イベント処理の手順］
次に、クライアント装置１における入力イベント処理の手順について、図４を参照して説明する。図４は、実施例１に係るクライアント装置における入力イベント処理の手順を示すフローチャートである。
【００４８】
まず、入力イベント取得部１１１は、未処理の入力イベントが存在するか否かを判定する（ステップＳ１１）。未処理の入力イベントが存在しないと判定した場合（ステップＳ１１；Ｎｏ）、入力イベント取得部１１１は、未処理の入力イベントが存在すると判定するまで、判定処理を繰り返す。
【００４９】
一方、未処理の入力イベントが存在すると判定した場合（ステップＳ１１；Ｙｅｓ）、入力イベント取得部１１１は、入力イベントを取得する（ステップＳ１２）。そして、カーソル描画部１１３は、入力イベント取得部１１１によって取得された入力イベントに基づいて、自装置のデスクトップ画面へマウスカーソルを再描画する（ステップＳ１３）。例えば、カーソル描画部１１３は、入力イベントに含まれる移動先のマウスカーソルの位置を抽出し、抽出したマウスカーソルの位置に当該マウスカーソルを再描画する。
【００５０】
そして、入力イベント送信部１１２は、入力イベント取得部１１１によって取得された入力イベントをサーバ装置２へ送信する（ステップＳ１４）。そして、入力イベント処理部１１は、次のイベントが発生するのを待つべく、ステップＳ１１に移行する。
【００５１】
［クライアント装置における画面描画処理の手順］
次に、クライアント装置１における画面描画処理の手順について、図５を参照して説明する。図５は、実施例１に係るクライアント装置における画面描画処理の手順を示すフローチャートである。
【００５２】
まず、画面描画部１２は、サーバ装置２から画面転送方式に関するデータを受信したか否かを判定する（ステップＳ２１）。画面転送方式に関するデータを受信していないと判定した場合（ステップＳ２１；Ｎｏ）、画面描画部１２は、画面転送方式に関するデータを受信するまで、判定処理を繰り返す。
【００５３】
画面転送方式に関するデータを受信したと判定した場合（ステップＳ２１；Ｙｅｓ）、カーソル位置補正情報受信部１２１がカーソル位置補正情報を受信したか否かを判定する（ステップＳ２２）。カーソル位置補正情報を受信したと判定した場合（ステップＳ２２；Ｙｅｓ）、カーソル位置補正情報受信部１２１は、カーソル位置補正情報を受信する（ステップＳ２３）。
【００５４】
続いて、カーソル位置補正部１２２は、受信したカーソル位置補正情報から補正位置を抽出し、抽出した補正位置にマウスカーソルの位置を補正する（ステップＳ２４）。そして、カーソル描画部１１３は、補正された位置にマウスカーソルを再描画する（ステップＳ２５）。そして、画面描画部１２は、次の画面転送方式に関するデータを待つべく、ステップＳ２１に移行する。
【００５５】
ステップＳ２２において、カーソル位置補正情報を受信しなかったと判定した場合（ステップＳ２２；Ｎｏ）、画面情報受信部１２３は、画面情報を受信したか否かを判定する（ステップＳ２６）。画面情報を受信したと判定した場合（ステップＳ２６；Ｙｅｓ）、画面情報受信部１２３は、圧縮後の画面表示データを受信する（ステップＳ２７）。
【００５６】
続いて、画像展開処理部１２４は、圧縮後の画面表示データを展開する（ステップＳ２８）。そして、画面情報描画部１２５は、展開して得られた画面表示データを使用してデスクトップ画面を再描画する（ステップＳ２９）。そして、画面描画部１２は、次の画面転送方式に関するデータを待つべく、ステップＳ２１に移行する。
【００５７】
ステップＳ２６において、画面情報を受信しなかったと判定した場合（ステップＳ２６；Ｎｏ）、画面情報受信部１２３は、画面転送方式とは無関係のデータを受信したので、ここでは何もしない（ステップＳ３０）。そして、画面描画部１２は、次の画面転送方式に関するデータを待つべく、ステップＳ２１に移行する。
【００５８】
［サーバ装置における入力イベント処理の手順］
次に、サーバ装置２における入力イベント処理の手順について、図６を参照して説明する。図６は、実施例１に係るサーバ装置における入力イベント処理の手順を示すフローチャートである。
【００５９】
まず、サーバ装置２の入力イベント受信部２２１は、クライアント装置１から入力イベントを受信したか否かを判定する（ステップＳ３１）。入力イベントを受信していないと判定した場合（ステップＳ３１；Ｎｏ）、入力イベント受信部２２１は、入力イベントを受信するまで、判定処理を繰り返す。
【００６０】
一方、入力イベントを受信したと判定した場合（ステップＳ３１；Ｙｅｓ）、入力イベント受信部２２１は、入力イベントを受信する（ステップＳ３２）。そして、入力イベント保存部２２２は、受信した入力イベントを、入力イベントの履歴として入力イベント履歴保持部２１へ保存する（ステップＳ３３）。
【００６１】
続いて、入力イベント実行部２２３は、入力イベントをＯＳ２０へ受け渡してＯＳ２０に処理させる（ステップＳ３４）。そして、入力イベント処理部２２は、次のイベントを受信するのを待つべく、ステップＳ３１に移行する。
【００６２】
［サーバ装置におけるカーソル位置補正処理の手順］
次に、サーバ装置２におけるカーソル位置補正処理の手順について、図７を参照して説明する。図７は、実施例１に係るサーバ装置におけるカーソル位置補正処理の手順を示すフローチャートである。
【００６３】
カーソル位置変更チェック部２３１は、所定の時間経過したか否かを判定する（ステップＳ４１）。所定の時間経過していないと判定した場合（ステップＳ４１；Ｎｏ）、カーソル位置変更チェック部２３１は、所定の時間が経過するまで、判定処理を繰り返す。
【００６４】
一方、所定の時間経過したと判定した場合（ステップＳ４１；Ｙｅｓ）、カーソル位置変更チェック部２３１は、マウスカーソルが移動したかどうかをチェックする（ステップＳ４２）。例えば、カーソル位置変更チェック部２３１は、ＯＳ２０に入力イベントを処理させた結果、ＯＳ２０から処理に対応したマウスカーソルの位置を取得する。そして、カーソル位置変更チェック部２３１は、取得したマウスカーソルの位置が入力イベントを処理させる前のマウスカーソルの位置と一致しているか否かを判定する。ここで、所定の時間とは、例えば１フレームの画面表示データの更新時間を示し、一例として３３ｍｓである。
【００６５】
そして、マウスカーソルが移動していないと判定した場合（ステップＳ４２；Ｎｏ）、カーソル位置補正部２３は、カーソル位置補正処理を終了し、画面情報転送処理に移行する。一方、マウスカーソルが移動したと判定した場合（ステップＳ４２；Ｙｅｓ）、カーソル位置履歴チェック部２３２は、移動後のマウスカーソルの位置に対応する入力イベントが存在するか否かを判定する（ステップＳ４３）。例えば、カーソル位置履歴チェック部２３２は、変化があったマウスカーソルの位置が入力イベント履歴保持部２１の入力イベントの履歴として保持されているいずれかの座標位置と一致しているか否かを判定する。
【００６６】
そして、対応する入力イベントが存在すると判定した場合（ステップＳ４３；Ｙｅｓ）、カーソル位置履歴チェック部２３２は、対応した入力イベントの履歴以前の履歴を削除する（ステップＳ４４）。そして、カーソル位置補正部２３は、カーソル位置補正処理を終了し、画面情報転送処理に移行する。
【００６７】
一方、対応する入力イベントが存在しないと判定した場合（ステップＳ４３；Ｎｏ）、カーソル位置履歴チェック部２３２は、カーソルの位置がＯＳ２０によって自動的に変更されたと判断する。そして、カーソル位置履歴チェック部２３２は、カーソル位置補正情報送信部２３３にカーソル位置補正情報をクライアント装置１へ送信させる（ステップＳ４５）。例えば、カーソル位置補正情報送信部２３３は、変更されたカーソルの位置を含むカーソル位置補正情報をクライアント装置１へ送信する。そして、カーソル位置補正部２３は、カーソル位置補正処理を終了し、画面情報転送処理に移行する。
【００６８】
［サーバ装置における画面情報転送処理の手順］
次に、サーバ装置２における画面情報転送処理の手順について、図８を参照して説明する。図８は、実施例１に係るサーバ装置における画面情報転送処理の手順を示すフローチャートである。
【００６９】
画面情報取得部２４１は、ＯＳ２０を介して画面表示データを取得する（ステップＳ５１）。そして、画面更新判定部２４２は、取得した画面表示データと前回に取得した画面表示データとを比較して、画面更新があったか否かを判定する（ステップＳ５２）。画面更新がなかったと判定した場合（ステップＳ５２；Ｎｏ）、画面情報転送部２４は、カーソル位置補正処理に移行すべく、ステップＳ４１に遷移する。
【００７０】
一方、画面更新があったと判定した場合（ステップＳ５２；Ｙｅｓ）、画像圧縮処理部２４３は、更新があった領域の画面表示データを圧縮する（ステップＳ５３）。そして、画面情報送信部２４４は、圧縮済みの画面表示データをクライアント装置１へ送信する（ステップＳ５４）。そして、画面情報転送部２４は、カーソル位置補正処理に移行すべく、ステップＳ４１に遷移する。
【００７１】
［実施例１の効果］
上記実施例１によれば、シンクライアントシステム９のサーバ装置２は、クライアント装置１から受信した、マウスカーソルの移動を伴う入力イベントについて、移動後のカーソルの位置を含むイベント情報を入力イベント履歴保持部２１に保存する。そして、サーバ装置２は、入力イベントに基づいて処理した結果、処理前後でカーソルの位置に変化があったとき、変化があったカーソルの位置が入力イベント履歴保持部２１に保持されているいずれかのカーソルの位置と一致しているか否かを判定する。そして、サーバ装置２は、判定の結果、変化があったカーソルの位置が入力イベント履歴保持部２１に保持されているいずれかのカーソルの位置とも一致していない場合に、変化があったカーソルの位置をクライアント装置１に通知する。かかる構成によれば、サーバ装置２は、クライアント装置１から受信した入力イベントに基づく処理により処理前後で変化があったカーソルの位置が処理によって自動的に移動してしまう場合であっても、移動後のカーソルの位置をクライアント装置１に対応させることができる。
【００７２】
また、上記実施例１によれば、サーバ装置２が、判定の結果、変化があったカーソルの位置が入力イベント履歴保持部２１に保持されているいずれかのカーソルの位置と一致した場合に、一致したカーソルの位置に係るイベント以前のイベント情報を削除する。かかる構成によれば、サーバ装置２は、入力イベントに関する次回の処理で、入力イベント履歴保持部２１に保持されているカーソルの位置との比較回数を減らすことができるので、処理効率を上げることができる。
【実施例２】
【００７３】
ところで、実施例１に係るサーバ装置２では、入力イベントの処理前後で変化があったマウスカーソルの位置が入力イベント履歴保持部２１に保持されていると判定した場合、保持されていると判定した入力イベントの履歴以前の履歴を削除する場合を説明した。しかしながら、サーバ装置２は、変化があったマウスカーソルの位置が入力イベント履歴保持部２１に保持されていると判定した場合、履歴を削除する前に保持されているキューの長さが長い場合には画面転送方式の処理間隔を調整するようにしても良い。
【００７４】
つまり、サーバ装置２では、画面転送方式における処理負荷が高くなる場合がある。かかる場合には、サーバ装置２は、クライアント装置１から送信された入力イベントの処理時間が長くなり、入力イベント履歴保持部２１に保持される入力イベントのキュー長が長くなることがある。このため、サーバ装置２は、キュー長が閾値より大きい場合には画面転送方式の処理間隔を調整して、処理負荷を低減するようにしても良い。
【００７５】
そこで、実施例２では、入力イベント履歴保持部２１に保持される入力イベントのキュー長が閾値より大きい場合には画面転送方式の処理間隔を調整するサーバ装置２について説明する。
【００７６】
［シンクライアントシステムに含まれる各装置の構成］
図９は、実施例２に係るシンクライアントシステムに含まれる各装置の構成を示す機能ブロック図である。なお、図１に示すシンクライアントシステム９と同一の構成については同一符号を示すことで、その重複する構成および動作の説明については省略する。実施例１と実施例２とが異なるところは、サーバ装置２Ａのカーソル位置補正部２３に入力イベント履歴保持数チェック部３０１を追加した点にある。
【００７７】
カーソル位置履歴チェック部２３２は、入力イベントの実行前後でカーソルの位置に変化があったカーソルの位置が入力イベント履歴保持部２１に保持されているかどうかをチェックする。
【００７８】
入力イベント履歴保持数チェック部３０１は、変化があったマウスカーソルの位置が入力イベント履歴保持部２１に保持されている場合、入力イベント履歴保持部２１に保持されている入力イベントのキュー長が閾値以上であるか否かを判定する。例えば、入力イベント履歴保持数チェック部３０１は、入力イベント履歴保持部２１に保持されている入力イベントの履歴の中で変化があったマウスカーソルの位置と一致した座標位置に関する入力イベント以前の入力イベントの数を数える。また、入力イベント履歴保持数チェック部３０１は、数えた入力イベントの数が閾値よりも大きいか否かを判定する。そして、入力イベント履歴保持数チェック部３０１は、数えた入力イベントの数が閾値よりも大きいと判定した場合には、処理負荷が高いと判断し、画面転送方式の処理間隔を現在の処理間隔より大きくする。一方、入力イベント履歴保持数チェック部３０１は、数えた入力イベントの数が閾値以下であると判定した場合には、処理負荷が低いと判断し、画面転送方式の処理間隔を現在の処理間隔より小さくするか、現在の処理間隔のままにする。そして、入力イベント履歴保持数チェック部３０１は、一致した座標位置に関する入力イベントの履歴以前の履歴を削除する。
【００７９】
なお、入力イベントの数と比較する閾値は、例えば３であるが、ＣＰＵの処理性能に応じて変更すれば良く、処理負荷が高くなると判定される値であれば良い。また、画面転送方式の処理間隔とは、画面の更新間隔（更新頻度）を指す。すなわち、カーソル位置変更チェック部２３１が、マウスカーソルが移動したか否かをチェックする時間間隔である所定の時間と一致する。つまり、画面転送方式の処理間隔が大きくなれば、所定の時間も大きくなり、画面転送方式の処理間隔が小さくなれば、所定の時間も小さくなる。
【００８０】
［カーソル位置補正の具体例］
次に、カーソル位置補正の具体例について、図１０を参照して説明する。図１０は、実施例２に係るカーソル位置補正の具体例を説明する図である。
【００８１】
図１０に示すように、クライアント装置１Ａでは、入力イベント取得部１１１が、クライアント装置１に接続されたマウスから入力イベントを取得する（ステップＳ１）。ここでは、入力イベントは、マウスの移動操作によりマウスの移動先が時系列に（ｘ１、ｙ１）、（ｘ２、ｙ２）および（ｘ３、ｙ３）と移動する３つのイベントとする。
【００８２】
入力イベント取得部１１１は、各入力イベントを時系列に取得し、取得した都度、取得した入力イベントを入力イベント送信部１１２およびカーソル描画部１１３に引き渡す。そして、入力イベント送信部１１２は、引き渡された各入力イベントをサーバ装置２Ａに送信し、カーソル描画部１１３は、引き渡された各入力イベントを、ＯＳ１０を介してデスクトップ画面に描画する（ステップＳ２）。ここでは、カーソル描画部１１３は、デスクトップ画面のＰ１にカーソルを描画した後、引き続きＰ２およびＰ３にカーソルを描画する。
【００８３】
サーバ装置２Ａでは、入力イベント受信部２２１が、クライアント装置１Ａから送信された各入力イベントを時系列に受信する。そして、入力イベント保存部２２２が、入力イベント受信部２２１によって受信された各入力イベントをイベント履歴として保持する。ここでは、入力イベント保存部２２２は、各入力イベントに含まれる移動先の座標Ｐ１、Ｐ２およびＰ３をイベント履歴として保持する。加えて、入力イベント実行部２２３が、入力イベント受信部２２１によって受信された各入力イベントをＯＳ２０に処理させる（ステップＳ３）。
【００８４】
そして、カーソル位置変更チェック部２３１は、ＯＳ２０に処理させた結果であるマウスカーソルの座標を取得する（ステップＳ４）。そして、カーソル位置変更チェック部２３１は、取得したマウスカーソルの座標Ｐ１が処理前のマウスカーソルの座標と一致していない、すなわちマウスカーソルが移動したと判定する。そして、カーソル位置履歴チェック部２３２は、処理後のマウスカーソルの座標Ｐ１が入力イベント履歴として保持されているか否かを判定する。ここでは、処理後のマウスカーソルの座標Ｐ１が入力イベント履歴として保持されていると判定される。そこで、入力イベント履歴保持数チェック部３０１は、入力イベント履歴の中で対応する入力イベント以前のキュー長をチェックし、キュー長が閾値よりも大きいか否かを判定する（ステップＳ５Ａ）。ここでは、Ｐ１に対応する入力イベント以前の入力イベント（Ｐ１、Ｐｘ、Ｐｙ、Ｐｚに対応）が４個あるので、キュー長が４となる。閾値を３とした場合、キュー長（４）が閾値（３）よりも大きいと判定される。
【００８５】
そして、入力イベント履歴保持数チェック部３０１は、キュー長が閾値よりも大きいと判定したので、処理負荷が高いと判断し、画面転送方式の処理間隔を大きくする。そして、入力イベント履歴保持数チェック部３０１は、処理後のマウスカーソルの座標Ｐ１に関する入力イベントの履歴以前の履歴を削除する（ステップＳ６）。ここでは、Ｐ１、Ｐｘ、Ｐｙ、Ｐｚに関する入力イベントの履歴が削除される。そして、引き続き、画面情報転送部２４の処理が実行される。このように、サーバ装置２Ａは、入力イベント履歴のキュー長が長い場合には処理負荷が高いと判断し、画面転送方式の処理間隔を大きくするようにして処理負荷を低減することで、操作性を向上させることができる。
【００８６】
［サーバ装置におけるカーソル位置補正処理の手順］
次に、サーバ装置２Ａにおけるカーソル位置補正処理の手順について、図１１を参照して説明する。図１１は、実施例２に係るサーバ装置におけるカーソル位置補正処理の手順を示すフローチャートである。なお、図７に示す実施例１に係るサーバ装置におけるカーソル位置補正処理と同一の処理については同一符号を示す。
【００８７】
カーソル位置変更チェック部２３１は、所定の時間経過したか否かを判定する（ステップＳ４１）。所定の時間経過していないと判定した場合（ステップＳ４１；Ｎｏ）、カーソル位置変更チェック部２３１は、所定の時間が経過するまで、判定処理を繰り返す。
【００８８】
一方、所定の時間経過したと判定した場合（ステップＳ４１；Ｙｅｓ）、カーソル位置変更チェック部２３１は、マウスカーソルが移動したかどうかをチェックする（ステップＳ４２）。例えば、カーソル位置変更チェック部２３１は、ＯＳ２０に入力イベントを処理させた結果、ＯＳ２０から処理に対応したマウスカーソルの位置を取得する。そして、カーソル位置変更チェック部２３１は、取得したマウスカーソルの位置が入力イベントを処理させる前のマウスカーソルの位置と一致しているか否かを判定する（ステップＳ４２）。ここで、所定の時間とは、例えば１フレームの画面表示データの更新時間を示す。
【００８９】
そして、マウスカーソルが移動していないと判定した場合（ステップＳ４２；Ｎｏ）、カーソル位置補正部２３は、カーソル位置補正処理を終了し、画面情報転送処理に移行する。一方、マウスカーソルが移動したと判定した場合（ステップＳ４２；Ｙｅｓ）、カーソル位置履歴チェック部２３２は、移動後のマウスカーソルの位置に対応する入力イベントが存在するか否かを判定する（ステップＳ４３）。例えば、カーソル位置履歴チェック部２３２は、変化があったマウスカーソルの位置が入力イベント履歴保持部２１の入力イベントの履歴として保持されているいずれかの座標位置と一致しているか否かを判定する。
【００９０】
そして、対応する入力イベントが存在すると判定した場合（ステップＳ４３；Ｙｅｓ）、入力イベント履歴保持数チェック部３０１は、対応する入力イベント以前の入力イベントの数（キュー長）を数える（ステップＳ４０１）。例えば、入力イベント履歴保持数チェック部３０１は、入力イベント履歴保持部２１に保持されている入力イベントの履歴の中で変化があったマウスカーソルの位置と一致した座標位置に関する入力イベント以前の入力イベントの数を数える。
【００９１】
そして、入力イベント履歴保持数チェック部３０１は、キュー長が閾値よりも大きいか否かを判定する（ステップＳ４０２）。キュー長が閾値よりも大きいと判定した場合（ステップＳ４０２；Ｙｅｓ）、入力イベント履歴保持数チェック部３０１は、処理負荷が高いと判断し、画面転送方式の処理間隔を大きくする（ステップＳ４０３）。
【００９２】
一方、キュー長が閾値以下であると判定した場合（ステップＳ４０２；Ｎｏ）、入力イベント履歴保持数チェック部３０１は、処理負荷が低いと判断し、画面転送方式の処理間隔を小さくする（ステップＳ４０４）。そして、入力イベント履歴保持数チェック部３０１は、対応した入力イベントの履歴以前の履歴を削除する（ステップＳ４４）。そして、カーソル位置補正部２３は、カーソル位置補正処理を終了し、画面情報転送処理に移行する。
【００９３】
ステップＳ４３に戻って、対応する入力イベントが存在しないと判定した場合（ステップＳ４３；Ｎｏ）、カーソル位置履歴チェック部２３２は、カーソルの位置がＯＳ２０によって自動的に変更されたと判断する。そして、カーソル位置履歴チェック部２３２は、カーソル位置補正情報送信部２３３にカーソル位置補正情報をクライアント装置１Ａへ送信させる（ステップＳ４５）。例えば、カーソル位置補正情報送信部２３３は、変更されたカーソルの位置を含むカーソル位置補正情報をクライアント装置１Ａへ送信する。そして、カーソル位置補正部２３は、カーソル位置補正処理を終了し、画面情報転送処理に移行する。
【００９４】
［実施例２の効果］
上記実施例２によれば、シンクライアントシステム９のサーバ装置２Ａは、クライアント装置１Ａから受信した、マウスカーソルの移動を伴う入力イベントについて、移動後のカーソルの位置を含むイベント情報を入力イベント履歴保持部２１に保存する。そして、サーバ装置２Ａは、入力イベントに基づいて処理した結果、処理前後でカーソルの位置に変化があったとき、変化があったカーソルの位置が入力イベント履歴保持部２１に保持されているいずれかのカーソルの位置と一致しているか否かを判定する。そして、サーバ装置２Ａは、判定の結果、変化があったカーソルの位置が入力イベント履歴保持部２１に保持されているいずれかのカーソルの位置と一致した場合に、一致したカーソルの位置に係るイベント以前のイベントの数が閾値より大きいか否かを判定する。そして、サーバ装置２Ａは、一致したカーソルの位置に係るイベント以前のイベントの数が閾値より大きいと判定した場合、画面転送方式の処理間隔を現在の処理間隔より大きくする。かかる構成によれば、サーバ装置２Ａは、入力イベント履歴保持部２１に保持されている該当するイベントの数が閾値より大きい場合には、カーソルの位置の移動を伴う入力イベント処理の間隔が長くなっているので、自装置の処理負荷が高いと想定される。このため、サーバ装置２は、画面転送方式の処理間隔を大きくすることで、処理負荷を低減することができる。この結果、サーバ装置２Ａは、シンクライアントシステム９の操作性を向上させることができる。
【実施例３】
【００９５】
ところで、実施例１に係るサーバ装置２では、入力イベントの処理でマウスカーソルが自動的に移動した場合、自動的に移動したマウスカーソルの位置をクライアント装置１に送信する場合を説明した。しかしながら、サーバ装置２は、これに限定されず、マウスカーソルが自動的に移動した場合、自動的に移動したマウスカーソルの位置と形状とをクライアント装置１に送信するようにしても良い。これは、マウスカーソルの位置が自動的に移動した場合に、移動後の位置によってはマウスカーソルの形状も変化する場合があるためである。
【００９６】
そこで、実施例３では、マウスカーソルが自動的に移動した場合、自動的に移動したマウスカーソルの位置と形状とをクライアント装置１に送信するサーバ装置２について説明する。
【００９７】
［シンクライアントシステムに含まれる各装置の構成］
図１２は、実施例３に係るシンクライアントシステムに含まれる各装置の構成を示す機能ブロック図である。なお、図１に示すシンクライアントシステム９と同一の構成については同一符号を示すことで、その重複する構成および動作の説明については省略する。実施例１と実施例３とが異なるところは、サーバ装置２Ｂのカーソル位置補正部２３にカーソル形状チェック部４０１およびカーソル形状補正情報送信部４０２を追加した点にある。また、実施例１と実施例３とが異なるところは、クライアント装置１Ｂの画面描画部１２にカーソル形状補正情報受信部４０３およびカーソル形状補正部４０４を追加した点にある。
【００９８】
カーソル位置履歴チェック部２３２は、入力イベントの実行前後でカーソルの位置に変化があったカーソルの位置が入力イベント履歴保持部２１に保持されているかどうかをチェックする。
【００９９】
カーソル形状チェック部４０１は、変化があったマウスカーソルの位置が入力イベント履歴保持部２１に保持されていない場合、さらにマウスカーソルの形状が変化したか否かをチェックする。例えば、カーソル形状チェック部４０１は、ＯＳ２０を用いて、マウスカーソルの形状が変化したか否かを判定する。そして、カーソル形状チェック部４０１は、マウスカーソルの形状が変化した場合、変化後のマウスカーソルの形状をカーソル形状補正情報送信部４０２に通知する。すなわち、カーソル形状チェック部４０１は、ＯＳ２０によって自動的に変更されたマウスカーソルの位置に伴い形状も変化した場合に、変化した形状をカーソル形状補正情報送信部４０２に通知する。
【０１００】
カーソル形状補正情報送信部４０２は、カーソル形状チェック部４０１によって通知されたカーソルの形状を含むカーソル形状補正情報をクライアント装置１Ｂに送信する。これによって、サーバ装置２Ｂは、ＯＳ２０によって自動的に変更されたマウスカーソルの位置に伴い変化したマウスカーソルの形状をクライアント装置１Ｂに補正させることができる。
【０１０１】
カーソル形状補正情報受信部４０３は、カーソル形状情報をサーバ装置２Ｂから受信する。ここで、カーソル形状補正情報とは、サーバ装置２Ｂによって補正されるカーソルの形状情報である。つまり、サーバ装置２Ｂでは、クライアント装置１Ｂから送信された入力イベントを処理した結果、処理後のマウスカーソルの位置および形状がＯＳ２０によって自動的に変更される場合がある。かかる場合に、カーソル形状補正情報受信部４０３は、カーソル形状補正情報をサーバ装置２Ｂから受信し、受信したカーソル形状補正情報を用いてカーソルの形状を補正させてサーバ装置２Ｂのカーソルの形状と対応させる。
【０１０２】
カーソル形状補正部４０４は、カーソル形状補正情報受信部４０３によって受信されたカーソル形状補正情報からマウスカーソルの補正形状を抽出する。また、カーソル形状補正部４０４は、カーソル描画部１１３に、抽出した補正形状のマウスカーソルを再描画させる。
【０１０３】
［カーソル位置補正の具体例］
次に、カーソル位置補正の具体例について、図１３を参照して説明する。図１３は、実施例３に係るカーソル位置補正の具体例を説明する図である。なお、図１３では、サーバ装置２Ｂは、マウスの移動操作によりマウスの表示位置が移動する入力イベントをクライアント装置１Ｂから受信する。そして、入力イベントの中でＰ１およびＰ２に移動先が移動する各入力イベントについて、処理後のカーソルの位置がＯＳ２０によって自動的に移動しない例とする。さらに、入力イベントの中でＰ２からＰ３に移動先が移動する入力イベントについて、処理後のカーソルの位置がＯＳ２０によってＰ３からＰ４に自動的に移動するとともにカーソルの形状も矢印形状から三角形状に変化する例とする。以降では、Ｐ２からＰ３に移動先が移動する入力イベントの場合について説明する。
【０１０４】
図１３に示すように、クライアント装置１Ｂでは、入力イベント取得部１１１が、クライアント装置１Ｂに接続されたマウスから入力イベントを取得する（ステップＳ１）。ここでは、入力イベント取得部１１１は、マウスの移動操作によりマウスの移動先が（ｘ３、ｙ３）となる入力イベントを取得する。
【０１０５】
入力イベント取得部１１１は、取得した入力イベントを入力イベント送信部１１２およびカーソル描画部１１３に引き渡す。そして、入力イベント送信部１１２は、引き渡された入力イベントをサーバ装置２Ｂに送信し、カーソル描画部１１３は、引き渡された入力イベントを、ＯＳ１０を介してデスクトップ画面に描画する（ステップＳ２）。ここでは、カーソル描画部１１３は、デスクトップ画面のＰ３にカーソルを描画する。
【０１０６】
サーバ装置２Ｂでは、入力イベント受信部２２１が、クライアント装置１Ｂから送信された入力イベントを受信する。そして、入力イベント保存部２２２が、入力イベント受信部２２１によって受信された入力イベントをイベント履歴として保持する。ここでは、入力イベント保存部２２２は、入力イベントに含まれる移動先の座標Ｐ３をイベント履歴として保持する。加えて、入力イベント実行部２２３が、入力イベント受信部２２１によって受信された入力イベントをＯＳ２０に処理させる（ステップＳ３）。
【０１０７】
そして、カーソル位置変更チェック部２３１は、ＯＳ２０に処理させた後のマウスカーソルの座標を取得する（ステップＳ４）。ここでは、ＯＳ２０によってマウスカーソルの位置が自動的にＰ３からＰ４（ｘ４、ｙ４）に変更する。すると、カーソル位置変更チェック部２３１は、変更された座標Ｐ４が処理前のマウスカーソルの座標Ｐ２と一致していないと判定する。そこで、カーソル位置履歴チェック部２３２は、処理後のマウスカーソルの座標Ｐ４が入力イベント履歴として保持されているか否かを判定する（ステップＳ５）。ここでは、処理後のマウスカーソルの座標Ｐ４がＯＳ２０によって座標Ｐ３から自動的に変更されたので、入力イベント履歴として保持されていない。そこで、カーソル位置履歴チェック部２３２は、変更されたマウスカーソルの座標Ｐ４をカーソル位置補正情報送信部２３３に通知させる（ステップＳ７）。
【０１０８】
さらに、カーソル形状チェック部４０１は、マウスカーソルの形状が変化したか否かを、ＯＳ２０を用いて判定する。ここでは、処理後のマウスカーソルの形状が矢印形状から三角形状に変化している。そこで、カーソル形状チェック部４０１は、変化したマウスカーソルの三角形状をカーソル形状補正情報送信部４０２に通知させる（ステップＳ８）。
【０１０９】
クライアント装置１Ｂでは、カーソル位置補正情報受信部１２１が、変更されたマウスカーソルの座標Ｐ４を受信する。そして、カーソル位置補正部１２２は、カーソル描画部１１３によって、変更されたマウスカーソルの座標Ｐ４にマウスカーソルを再描画させる。続いて、カーソル形状補正情報受信部４０３が、変化したマウスカーソルの形状を受信する。そして、カーソル形状補正部４０４は、カーソル描画部１１３によって、変化したマウスカーソルを再描画させる。
【０１１０】
このように、サーバ装置２Ｂがクライアント装置１Ｂから送信された入力イベントを処理した結果、処理後のマウスカーソルの形状が変化した場合であっても、変化したマウスカーソルの形状をクライアント装置１Ｂに対応させることができる。
【０１１１】
［クライアント装置における画面描画処理の手順］
次に、クライアント装置１Ｂにおける画面描画処理の手順について、図１４を参照して説明する。図１４は、実施例３に係るクライアント装置における画面描画処理の手順を示すフローチャートである。なお、図５に示す実施例１に係るサーバ装置における画面描画処理と同一の処理については同一符号を示す。
【０１１２】
まず、画面描画部１２は、サーバ装置２から画面転送方式に関するデータを受信したか否かを判定する（ステップＳ２１）。画面転送方式に関するデータを受信していないと判定した場合（ステップＳ２１；Ｎｏ）、画面描画部１２は、画面転送方式に関するデータを受信するまで、判定処理を繰り返す。
【０１１３】
画面転送方式に関するデータを受信したと判定した場合（ステップＳ２１；Ｙｅｓ）、カーソル位置補正情報受信部１２１がカーソル位置補正情報を受信したか否かを判定する（ステップＳ２２）。カーソル位置補正情報を受信したと判定した場合（ステップＳ２２；Ｙｅｓ）、カーソル位置補正情報受信部１２１は、カーソル位置補正情報を受信する（ステップＳ２３）。
【０１１４】
続いて、カーソル位置補正部１２２は、受信したカーソル位置補正情報から補正位置を抽出し、抽出した補正位置にマウスカーソルの位置を補正する（ステップＳ２４）。そして、カーソル描画部１１３は、補正された位置にマウスカーソルを再描画する（ステップＳ２５）。そして、画面描画部１２は、次の画面転送方式に関するデータを待つべく、ステップＳ２１に移行する。
【０１１５】
ステップＳ２２において、カーソル位置補正情報を受信しなかったと判定した場合（ステップＳ２２；Ｎｏ）、カーソル形状補正情報受信部４０３がカーソル形状補正情報を受信したか否かを判定する（ステップＳ６１）。カーソル形状補正情報を受信したと判定した場合（ステップＳ６１；Ｙｅｓ）、カーソル形状補正情報受信部４０３は、カーソル形状補正情報を受信する（ステップＳ６２）。
【０１１６】
続いて、カーソル形状補正部４０４は、受信したカーソル形状補正情報から補正形状を抽出し、抽出した補正形状にマウスカーソルの形状を補正する（ステップＳ６３）。そして、画面描画部１２は、次の画面転送方式に関するデータを待つべく、ステップＳ２１に移行する。
【０１１７】
ステップＳ６１において、カーソル形状補正情報を受信しなかったと判定した場合（ステップＳ６１；Ｎｏ）、画面情報受信部１２３は、画面情報を受信したか否かを判定する（ステップＳ２６）。画面情報を受信したと判定した場合（ステップＳ２６；Ｙｅｓ）、画面情報受信部１２３は、圧縮後の画面表示データを受信する（ステップＳ２７）。
【０１１８】
続いて、画像展開処理部１２４は、圧縮後の画面表示データを展開する（ステップＳ２８）。そして、画面情報描画部１２５は、展開して得られた画面表示データを使用してデスクトップ画面を再描画する（ステップＳ２９）。そして、画面描画部１２は、次の画面転送方式に関するデータを待つべく、ステップＳ２１に移行する。
【０１１９】
ステップＳ２６において、画面情報を受信しなかったと判定した場合（ステップＳ２６；Ｎｏ）、画面情報受信部１２３は、画面転送方式とは無関係のデータを受信したので、ここでは何もしない（ステップＳ３０）。そして、画面描画部１２は、次の画面転送方式に関するデータを待つべく、ステップＳ２１に移行する。
【０１２０】
［サーバ装置におけるカーソル位置補正処理の手順］
次に、サーバ装置２Ｂにおけるカーソル位置補正処理の手順について、図１５を参照して説明する。図１５は、実施例３に係るサーバ装置におけるカーソル位置補正処理の手順を示すフローチャートである。なお、図７に示す実施例１に係るサーバ装置におけるカーソル位置補正処理と同一の処理については同一符号を示す。
【０１２１】
カーソル位置変更チェック部２３１は、所定の時間経過したか否かを判定する（ステップＳ４１）。所定の時間経過していないと判定した場合（ステップＳ４１；Ｎｏ）、カーソル位置変更チェック部２３１は、所定の時間が経過するまで、判定処理を繰り返す。
【０１２２】
一方、所定の時間経過したと判定した場合（ステップＳ４１；Ｙｅｓ）、カーソル位置変更チェック部２３１は、マウスカーソルが移動したかどうかをチェックする（ステップＳ４２）。例えば、カーソル位置変更チェック部２３１は、ＯＳ２０に入力イベントを処理させた結果、ＯＳ２０から処理に対応したマウスカーソルの位置を取得する。そして、カーソル位置変更チェック部２３１は、取得したマウスカーソルの位置が入力イベントを処理させる前のマウスカーソルの位置と一致しているか否かを判定する。ここで、所定の時間とは、例えば１フレームの画面表示データの更新時間を示す。
【０１２３】
そして、マウスカーソルが移動していないと判定した場合（ステップＳ４２；Ｎｏ）、カーソル位置補正部２３は、カーソル位置補正処理を終了し、画面情報転送処理に移行する。一方、マウスカーソルが移動したと判定した場合（ステップＳ４２；Ｙｅｓ）、カーソル位置履歴チェック部２３２は、移動後のマウスカーソルの位置に対応する入力イベントが存在するか否かを判定する（ステップＳ４３）。例えば、カーソル位置履歴チェック部２３２は、変化があったマウスカーソルの位置が入力イベント履歴保持部２１の入力イベントの履歴として保持されているいずれかの座標位置と一致しているか否かを判定する。
【０１２４】
そして、対応する入力イベントが存在すると判定した場合（ステップＳ４３；Ｙｅｓ）、カーソル位置履歴チェック部２３２は、対応した入力イベントの履歴以前の履歴を削除する（ステップＳ４４）。そして、カーソル位置補正部２３は、カーソル位置補正処理を終了し、画面情報転送処理に移行する。
【０１２５】
一方、対応する入力イベントが存在しないと判定した場合（ステップＳ４３；Ｎｏ）、カーソル位置履歴チェック部２３２は、カーソルの位置がＯＳ２０によって自動的に変更されたと判断する。そして、カーソル位置履歴チェック部２３２は、カーソル位置補正情報送信部２３３にカーソル位置補正情報をクライアント装置１へ送信させる（ステップＳ４５）。例えば、カーソル位置補正情報送信部２３３は、変更されたカーソルの位置を含むカーソル位置補正情報をクライアント装置１へ送信する。
【０１２６】
続いて、カーソル形状チェック部４０１は、マウスカーソルの形状が変化したか否かを判定する。マウスカーソルの形状が変化していないと判定した場合（ステップＳ７１；Ｎｏ）、カーソル形状チェック部４０１は、カーソル位置補正処理を終了し、画面情報転送処理に移行する。
【０１２７】
一方、マウスカーソルの形状が変化したと判定した場合（ステップＳ７１；Ｙｅｓ）、カーソル形状補正情報送信部４０２は、カーソル形状補正情報送信部４０２にカーソル形状補正情報をクライアント装置１Ｂへ送信させる（ステップＳ７２）。例えば、カーソル形状補正情報送信部４０２は、変化後のカーソルの形状を含むカーソル形状補正情報をクライアント装置１Ｂへ送信する。そして、カーソル位置補正部２３は、カーソル位置補正処理を終了し、画面情報転送処理に移行する。
【０１２８】
［実施例３の効果］
上記実施例３によれば、シンクライアントシステム９のサーバ装置２Ｂは、マウスカーソルの移動を伴う入力イベントをクライアント装置１Ｂから受信する。そして、サーバ装置２Ｂは、受信した入力イベントについて移動後のカーソルの位置を含むイベント情報を入力イベント履歴保持部２１に保存する。そして、サーバ装置２Ｂは、入力イベントに基づいて処理した結果、処理前後でカーソルの位置に変化があったとき、変化があったカーソルの位置が入力イベント履歴保持部２１に保持されているいずれかのカーソルの位置と一致しているか否かを判定する。そして、サーバ装置２Ｂは、判定の結果、変化があったカーソルの位置が入力イベント履歴保持部２１に保持されているいずれかのカーソルの位置とも一致していない場合に、変化があったカーソルの位置をクライアント装置１Ｂに通知する。さらに、サーバ装置２Ｂは、入力イベントに基づいて処理した結果、処理前後でカーソルの形状に変化があったとき、変化があったカーソルの形状をクライアント装置１Ｂに通知する。かかる構成によれば、サーバ装置２Ｂは、クライアント装置１Ｂから受信した入力イベントに基づく処理により処理前後でカーソルの形状に変化があった場合であっても、変化後のカーソルの形状をクライアント装置１Ｂに対応させることができる。
【実施例４】
【０１２９】
ところで、実施例１に係るサーバ装置２では、入力イベントの処理でマウスカーソルが自動的に移動した場合、自動的に移動したマウスカーソルの位置をクライアント装置１に補正する場合を説明した。しかしながら、サーバ装置２では、マウスカーソルの移動領域が制限される場合がある。かかる場合に、クライアント装置１では、ローカルエコー方式で描画するマウスカーソルの位置がサーバ装置２で移動が制限された領域内であると、サーバ装置２から補正される位置を再描画すると、移動軌跡が不自然になる。
【０１３０】
このローカルエコー方式における問題について、図１６を参照して説明する。図１６は、ローカルエコー方式における問題を説明する図である。図１６に示すように、サーバ装置２Ｃのデスクトップ画面の領域Ｇ１について、マウスカーソルの移動が制限されている。すなわち、サーバ装置２Ｃのデスクトップ画面では、制限領域Ｇ１以外の領域Ｇ２について、マウスカーソルの移動が許可されている。このような状況下で、クライアント装置１Ｃ側では、制限領域Ｇ１に対応する領域Ｇ１´方向に移動する入力イベントが繰り返し発生するとする。すると、サーバ装置２Ｃ側は、クライアント装置１Ｃ側で発生した入力イベントを受信する都度、制限領域Ｇ１と許可領域Ｇ２との境界にカーソル位置を補正することになり、補正したカーソル位置をクライアント装置１Ｃに送信することになる。そうすると、クライアント装置１Ｃ側では、入力イベントが発生した時点でローカルエコーによりカーソルを一旦描画しても、サーバ装置２Ｃから送信される、補正されたカーソル位置を再描画するので、マウスカーソルの移動軌跡が不自然となってしまう。図１６の例では、サーバ装置２Ｃ側では、マウスカーソルの移動軌跡が制限領域Ｇ１と許可領域Ｇ２との境界のＸ軸方向（横方向）のみとなっている。一方、クライアント装置１Ｃ側では、マウスカーソルの移動軌跡が上下方向にぎざぎざとなり、不自然な軌跡となっている。
【０１３１】
そこで、実施例４では、サーバ装置２Ｃでマウスカーソルの移動領域が制限される場合であっても、クライアント装置１Ｃのマウスカーソルの移動軌跡が不自然になることを防止するサーバ装置２Ｃについて説明する。
【０１３２】
［シンクライアントシステムに含まれる各装置の構成］
図１７は、実施例４に係るシンクライアントシステムに含まれる各装置の構成を示す機能ブロック図である。なお、図１に示すシンクライアントシステム９と同一の構成については同一符号を示すことで、その重複する構成および動作の説明については省略する。実施例１と実施例４とが異なるところは、サーバ装置２Ｃのカーソル位置補正部２３にカーソル移動方向判定部５０１およびカーソル移動方向通知部５０２を追加した点にある。また、実施例１と実施例４とが異なるところは、クライアント装置１Ｃの入力イベント処理部１１にカーソル移動方向限定処理部５０を追加し、カーソル移動方向限定処理部５０にカーソル移動方向受信部５０３を追加した点にある。さらに、実施例１と実施例４とが異なるところは、クライアント装置１の入力イベント処理部１１にカーソル移動方向限定部５０４を追加した点にある。
【０１３３】
カーソル位置変更チェック部２３１は、入力イベント実行部２２３によって入力イベントが実行された結果、実行前後でカーソルの位置に変化があったか否かを判定する。
【０１３４】
カーソル移動方向判定部５０１は、実行前後でカーソルの位置に変化があった場合に、マウスカーソルの移動方向を判定する。カーソル移動方向判定部５０１は、マウスカーソルの移動方向がＸ軸方向のみに移動したと判定した場合、Ｘ軸方向をカーソル移動の限定方向と決定する。また、カーソル移動方向判定部５０１は、マウスカーソルの移動方向がＹ軸方向のみに移動したと判定した場合、Ｙ軸方向をカーソル移動の限定方向と決定する。
【０１３５】
カーソル移動方向通知部５０２は、カーソル移動方向判定部５０１によって決定されたカーソル移動の限定方向をクライアント装置１Ｃに通知する。
【０１３６】
カーソル位置履歴チェック部２３２は、実行前後で変化があったカーソルの位置が入力イベント履歴保持部２１に保持されているかどうかをチェックする。ここで、カーソル位置履歴チェック部２３２は、カーソル移動の限定方向が決定されている場合には、決定された限定方向のみでチェックする。例えば、カーソル位置履歴チェック部２３２は、カーソル移動の限定方向がＸ軸方向である場合、変化があったマウスカーソルのＸ軸の座標が入力イベント履歴保持部２１のいずれかのＸ軸の座標と一致しているか否かを判定する。
【０１３７】
カーソル位置履歴チェック部２３２は、変化があったカーソルの位置が入力イベント履歴保持部２１に保持されていると判定した場合、保持されていると判定した入力イベントの履歴以前の履歴を削除する。一方、カーソル位置履歴チェック部２３２は、変化があったマウスカーソルの位置が入力イベント履歴保持部２１に保持されていないと判定した場合、変化があったマウスカーソルの位置をカーソル位置補正情報送信部２３３に通知する。
【０１３８】
カーソル移動方向受信部５０３は、カーソル移動の限定方向をサーバ装置２Ｃから受信する。カーソル移動方向限定部５０４は、自装置側でのマウスカーソルの移動方向を、カーソル移動方向受信部５０３によって受信されたカーソル移動の限定方向に限定する。
【０１３９】
［カーソル位置補正の具体例］
次に、カーソル位置補正の具体例について、図１８を参照して説明する。図１８は、実施例４に係るカーソル位置補正の具体例を説明する図である。なお、サーバ装置２Ｃのデスクトップ画面において、マウスカーソルの移動可能な領域が、Ｙ軸の座標位置「１００」以上（ここでは下方向）の場合とする。すなわち、図１８の例では、クライアント装置１Ｃのデスクトップ画面において、マウスカーソルがＹ軸の座標位置「１００」未満（ここでは上方向）に移動すると、Ｙ軸の座標位置「１００」に補正されるものとする。
【０１４０】
図１８に示すように、クライアント装置１Ｃは、マウスの移動先を図示しないＰ１´（２０５、９５）とした入力イベントを取得したとき、ローカルエコーを行った後に、サーバ装置２ＣによりＹ軸の値が補正された補正位置Ｐ１（２０５、１００）に再描画する。
【０１４１】
次に、入力イベント取得部１１１は、マウスの移動先をＰ２（２１０、１００）とした入力イベントを取得する（ステップＳ１）。入力イベント取得部１１１は、取得した入力イベントを入力イベント送信部１１２およびカーソル移動方向限定部５０４に引き渡す。そして、カーソル移動方向限定部５０４は、マウスカーソルの移動方向が限定されている場合は、引き渡された入力イベントについてマウスカーソルの移動方向を限定する。そして、カーソル描画部１１３は直前の座標から限定された移動方向のみに移動させた座標でローカルエコーを行う。一方、カーソル移動方向限定部５０４は、マウスカーソルの移動方向が限定されていない場合は、カーソル描画部１１３を介して入力イベントの座標にカーソルを描画する。それと同時に、入力イベント送信部１１２は、引き渡された入力イベントをそのままサーバ装置２Ｃに送信する（ステップＳ２Ｃ）。ここでは、マウスカーソルの移動方向が限定されていないので、カーソル描画部１１３は、Ｐ２（２１０、１００）の位置にそのままカーソルを描画する。
【０１４２】
サーバ装置２では、入力イベント受信部２２１が、クライアント装置１Ｃから送信された入力イベントを受信する。そして、入力イベント保存部２２２が、入力イベント受信部２２１によって受信された入力イベントをイベント履歴として保持する。ここでは、入力イベント保存部２２２は、入力イベントに含まれる移動先の座標Ｐ２をイベント履歴として保持する。加えて、入力イベント実行部２２３が、入力イベント受信部２２１によって受信された入力イベントをＯＳ２０に処理させる（ステップＳ３）。
【０１４３】
そして、カーソル位置変更チェック部２３１は、ＯＳ２０に処理させた結果であるマウスカーソルの座標を取得する（ステップＳ４）。そして、カーソル移動方向判定部５０１は、取得したマウスカーソルの座標が処理前のマウスカーソルの座標と一致していない、すなわちマウスカーソルが移動したので、マウスカーソル移動の限定方向を決定する（ステップＳ５Ｃ）。ここでは、カーソル移動方向判定部５０１は、前回の座標が（２０５、１００）、今回の座標が（２１０、１００）であるのでＸ軸方向をカーソル移動の限定方向と決定する。そこで、カーソル移動方向判定部５０１は、カーソル移動方向通知部５０２を介して、カーソル移動の限定方向（Ｘ軸）をクライアント装置１Ｃに通知する（ステップＳ６Ｃ）。
【０１４４】
そして、カーソル位置履歴チェック部２３２は、処理後のマウスカーソルの座標Ｐ２が入力イベント履歴として保持されているか否かを、決定されたカーソル移動の限定方向を用いて判定する（ステップＳ７Ｃ）。ここでは、決定されたカーソル移動の限定方向がＸ軸方向であるので、処理後のマウスカーソルの座標Ｐ２のうちＸ軸の座標値「２１０」が入力イベント履歴として保持されているので、座標Ｐ２以前の履歴を削除する（ステップＳ８Ｃ）。このようにマウスの移動先が座標Ｐ２となる入力イベントの場合には、処理後のマウスカーソルの座標Ｐ２がＯＳ２０によって自動的に変更されていないので、クライアント装置１Ｃに対して座標の補正をしないで、処理を終了することとなる。なお、カーソル位置履歴チェック部２３２は、処理後のマウスカーソルの座標のうちカーソル移動の限定方向の座標値が入力イベント履歴として保持されていない場合、処理後のマウスカーソルの座標をクライアント装置１Ｃに送信する（ステップＳ９Ｃ）。
【０１４５】
クライアント装置１Ｃでは、入力イベント取得部１１１は、次の入力イベントを取得する（ステップＳ１）。ここでは、マウスの移動先が、例えばＰ３´（２１５、９５）となる入力イベントを取得するものとする。入力イベント取得部１１１は、取得した入力イベントを入力イベント送信部１１２およびカーソル移動方向限定部５０４に引き渡す。そして、カーソル移動方向限定部５０４は、マウスカーソルの移動方向がＸ軸方向に限定されているので、引き渡された入力イベントについてマウスカーソルの移動方向であるＸ軸方向を限定する。そして、カーソル描画部１１３は直前の座標Ｐ２から限定されたＸ軸方向のみに移動させた座標Ｐ３（２１５、１００）でローカルエコーを行う。それと同時に、入力イベント送信部１１２は、引き渡された入力イベントをそのままサーバ装置２Ｃに送信する（ステップＳ２Ｃ）。
【０１４６】
以降、サーバ装置２Ｃおよびクライアント装置１Ｃでは、クライアント装置１Ｃ側で発生した入力イベントについて、引き続き処理が行われる。このようにして、サーバ装置２Ｃ側でマウスカーソルの移動領域が制限された場合であっても、サーバ装置２Ｃは、クライアント装置１Ｃのマウスカーソルの移動軌跡が不自然になることを防止できる。
【０１４７】
［クライアント装置における入力イベント処理の手順］
次に、クライアント装置１Ｃにおける入力イベント処理の手順について、図１９を参照して説明する。図１９は、実施例４に係るクライアント装置における入力イベント処理の手順を示すフローチャートである。なお、図４に示す実施例１に係るクライアント装置における入力イベント処理と同一の処理については同一符号を示す。
【０１４８】
まず、入力イベント取得部１１１は、未処理の入力イベントが存在するか否かを判定する（ステップＳ１１）。未処理の入力イベントが存在しないと判定した場合（ステップＳ１１；Ｎｏ）、入力イベント取得部１１１は、未処理の入力イベントが存在すると判定するまで、判定処理を繰り返す。一方、未処理の入力イベントが存在すると判定した場合（ステップＳ１１；Ｙｅｓ）、入力イベント取得部１１１は、入力イベントを取得する（ステップＳ１２）。
【０１４９】
続いて、カーソル移動方向限定部５０４は、マウスカーソルの移動方向を限定しているか否かを判定する（ステップＳ８１）。マウスカーソルの移動方向を限定していると判定した場合（ステップＳ８１；Ｙｅｓ）、カーソル移動方向限定部５０４は、限定中の移動方向と入力イベントからマウスカーソルの座標を算出する（ステップＳ８２）。一方、マウスカーソルの移動方向を限定していないと判定した場合（ステップＳ８１；Ｎｏ）、カーソル移動方向限定部５０４は、入力イベントからマウスカーソルの座標を抽出する（ステップＳ８３）。
【０１５０】
そして、カーソル描画部１１３は、算出または抽出したマウスカーソルの座標に基づいて、自装置のデスクトップ画面へマウスカーソルを再描画する（ステップＳ１３）。
【０１５１】
そして、入力イベント送信部１１２は、入力イベント取得部１１１によって取得された入力イベントをそのままサーバ装置２へ送信する（ステップＳ１４）。そして、入力イベント処理部１１は、次のイベントが発生するのを待つべく、ステップＳ１１に移行する。
【０１５２】
［クライアント装置におけるカーソル移動方向限定処理の手順］
次に、クライアント装置１Ｃにおけるカーソル移動方向限定処理の手順について、図２０を参照して説明する。図２０は、実施例４に係るクライアント装置におけるカーソル移動方向限定処理の手順を示すフローチャートである。
【０１５３】
まず、カーソル移動方向受信部５０３は、カーソル移動方向に関する通知をサーバ装置２Ｃから受信したか否かを判定する（ステップＳ９１）。カーソル移動方向に関する通知を受信していないと判定した場合（ステップＳ９１；Ｎｏ）、カーソル移動方向受信部５０３は、当該通知を受信するまで、判定処理を繰り返す。
【０１５４】
一方、カーソル移動方向に関する通知を受信したと判定した場合（ステップＳ９１；Ｙｅｓ）、カーソル移動方向受信部５０３は、マウスカーソルの移動方向に関する通知を受信する（ステップＳ９２）。
【０１５５】
ここで、カーソル移動方向受信部５０３が、マウスカーソル移動の限定方向に関する通知を受信したか否かを判定する（ステップＳ９３）。マウスカーソル移動の限定方向通知を受信したと判定した場合（ステップＳ９３；Ｙｅｓ）、カーソル移動方向限定部５０４は、クライアント側でのマウスカーソルの移動方向を限定するように制御する（ステップＳ９４）。そして、カーソル移動方向限定処理部５０は、次のカーソル移動方向に関する通知を待つべく、ステップＳ９１に移行する。
【０１５６】
一方、マウスカーソル移動の限定方向に関する通知を受信していないと判定した場合（ステップＳ９３；Ｎｏ）、カーソル移動方向受信部５０３は、マウスカーソル移動の限定解除通知を受信したか否かを判定する（ステップＳ９５）。マウスカーソル移動の限定解除通知を受信していないと判定した場合（ステップＳ９５；Ｎｏ）、カーソル移動方向限定処理部５０は、次のカーソル移動方向に関する通知を待つべく、ステップＳ９１に移行する。
【０１５７】
一方、マウスカーソル移動の限定解除通知を受信したと判定した場合（ステップＳ９５；Ｙｅｓ）、カーソル移動方向限定部５０４は、クライアント側でのマウスカーソルの移動方向を限定しないように制御する（ステップＳ９６）。そして、カーソル移動方向限定処理部５０は、次のカーソル移動方向に関する通知を待つべく、ステップＳ９１に移行する。
【０１５８】
［サーバ装置におけるカーソル位置補正処理の手順］
次に、サーバ装置２Ｃにおけるカーソル位置補正処理の手順について、図２１を参照して説明する。図２１は、実施例４に係るサーバ装置におけるカーソル位置補正処理の手順を示すフローチャートである。なお、図７に示す実施例１に係るサーバ装置におけるカーソル位置補正処理と同一の処理については同一符号を示す。
【０１５９】
カーソル位置変更チェック部２３１は、所定の時間経過したか否かを判定する（ステップＳ４１）。所定の時間経過していないと判定した場合（ステップＳ４１；Ｎｏ）、カーソル位置変更チェック部２３１は、所定の時間が経過するまで、判定処理を繰り返す。
【０１６０】
一方、所定の時間経過したと判定した場合（ステップＳ４１；Ｙｅｓ）、カーソル位置変更チェック部２３１は、マウスカーソルが移動したかどうかをチェックする（ステップＳ４２）。
【０１６１】
そして、マウスカーソルが移動していないと判定した場合（ステップＳ４２；Ｎｏ）、カーソル位置補正部２３は、カーソル位置補正処理を終了し、画面情報転送処理に移行する。一方、マウスカーソルが移動したと判定した場合（ステップＳ４２；Ｙｅｓ）、カーソル移動方向判定部５０１は、マウスカーソルが移動した方向を判定する（ステップＳ１０１）。ここで、カーソル移動方向判定部５０１は、マウスカーソルがＸ軸方向のみに移動したか否かを判定する（ステップＳ１０２）。
【０１６２】
マウスカーソルがＸ軸方向のみに移動したと判定した場合（ステップＳ１０２；Ｙｅｓ）、カーソル移動方向判定部５０１は、１回以上マウスカーソル移動の限定方向（Ｘ軸方向）を通知済みであるか否かを判定する（ステップＳ１０３）。１回以上通知済みであると判定した場合（ステップＳ１０３；Ｙｅｓ）、カーソル移動方向判定部５０１は、通知は不要と判断し、ステップＳ１１０に移行する。一方、１回以上通知済みでないと判定した場合（ステップＳ１０３；Ｎｏ）、カーソル移動方向通知部５０２は、Ｘ軸方向をカーソル移動の限定方向としてクライアント装置１Ｃへ通知し（ステップＳ１０４）、ステップＳ１１０に移行する。
【０１６３】
一方、マウスカーソルがＸ軸方向のみに移動していないと判定した場合（ステップＳ１０２；Ｎｏ）、カーソル移動方向判定部５０１は、マウスカーソルがＹ軸方向のみに移動したか否かを判定する（ステップＳ１０５）。
【０１６４】
マウスカーソルがＹ軸方向のみに移動したと判定した場合（ステップＳ１０５；Ｙｅｓ）、カーソル移動方向判定部５０１は、１回以上マウスカーソル移動の限定方向（Ｙ軸方向）を通知済みであるか否かを判定する（ステップＳ１０６）。１回以上通知済みであると判定した場合（ステップＳ１０６；Ｙｅｓ）、カーソル移動方向判定部５０１は、通知は不要と判断し、ステップＳ１１０に移行する。一方、１回以上通知済みでないと判定した場合（ステップＳ１０６；Ｎｏ）、カーソル移動方向通知部５０２は、Ｙ軸方向をカーソル移動の限定方向としてクライアント装置１Ｃへ通知し（ステップＳ１０７）、ステップＳ１１０に移行する。
【０１６５】
一方、マウスカーソルがＹ軸方向のみに移動していないと判定した場合（ステップＳ１０５；Ｎｏ）、カーソル移動方向判定部５０１は、マウスカーソルの移動方向の限定解除を通知したか否かを判定する（ステップＳ１０８）。マウスカーソルの移動方向の限定解除を通知したと判定した場合（ステップＳ１０８；Ｙｅｓ）、カーソル移動方向判定部５０１は、通知は不要と判断し、ステップＳ１１０に移行する。一方、マウスカーソルの移動方向の限定解除を通知していないと判定した場合（ステップＳ１０８；Ｎｏ）、カーソル移動方向通知部５０２は、カーソル移動の限定解除をクライアント装置１Ｃへ通知し（ステップＳ１０９）、ステップＳ１１０に移行する。
【０１６６】
カーソル位置履歴チェック部２３２は、移動後のマウスカーソルの位置に対応する入力イベントが存在するか否かを判定する（ステップＳ１１０）。例えば、カーソル位置履歴チェック部２３２は、変化があったマウスカーソルの位置が入力イベント履歴保持部２１の入力イベントの履歴として保持されているいずれかの座標位置と一致しているか否かを判定する。このとき、カーソル位置履歴チェック部２３２は、カーソル移動方向が限定中である場合には、限定されている座標軸方向の座標値のみをチェックすれば良い。
【０１６７】
そして、対応する入力イベントが存在すると判定した場合（ステップＳ１１０；Ｙｅｓ）、カーソル位置履歴チェック部２３２は、対応した入力イベントの履歴以前の履歴を削除する（ステップＳ４４）。そして、カーソル位置補正部２３は、カーソル位置補正処理を終了し、画面情報転送処理に移行する。
【０１６８】
一方、対応する入力イベントが存在しないと判定した場合（ステップＳ１１０；Ｎｏ）、カーソル位置履歴チェック部２３２は、カーソルの位置がＯＳ２０によって自動的に変更されたと判断する。そして、カーソル位置履歴チェック部２３２は、カーソル位置補正情報送信部２３３にカーソル位置補正情報をクライアント装置１Ｃへ送信させる（ステップＳ４５）。そして、カーソル位置補正部２３は、カーソル位置補正処理を終了し、画面情報転送処理に移行する。
【０１６９】
［実施例４の効果］
上記実施例４によれば、シンクライアントシステム９のサーバ装置２Ｃは、入力イベントに基づいて処理した結果、処理前後でカーソルの位置に変化があったとき、処理前後のカーソルの位置が１つの軸方向のみに変化があったか否かを判定する。そして、サーバ装置２Ｃは、１つの軸方向のみに変化があったと判定した場合、変化があった軸方向について変化があったカーソルの位置が入力イベント履歴保持部２１に保持されているいずれかのカーソルの位置と一致しているか否かを判定する。かかる構成によれば、サーバ装置２Ｃは、入力イベント履歴保持部２１に保持されているカーソルの位置との比較に変化があった軸方向についてのカーソルの位置を用いることにより比較処理のコストを低減することができる。
【０１７０】
また、サーバ装置２Ｃは、１つの軸方向のみに変化があったと判定した場合、変化があった軸方向にカーソルの移動を限定する旨をクライアント装置１Ｃに通知する。かかる構成によれば、サーバ装置２Ｃは、仮にカーソルの移動領域が制限されている場合であっても、クライアント装置１Ｃにおけるカーソルの移動軌跡を自然な動きとなるように制御できる。
【０１７１】
［プログラムなど］
なお、実施例１〜４では、入力イベントの処理前後でカーソルの位置がＯＳ２０によって自動的に変更された場合について説明した。しかしながら、これに限定されず、ＯＳ２０に代えてドライバとしても良いし、アプリケーションソフトとしても良く、入力イベントの処理前後でカーソルの位置が自動的に変更されるソフトウェアまたはハードウェアであれば良い。
【０１７２】
また、サーバ装置２は、既知のパーソナルコンピュータ、ワークステーションなどの情報処理装置に、上記した入力イベント処理部２２と、カーソル位置補正部２３と、画面情報転送部２４等の各機能を搭載することによって実現することができる。また、クライアント装置１は、既知のパーソナルコンピュータ、ワークステーションなどの情報処理装置に、上記した入力イベント処理部１１と、画面描画部１２等の各機能を搭載することによって実現することができる。
【０１７３】
また、図示した各装置の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的態様は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、カーソル位置変更チェック部２３１とカーソル位置履歴チェック部２３２とを１個の部として統合しても良い。一方、カーソル位置履歴チェック部２３２を、カーソルの位置が履歴に保持されているか否かを判定するする判定部と、保持されている場合に履歴を削除する削除部等とに分散しても良い。また、入力イベント履歴保持部２１等の記憶部をサーバ装置２の外部装置としてネットワーク経由で接続するようにしても良い。
【０１７４】
また、上記実施例で説明した各種の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。そこで、以下では、図１に示したサーバ装置２と同様の機能を実現するカーソル位置補正プログラムを実行するコンピュータの一例を説明する。図２２は、カーソル位置補正プログラムを実行するコンピュータの一例を示す図である。
【０１７５】
図２２に示すように、コンピュータ２００は、各種演算処理を実行するＣＰＵ２０１と、ユーザからのデータの入力を受け付ける入力装置２０２と、ディスプレイ２０３を有する。また、コンピュータ２００は、記憶媒体からプログラム等を読取る読み取り装置２０４と、ネットワークを介して他のコンピュータとの間でデータの授受を行うインタフェース装置２０５とを有する。また、コンピュータ２００は、各種情報を一時記憶するＲＡＭ２０６と、ハードディスク装置２０７を有する。そして、各装置２０１〜２０７は、バス２０８に接続される。
【０１７６】
ハードディスク装置２０７は、カーソル位置補正プログラム２０７ａ、カーソル位置補正関連情報２０７ｂを記憶する。ＣＰＵ２０１は、カーソル位置補正プログラム２０７ａを読み出して、ＲＡＭ２０６に展開する。カーソル位置補正プログラム２０７ａは、カーソル位置補正プロセス２０６ａとして機能する。
【０１７７】
例えば、カーソル位置補正プロセス２０６ａは、入力イベント処理部２２、カーソル位置補正部２３および画面情報転送部２４に対応する。カーソル位置補正関連情報２０７ｂは、入力イベント履歴保持部２１に対応する。
【０１７８】
なお、カーソル位置補正プログラム２０７ａについては、必ずしも最初からハードディスク装置２０７に記憶させておかなくても良い。例えば、コンピュータ２００に挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」に当該プログラムを記憶させておく。そして、コンピュータ２００がこれらからカーソル位置補正プログラム２０７ａを読み出して実行するようにしても良い。
【符号の説明】
【０１７９】
１  クライアント装置
１０、２０  ＯＳ
１１  入力イベント処理部
１２  画面描画部
１１１  入力イベント取得部
１１２  入力イベント送信部
１１３  カーソル描画部
１２１  カーソル位置補正情報受信部
１２２  カーソル位置補正部
１２３  画面情報受信部
１２４  画像展開処理部
１２５  画面情報描画部
２  サーバ装置
２１  入力イベント履歴保持部
２２  入力イベント処理部
２３  カーソル位置補正部
２４  画面情報転送部
２２１  入力イベント受信部
２２２  入力イベント保存部
２２３  入力イベント実行部
２３１  カーソル位置変更チェック部
２３２  カーソル位置履歴チェック部
２３３  カーソル位置補正情報送信部
２４１  画面情報取得部
２４２  画面更新判定部
２４３  画像圧縮処理部
２４４  画面情報送信部
【図１】
0005737082.tif 000002
【図２】
0005737082.tif 000003
【図３】
0005737082.tif 000004
【図４】
0005737082.tif 000005
【図５】
0005737082.tif 000006
【図６】
0005737082.tif 000007
【図７】
0005737082.tif 000008
【図８】
0005737082.tif 000009
【図９】
0005737082.tif 000010
【図１０】
0005737082.tif 000011
【図１１】
0005737082.tif 000012
【図１２】
0005737082.tif 000013
【図１３】
0005737082.tif 000014
【図１４】
0005737082.tif 000015
【図１５】
0005737082.tif 000016
【図１６】
0005737082.tif 000017
【図１７】
0005737082.tif 000018
【図１８】
0005737082.tif 000019
【図１９】
0005737082.tif 000020
【図２０】
0005737082.tif 000021
【図２１】
0005737082.tif 000022
【図２２】
0005737082.tif 000023
【図２３】
0005737082.tif 000024
【図２４】
0005737082.tif 000025