(57)【要約】  【課題】  ＧＵＩイベントを記録し、記録したイベントの以降の再生のためにイベントの目標ＧＵＩ構成要素を永続的に識別するための方法、コンピュータ・プログラム、およびデータ処理システムを提供すること。  【解決手段】  本発明の好ましい実施形態によれば、はっきりと定義した順序で、構成要素階層を横断することにより各ＧＵＩ構成要素に数値識別子が割り当てられる。横断中、ＧＵＩ構成要素がアクセスされると、構成要素がアクセスされた順序により構成要素に順次的に番号が付けられる。イベントを受信した場合には、イベントの目標構成要素に対応する番号と一緒にイベントが記録される。ＧＵＩプログラムが次回実行されると、同じ順序で構成要素階層が再度横断され、これにより構成要素に識別番号が同様に割り当てられる。それ故、番号により識別したその対応する目標構成要素に各イベントを適用することにより、記録したイベントを再生することができる。【選択図】      図１
2007172602.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータにより実施される方法であって、
グラフィカル・ユーザ・インタフェースの構成要素階層内の複数の構成要素に、前記構成要素階層の順序的横断に従って識別子を割り当てるステップと、
イベントを検出するステップと、
前記イベントに関連する目標構成要素における対応する識別子とともに、前記イベントを記録するステップと
を含む方法。
【請求項２】
前記構成要素階層の前記順序的横断が深さ方向優先の横断である、請求項１に記載の方法。
【請求項３】
前記識別子が数値識別子である、請求項１に記載の方法。
【請求項４】
前記イベントが、先行イベント後に経過した時間の長さに対応する遅延時間と一緒に記録される、請求項１に記載の方法。
【請求項５】
前記イベントが永続記憶装置に記録される、請求項１に記載の方法。
【請求項６】
前記目標構成要素についての前記記録されたイベントを再度生成することにより前記記録されたイベントを再生するステップであって、前記目標構成要素が前記記録された識別子により識別されることを特徴とする、ステップをさらに含む、請求項１に記載の方法。
【請求項７】
前記構成要素階層を修正して、修正した階層を入手するステップと、
前記修正した階層の順序的横断に従って前記複数の構成要素に新しい識別子を割り当てるステップと
をさらに含む、請求項１に記載の方法。
【請求項８】
前記新しい識別子内へのマッピングを定義する関連データ構造を生成するステップをさらに含む、請求項７に記載の方法。
【請求項９】
前記構成要素階層に更なる構成要素を追加するステップと、
前記更なる構成要素の追加に応じて、前記更なる構成要素に次の識別子を割り当てるステップであって、前記次の識別子はすでに割り当てられた最後の識別子の後に連続して続くことを特徴とする、ステップとをさらに含む、請求項１に記載の方法。
【請求項１０】
コンピュータ読み取り可能媒体内のコンピュータ・プログラムであって、コンピュータにより実行した場合に、前記コンピュータに、
グラフィカル・ユーザ・インタフェースの構成要素階層内の複数の構成要素に、前記構成要素階層の順序的横断に従って識別子を割り当てるステップと、
イベントを検出するステップと、
前記イベントに関連する目標構成要素における対応する識別子とともに、前記イベントを記録するステップと
を実行させるコンピュータ・プログラム。
【請求項１１】
データ処理システムであって、
少なくとも１つのプロセッサと、
前記少なくとも１つのプロセッサに関連する記憶装置と、
前記記憶装置内の一組の命令であって、前記少なくとも１つのプロセッサに、
グラフィカル・ユーザ・インタフェースの構成要素階層内の複数の構成要素に、前記構成要素階層の順序的横断に従って識別子を割り当てるステップと、
イベントを検出するステップと、
前記イベントに関連する目標構成要素における対応する識別子とともに、前記イベントを記録するステップと
を実行させる一組の命令と
を含む、データ処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、オブジェクト指向型グラフィカル・ユーザ・インタフェース（ＧＵＩ）の分野に関する。より詳細には、本発明は、イベント駆動オブジェクト指向型グラフィカル・ユーザ・インタフェース（ＧＵＩ）内でイベントを記録および再生するための方法、コンピュータ・プログラムおよびデータ処理システムを提供する。
【背景技術】
【０００２】
最も初期の対話式コンピュータは、人間のオペレータと対話型通信を行うためにテレタイプライタ（ＴＴＹ）またはテキスト端末に依存していた。これらの初期のタイプの人とコンピュータとの相互作用（ＨＣＩ）は、テキスト・ベースまたは文字ベースの情報交換しかできなかった。多くのコンピュータ・ソフトウェア製品は、今日、グラフィカル・ユーザ・インタフェース、すなわちＧＵＩ（通常、「ｇｏｏｅｙ」のように発音する）を使用している。ＧＵＩは、テキストまたは文字の他に画像または他の視覚表現を使用する人とコンピュータとの相互作用の視覚手段である。
【０００３】
大部分のＧＵＩは、ユーザのディスプレイ上に表示され、ユーザの入力により作動する視覚制御装置を使用する。典型的な視覚制御装置は、ボタン、（テキストを入力するための）テキスト・フィールド、ラジオ・ボタン、チェックボックス、選択ボックスおよびメニュー・バーを含むが、含むことができるものはこれらに限定されない。典型的なＧＵＩにおいては、ディスプレイの周囲でカーソルを移動し、視覚制御装置を作動するために、マウスのようなポインティング・デバイスが使用される。ＧＵＩは、通常、表示のためのラベルおよびアイコンのような静的表示構成要素も使用するが、通常それ自身入力機能を持たない。しかし、場合によっては、これらの静的表示構成要素は、これらの構成要素が、ディスプレイ上の他のフィーチャに対してディスプレイ上で移動している場合には、入力の役割を果たすことができる（例えば、ファイルを削除するために、あるファイルのアイコンをごみ箱のアイコンにドラッグする場合）。
【０００４】
多くのＧＵＩは、「窓掛け（ｗｉｎｄｏｗｉｎｇ）」インタフェースと呼ばれる。何故なら、これらのＧＵＩは、「デスクトップ」と呼ばれるバックグラウンド上に重畳しているパネルまたは「ウィンドウ」の形で、ディスプレイ上に情報を視覚的に配置するからである。多くのシステムの場合、ウィンドウは、ポインティング・デバイスにより、ディスプレイ上の他の位置にドラッグすることもできるし、拡大したり、縮小したり、他のウィンドウに重畳させることができる。通常、ウィンドウは、ウィンドウ内の制御装置を作動することにより、ユーザがコンピュータ・プログラムと相互作用をすることができるようにするために多数の視覚制御装置を含む。ユーザからの何らかの入力が必要な場合には、「ダイアログ・ボックス」と呼ばれる特種な形のウィンドウがプログラムにより表示される。
【０００５】
ウィンドウ、視覚制御装置、および静的表示構成要素は、ＧＵＩ構成要素と呼ばれる。何故なら、ＧＵＩ構成要素は、ＧＵＩを構成している構成ブロックであるからである。ウィンドウのようないくつかのＧＵＩ構成要素は、「コンテナ構成要素」（または単に「コンテナ」）と呼ばれる。何故なら、このような構成要素は、他の構成要素を含むことができるからである。例えば、ウィンドウは、ボタンまたはメニュー・バーのような視覚制御装置、およびテキスト・ラベルまたはアイコンのような静的表示構成要素を含むことができる。コンテナは、また、他のコンテナを含むことができる。例えば、あるウィンドウ・ベースのワード・プロセッサの場合には、ワード・プロセッサ自身が（主）ウィンドウ内に位置していて、一方、編集中の各ファイルは主ウィンドウ内の他のウィンドウ内に位置する。
【０００６】
コンテナ構成要素はウィンドウを含むが、また、目に見えるものであってもよいし、目に見えないものであってもよい他の構成要素を含むことができる。例えば、カリフォルニア州マウンテンビュー所在のＳｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓ社が開発したＪＡＶＡ（ＴＭ）プログラミング言語は、ウィンドウおよびダイアログ・ボックスのような目に見える種々のコンテナ構成要素、および多数の内蔵構成要素を１つのユニットにまとめるためだけに使用する「ｊａｖａ．ａｗｔ．Ｐａｎｅｌ」コンテナ構成要素のような目に見えないコンテナ構成要素を定義している。コンテナのいくつかの例としては、ウィンドウ、ダイアログ・ボックス、パネル、タブ付きパネル、ノートブック・ページ、および１つまたは複数の他のＧＵＩ構成要素を含むことができる任意の他のＧＵＩ構成要素等があるが、これらに限定されない。
【０００７】
構成要素の表示、または構成要素に対するユーザ入力（例えば、ポインティング・デバイスによる構成要素へのポインティングまたは構成要素上でのクリックから）の検出のようなＧＵＩ構成要素上で基本的動作を供給するための実際の機能は、多くの場合、オペレーティング・システムのようなシステム・レベルのソフトウェアにより提供される。通常、アプリケーションは、ＧＵＩを生成し、維持するためにシステム・レベルのソフトウェアへの呼出しを行い、一方、システム・レベルのソフトウェアは、特定のＧＵＩ構成要素に対するユーザ入力イベントを検出し、イベント通知をこれらのＧＵＩ構成要素を担当しているアプリケーションに送る。
【０００８】
例えば、ワシントン州レドモンド所在のＭｉｃｒｏｓｏｆｔ社が開発したＷＩＮＤＯＷＳ（Ｒ）オペレーティング・システムは、ＧＵＩの生成のためのサービスを提供し、ユーザ入力イベントを適当なアプリケーションに中継する。ＷＩＮＤＯＷＳ（Ｒ）オペレーティング・システム自身のための主インタフェースもＧＵＩである。他の環境の場合には、ＧＵＩサービスを提供するために、（例えば、デーモン（ｄａｅｍｏｎ）またはバックグラウンド処理として）オペレーティング・システム・カーネルのトップ上で、もっと高いレベルのシステム・ソフトウェアが動作することができる。例えば、「Ｘ１１」は、オペレーティング・システムでプロセスとして動作するオープン・ソースＧＵＩエンジンである。Ｘ１１は、Ｘ１１サーバ・プロセスが、ＧＵＩサービスを提供するためにアプリケーション（クライアント）から要求を受け入れ、これらの構成要素に関連するアプリケーションへの特定のＧＵＩ構成要素に関係するユーザ入力イベントを中継するクライアント−サーバ・モデルを採用している。
【０００９】
別の方法としては、アプリケーションは、ＧＵＩサービスを提供するためのそれ自身のコードを含むことができる。通常、このコードは、基本的なＧＵＩ動作を行うための再利用可能なコード・ライブラリの形をしている。
【００１０】
多くの現代のプログラミング言語実施は、通常、システム・レベルのソフトウェアが提供するＧＵＩサービスへのインタフェースを提供することにより、またはプログラミング言語でのインタフェースが提供される低いレベルのＧＵＩコードのライブラリを内蔵することにより、ＧＵＩを生成するための内蔵機能を有する。例えば、ＪＡＶＡ（ＴＭ）プログラミング言語は、ＧＵＩを定義するための標準アプリケーション・プログラミング・インタフェース（ＡＰＩ）を含むオブジェクト指向プログラミング言語である。ＪＡＶＡ（ＴＭ）プログラミング言語標準の一部である２つのＡＰＩは、Ａｂｓｔｒａｃｔ  Ｗｉｎｄｏｗｉｎｇ  Ｔｏｏｌｋｉｔ（ＡＷＴ）ＡＰＩ、およびＳｗｉｎｇ  ＡＰＩ（ＡＷＴ  ＡＰＩ上で形成される）である。ＪＡＶＡ（ＴＭ）プログラミング言語の場合には、オブジェクト指向型ＧＵＩ  ＡＰＩが通常そうであるように、各タイプのＧＵＩ構成要素がクラスとして定義される。
【００１１】
オブジェクト指向プログラミング言語の場合には、クラスは、メンバー変数と呼ばれるデータの集合体を含むデータ・タイプの定義であり、データ、呼び出された方法（または別の方法としては、メンバー機能）上で行うことができる一組の動作の定義である。あるクラスにより定義されたデータ・タイプのデータの実際の集合体は、オブジェクトと呼ばれる。オブジェクト指向プログラミング（ＯＯＰ）言語（ｐａｒｌａｎｃｅ）の場合には、オブジェクトは、そのクラスの「インスタンス（ｉｎｓｔａｎｃｅ）」であると言われる。何故なら、そのクラスにより定義されるのはデータ構造であるからである。オブジェクト指向プログラミング言語でオブジェクトを生成するための実行時処理は、「インスタンシエーション（ｉｎｓｔａｎｔｉａｔｉｏｎ）」と呼ばれ、実行時に存在するオブジェクトは、「インスタンシエートされている」と言われる。
【００１２】
また、オブジェクト指向プログラミング言語は、通常、「継承（ｉｎｈｅｒｉｔａｎｃｅ）」と呼ばれるものを提供する。継承を使用して、新しいクラス（「子孫」クラスと呼ばれる）を１つまたは複数の既存のクラス（「ベース」クラスと呼ばれる）で定義することができる。それ故、子孫クラスは、ベース・クラスの１つまたは複数のメンバー変数または方法を継承する。例えば、ＪＡＶＡ（ＴＭ）プログラミング言語のＡＷＴ  ＡＰＩの場合には、「コンテナ」は「構成要素」と呼ばれるベース・クラスの子孫クラスであり、「コンテナ」クラスは、「コンテナ」の少なくともいくつかの方法およびメンバー変数を含む。それ故、「コンテナ」は、「構成要素」の子孫であるということになる。多くの場合、子孫クラスは、ベース・クラスから継承したものではない追加の方法またはメンバー変数を含む。
【００１３】
同様に、子孫クラスは、特定の方法のためにベース・クラスのコードを重ね書きするように書き込むことができる。例えば、ベース・クラスの「コンテナ」は、子孫クラスの「コンテナ」が継承するＧＵＩ構成要素を表示するための「表示」と呼ばれる方法を有することができる。コンテナ（他の構成要素を含むことができる）の表示は、一般的なＧＵＩ構成要素の表示よりも特異なものなので、「コンテナ」クラスは、「構成要素」クラスのコードとは異なる「表示」のためのコードを定義することができる。
【００１４】
このことは重要である。何故なら、ほとんどのオブジェクト指向言語の場合には、子孫クラスのオブジェクトは、ベース・クラスのもっと特異なインスタンスとして処理されるからである。それ故、「コンテナ」オブジェクトは、タイプ「構成要素」の変数内に格納することができ、または「構成要素」を引数としてとる方法は、「コンテナ」を引数としてとることもできる。何故なら、「コンテナ」は、「構成要素」から特性（すなわち、メンバー変数および方法）を継承するからである。子孫クラスからのオブジェクトをそれらのオブジェクトがベース・クラスのインスタンスであるかのように処理するこの機能は、「多型」と呼ばれる。
【００１５】
ＪＡＶＡ（ＴＭ）プログラミング言語が提供するようなオブジェクト指向型ＧＵＩ  ＡＰＩの場合には、ＧＵＩ構成要素はオブジェクトとしてインスタンシエートされ、相互間のＧＵＩ構成要素の設置および行動を定義するために、インスタンシエートしたオブジェクト間で関係が確立される。例えば、「収容関係」は、そのコンテナ構成要素が含んでいる構成要素に、コンテナ構成要素を関連付けるＧＵＩ構成要素間の関係である。例えば、ＪＡＶＡ（ＴＭ）プログラミング言語の場合には、構成要素は、通常、「追加」と呼ぶコンテナの方法によりコンテナとの収容関係に入る。
【００１６】
典型的なＧＵＩ構成要素は、構成要素の特定の特性を定義する１つまたは複数の属性を有する。例えば、典型的な窓掛けＧＵＩ内の「ボタン」構成要素は、ディスプレイ上のボタンのサイズ、ボタンの表面上に表示されるテキストまたはグラフィックス、ボタンの背景の色、ボタンに関連するキーボード・ショートカット等を定義する属性を有する。通常、ＧＵＩ構成要素をインスタンシエートするプログラム・コード（例えば、機能、方法、サブルーチン、手順等）の一部は、また、その構成要素のための属性を所望の値に設定する多数のコードのラインを含む。ＪＡＶＡ（ＴＭ）プログラミング言語および他のオブジェクト指向プログラミング・システムの場合には、例えば、構成要素は、一般的に、構成要素の特定の属性を設定するために実行することができる方法を有する。
【００１７】
多くのインスタンスの場合、ＧＵＩへの入力（例えば、キーボードまたはマウスあるいはその両方から）を記録することができる見込みがあるので、これらの入力をセーブし再生することができる。例えば、入力イベントを記録し再生する機能は、反復ＧＵＩ試験の効率を増大する。Ｅｃｌｉｐｓｅ  Ｓｔａｎｄａｒｄ  Ｗｉｄｇｅｔ  Ｔｏｏｌｋｉｔ（ＳＷＴ）またはＪＡＶＡ（ＴＭ）ＡＷＴ／Ｓｗｉｎｇ  ＡＰＩのような多くのＧＵＩツールキットの場合、これらのツールキットは、ＧＵＩ構成要素に永続的な一意の識別を割り当てるための機能を持たない。それ故、（ＧＵＩアプリケーションの以降の実行の際のように）ＧＵＩが再度生成される度に、ＧＵＩ制御装置に新しい識別が割り当てられる。このことは、以降の再生のために入力を永続的にセーブするのを難しくする。何故なら、どの制御装置が特定の入力イベントを永続的方法で目標にするのかを格納する明確な方法がないからである。
【００１８】
２００５年４月２８日付けの米国特許第２００５００９１５１０号公報（ＭＣ  ＫＥＯＮ他）は、永続的識別子を生成するための１つの方法を開示している。しかし、この方法は、識別子の一意性を保存するために長く複雑な経路識別子を生成しなければならない。
【特許文献１】米国特許第２００５００９１５１０号公報
【発明の開示】
【発明が解決しようとする課題】
【００１９】
それ故、記録したイベントの以降の再生のために永続的方法でＧＵＩ素子を一意に識別するための簡単で透明な方法が求められている。本発明は、この問題および他の問題の解決方法を提供し、従来の解決方法より優れている他の利点を有する。
【課題を解決するための手段】
【００２０】
本発明は、ＧＵＩイベントを記録し、記録したイベントの以降の再生のためにイベントの目標ＧＵＩ構成要素を永続的に識別するための方法、コンピュータ・プログラム、およびデータ処理システムを提供する。本発明の好ましい実施形態によれば、はっきりと定義した順序（例えば、深さ方向優先の横断など）で、構成要素階層を横断することにより、各ＧＵＩ構成要素に数値識別子が割り当てられる。横断中、ＧＵＩ構成要素がアクセスされると、構成要素がアクセスされた順序により構成要素に順次的に番号が付けられる。イベントを受信した場合には、イベントの目標構成要素に対応する番号と一緒にイベントが記録される。ＧＵＩプログラムが次回実行されると、同じ順序で構成要素階層が再度横断され、これにより同じ構成要素が前と同じ識別子に関連付けられる。それ故、番号により識別したその対応する目標構成要素に各イベントを適用することにより、記録したイベントを再生することができる。
【００２１】
上記説明は概要であるので、必要に応じて詳細を簡単にしたり、一般化したり、省略してある。それ故、当業者であれば、概要は単に例示としてのものであって、如何なる意味でも本発明を制限するものではないことを理解することができるだろう。他の態様によれば、特許請求の範囲だけに記載する本発明の新規な機能および利点は、下記の詳細な説明を読めば理解することができるだろう。この説明も本発明を制限するものではない。
【００２２】
添付の図面を参照すれば、当業者であれば本発明をよりよく理解することができ、その多くの目的、機能および利点を理解することができるだろう。
【発明を実施するための最良の形態】
【００２３】
下記の説明は、本発明の一例を詳細に説明するためのものであって、本発明自身を制限するためのものと解釈すべきではない。それどころか、任意の数の変更も、特許請求の範囲に記載する本発明の範囲内に入る。
【００２４】
図１は、本発明の好ましい実施形態によるＧＵＩ構成要素階層１００の図面である。ＧＵＩ構成要素階層１００は、エクリプスＳＷＴ（Ｅｃｌｉｐｓｅ  ＳＷＴ）およびＪＡＶＡ（ＴＭ）ＡＷＴ／Ｓｗｉｎｇ  ＡＰＩを含むがこれに限定されない多数のＧＵＩツールキットのうちのいずれかにより実施することができる。この好ましい実施形態によれば、階層１００内の各構成要素（例えば、構成要素１０２、１０４および１０６）は識別子により識別される。この例の場合には、選択した識別子は整数であるが、識別子を表すために任意の類似の計数データ・タイプ（ｅｎｕｍｅｒａｂｌｅ  ｄａｔａ  ｔｙｐｅ）を使用することもできる。これらの識別子番号は、はっきりと定義した順序の横断プロセスにより階層１００内の構成要素に割り当てられる。
【００２５】
この特定のケースの場合、構成要素には（鎖線１０８で示す）左から右への深さ方向優先の横断により番号が付けられる。それ故、階層１００のルート要素である構成要素１０２には、「１」という番号が付けられる。何故なら、構成要素１０２は、階層１００の左から右への深さ方向優先の横断中にアクセスする第１の構成要素であるからである。同様に、構成要素１０４は、左から右への深さ方向優先の横断中にアクセスする第２の構成要素である。それ故、構成要素１０４には「２」という番号が付けられる。構成要素１０６は、３番目にアクセスされる構成要素なので「３」という番号が付けられ、以下同様である。それ故、階層１００内の構成要素の結果としてのラベル付けは、階層１００のトポロジーで完全に決まり、任意の他のデータ（構成要素自身の他の内部データなど）で決まるのではない。それ故、このラベル付けは、（同じトポロジーを有する）同じ階層が再現される場合にはいつでもこの意味で永続的なものであり、階層の同じはっきりと定義した順序の横断を行うことにより同じラベル付けを再現することができる。
【００２６】
さらに、当業者であれば、選択した横断の特定の形（例えば、深さ方向優先、幅方向優先、左から右、右から左など）は、可能な各トポロジーのために構成要素がアクセスされることができる選択する唯一の可能な順序を有する横断の形が１つである場合には、本発明が正しく機能するために不可欠なものではないことを理解することができるだろう。左から右への深さ方向優先の横断は確かにこの特性を有しているが、同様にこの特性を有する順番付け横断の他の可能な形は無数にある。
【００２７】
図２に示すように、構成要素階層にラベルが付けられると、階層に対して以降の修正を行うことができる。例えば、図２の場合には、構成要素２０２（「１１」という番号が付いている）は、（図１の階層１００から修正される）修正した階層２００においては、構成要素２０４（「７」という番号が付いている）と交換済みである。また、追加の構成要素２０６には、階層２００が追加され、（１１の後の）順に次の数値識別子である識別子「１２」が与えられる。
【００２８】
必要な場合、または便利な場合には、構成要素階層は、修正した場合には番号を付け直すことができる。例えば、図３は、階層２００の番号を付け直したバージョン３００を示す。このような番号の付け直しが行われると、前に定義した識別子（図４のコラム４０２）を、対応する新しく定義した識別子（図４のコラム４０４）にマッピングするために、（図２および図３に示すラベル付けに対応する）図４のテーブル４００のような関連するデータ構造を生成することができる。
【００２９】
図５〜図９は、図１に示すようなラベルを付けた階層を生成し、イベントの目標構成要素を識別するためのその階層を使用し、そのためにこれらイベントおよびその対応する目標構成要素を記録し、再生することができるプロセスを示す。
【００３０】
図５は、本発明の好ましい実施形態によるＧＵＩに識別子を割り当てるプロセスのフローチャートである。このプロセスは、ＧＵＩ自身が最初に生成されるか、または階層の番号の付け直しが行われた場合に実行され、そのため階層内の構成要素と関連する識別子は、階層の現在のトポロジーを正しく反映する。
【００３１】
ＧＵＩ階層が識別子によりラベルが付けられたり、再度ラベルが付けられると、もし存在する場合には、ＧＵＩ構成要素の既存の識別子のその現在の値はクリアされる（ブロック５０２）。（図１の例の場合には、これらの識別子は、数値識別子である。）次に、予め指定した順序で階層が横断され、横断中に個々のＧＵＩ構成要素がアクセスされると、順次、各構成要素に番号が付けられる（または他の方法の場合には、識別子によりタグが付けられる）（ブロック５０４）。
【００３２】
図６は、本発明の好ましい実施形態による以降の再生のためにイベントを記録するプロセスのフローチャートである。本発明の好ましい実施形態の場合には、図６に示すプロセスは、イベントが発生した場合にいつでも非同期的に呼び出されるイベント・ハンドラ・ルーチンに内蔵される。イベントを検出した場合には（ブロック６００）、そのイベントの目標構成要素が検出される（ブロック６０２）。
【００３３】
次に、そのイベントに対応するイベント記録が生成される（ブロック６０４）。識別した目標構成要素に対応する数値識別子が、このイベント記録に記録される（ブロック６０６）。このイベントに関する追加情報も、イベント記録に格納される（ブロック６０８）。この情報は、イベント（例えば、キーの圧下、マウスのクリックなど）のタイプ、画面座標、またはイベントに対応する他の類似のパラメータ、およびタイムスタンプ、または遅延情報を含むことができる。このタイムスタンプまたは遅延情報は、最後のイベントを記録してからの経過時間のような再生中のイベントのタイミングを再度生成するために使用することができるオプションとしての情報である。図９に示すように、この情報は、ＧＵＩへの記録したイベントの適用の間の遅延の測定値を挿入するために使用することができる。
【００３４】
図６のプロセスの結果は、図７に示すように、イベント記録（例えば、記録７０１）のアレイ７００である。アレイ７００は記録したイベントのシーケンスを示す。アレイ７００内の各記録は、そのイベントが関連するＧＵＩ構成要素の識別子（識別子７０２）、イベントの前の遅延時間（遅延時間７０３）、およびイベントのＧＵＩツールキット表現であり、当該イベントのタイプに関する情報を含んでいるイベント・オブジェクト７０６への参照またはポインタ７０４を含む。
【００３５】
アレイ７００が含んでいる情報は、以降の使用のために永続記憶装置に格納することができる。本発明の好ましい実施形態でこのことを行うことができる１つの方法は、各記録（例えば、記録７０１）を、図８に示すように、直列の（テキスト）表現７０８に変換することである。イベント記録の直列化方法の一例である直列表現７０８は、直列イベント記録の開始を示す前文７１０、表示中のイベントの目標構成要素の識別子（識別子７１２）、遅延時間７１４、およびイベント記録が示すイベントのタイプの識別（イベント・タイプ７１６）を含む。当業者であれば、制限を受けずに、本発明の範囲および精神から逸脱することなしに、本発明の実施形態でイベント記録の種々様々な異なる形の直列化を使用することができることを理解することができるだろう。さらに、コンテキストにより、異なる量の情報をこのような直列化したものの中に格納／表示することができる。例えば、「キー圧下」イベントを、押された特定のキーに関する追加情報と一緒に直列化することができる。
【００３６】
別の方法としては、他の形の永続記憶装置を使用することができる。このような別の形の永続記憶装置は、図８の直列化した／フラット・ファイル記憶装置を補足することもできるし、その代わりに使用することもできる。例えば、イベント情報を格納するために、リレーショナル・データベースまたは他の形のデータベース管理システムを使用することができる。
【００３７】
図９は、本発明の好ましい実施形態による記録したイベントを再生するためのプロセスのフローチャートである。再生するイベントがあり（ブロック８００：ｙｅｓ）、（永続記憶装置またはメモリから）次のイベント記録が読み取られる（ブロック８０２）。次に、現在のプロセスまたはスレッドがイベント記録内に記録している指定の長さの遅延時間の間中止される（スリープ状態になる）（ブロック８０４）。次に、イベントの目標構成要素に対応する数がイベント記録から読み取られ、図１に示すように、ＧＵＩ構成要素階層を横断することにより、対応する構成要素の位置が読み取られる（ブロック８０６）。次に、記録したイベントが、識別した目標構成要素に適用される（ブロック８０８）。このプロセスは再生するイベントがなくなるまで反復される（ブロック８００）。
【００３８】
図１０は、本発明の好ましい実施形態を参照しながら本明細書で説明する計算動作を行うことができるコンピュータ・システム／サーバの簡単にした例である情報処理システム９０１である。コンピュータ・システム９０１は、ホスト・バス９０２と結合しているプロセッサ９００を含む。レベル２（Ｌ２）キャッシュ・メモリ９０４もホスト・バス９０２と結合している。ホスト−ＰＣＩブリッジ９０６はメイン・メモリ９０８と結合していて、キャッシュ・メモリおよびメイン・メモリ制御機能を含んでいて、ＰＣＩバス９１０、プロセッサ９００、Ｌ２キャッシュ９０４、メイン・メモリ９０８およびホスト・バス９０２間の転送を処理するためにバス制御を行う。メイン・メモリ９０８は、ホスト−ＰＣＩブリッジ９０６およびホスト・バス９０２と結合している。ＬＡＮカード９３０のようなホスト・プロセッサ９００だけが使用するデバイスは、ＰＣＩバス９１０と結合している。サービス・プロセッサ・インタフェースおよびＩＳＡアクセス・パススルー９１２は、ＰＣＩバス９１０とＰＣＩバス９１４の間でインタフェースとしての働きをする。このようにして、ＰＣＩバス９１４は、ＰＣＩバス９１０から絶縁される。フラッシュ・メモリ９１８のようなデバイスは、ＰＣＩバス９１４と結合している。一実施態様の場合には、フラッシュ・メモリ９１８は、種々の低いレベルのシステム機能およびシステム・ブート機能のために必要なプロセッサが実行することができるコードを内蔵しているＢＩＯＳコードを含む。
【００３９】
ＰＣＩバス９１４は、例えば、フラッシュ・メモリ９１８を含むホスト・プロセッサ９００およびサービス・プロセッサ９１６が共有する種々のデバイスに対してインタフェースとしての働きをする。ＰＣＩ−ＩＳＡブリッジ９３５は、ＰＣＩバス９１４およびＩＳＡバス９４０、ユニバーサル・シリアルバス（ＵＳＢ）機能９４５、電力管理機能９５５間の転送を処理するためにバス制御を行い、リアルタイム・クロック（ＲＴＣ）、ＤＭＡ制御、割込サポート、およびシステム管理バス・サポートのような図示していない他の機能素子を含むことができる。不揮発性ＲＡＭ９２０が、ＩＳＡバス９４０に取り付けられている。サービス・プロセッサ９１６は、初期化ステップ中、プロセッサ９００と通信するためにＪＴＡＧおよびＩ２Ｃバス９２２を含む。また、ＪＴＡＧ／Ｉ２Ｃバス９２２は、Ｌ２キャッシュ９０４、ホスト−ＰＣＩブリッジ９０６、およびメイン・メモリ９０８と結合していて、プロセッサ、サービス・プロセッサ、Ｌ２キャッシュ、ホスト−ＰＣＩブリッジ、およびメイン・メモリ間に通信経路を提供する。サービス・プロセッサ９１６も、情報処理デバイス９０１をパワーダウンするためにシステム電力リソースにアクセスする。
【００４０】
周辺デバイスおよび入出力（Ｉ／Ｏ）装置は、種々のインタフェース（例えば、パラレル・インタフェース９６２、シリアル・インタフェース９６４、キーボード・インタフェース９６８、およびＩＳＡバス９４０と結合しているマウス・インタフェース９７０）に取り付けることができる。別の方法としては、多くのＩ／ＯデバイスをＩＳＡバス９４０に取り付けられているスーパーＩ／Ｏコントローラ（図示せず）により収容することができる。
【００４１】
ネットワークを通してファイルをコピーする目的で、他のコンピュータ・システムにコンピュータ・システム９０１を取り付けるために、ＬＡＮカード９３０はＰＣＩバス９１０と結合している。同様に、電話線接続によりインターネットに接続する目的でコンピュータ・システム９０１をＩＳＰと接続するために、モデム９７５は、シリアル・ポート９６４およびＰＣＩ−ＩＳＡブリッジ９３５に接続している。
【００４２】
図１０のコンピュータ・システムは、本明細書に記載するプロセスを実行することができるが、このコンピュータ・システムは、コンピュータ・システムの単なる一例に過ぎない。当業者であれば、多くの他のコンピュータ・システム設計が、本明細書に記載するプロセスを実行することができることを理解することができるだろう。
【００４３】
本発明の好ましい実施態様のうちの１つは、クライアント・アプリケーション、すなわち、一組の命令（プログラム・コード）、または例えば、コンピュータのランダム・アクセス・メモリ内に常駐することができるコード・モジュールの他の機能記述材料である。コンピュータが要求するまで、上記一組の命令を、例えば、ハード・ディスク・ドライブ内の他のコンピュータ・メモリ、または（ＣＤ  ＲＯＭ内で最終的に使用するための）光ディスクのような取り外し可能メモリ、または（フレキシブル・ディスク・ドライブで最終的に使用するための）フレキシブル・ディスクに格納することもできるし、インターネットまたは他のコンピュータ・ネットワークを介してダウンロードすることもできる。それ故、本発明は、コンピュータで使用するためにコンピュータ・プログラムとして実施することができる。さらに、上記種々の方法は、ソフトウェアにより選択的に作動または再構成した汎用コンピュータで容易に実施することができるが、通常の当業者であれば、このような方法は、ハードウェア、ファームウェア、または必要な方法のステップを実行するために形成したもっと特種化した装置で実行することができることを理解することができるだろう。機能記述材料は、機械に機能を与える情報である。機能記述材料としては、コンピュータ・プログラム、命令、規則、事実、コンピュータ機能の定義、オブジェクト、およびデータ構造等があるが、これらに限定されない。
【図面の簡単な説明】
【００４４】
【図１】本発明の好ましい実施形態によるＧＵＩ構成要素階層の図面である。
【図２】本発明の好ましい実施形態による修正したＧＵＩ構成要素階層の図面である。
【図３】本発明の好ましい実施形態による番号を付け直したＧＵＩ構成要素階層の図面である。
【図４】本発明の好ましい実施形態による新しいＧＵＩ構成要素識別子に古いＧＵＩ構成要素識別子をマッピングする関連データ構造の図面である。
【図５】本発明の好ましい実施形態によるＧＵＩ構成要素階層にラベルを付けるプロセスのフローチャートである。
【図６】本発明の好ましい実施形態による後続の再生のために、イベントを記録するプロセスのフローチャートである。
【図７】図６のプロセスにより生成することができるイベント記録のアレイの図面である。
【図８】本発明の好ましい実施形態によるイベント記録を順番に並べた図面である。
【図９】本発明の好ましい実施形態による記録したイベントを再生するプロセスのフローチャートである。
【図１０】本発明の好ましい実施形態を実施することができるデータ処理システムのブロック図である。
【符号の説明】
【００４５】
１００  ＧＵＩ構成要素階層
１０２，１０４，１０６  構成要素
１０８  鎖線
２００  階層
２０２，２０４，２０６  構成要素
３００  番号を付け直したバージョン
４００  テーブル
４０２，４０４  コラム
７００  アレイ
７０１  記録
７０２，７１２  識別子
７０３，７１４  遅延時間
７０４  ポインタ
７０６  イベント・オブジェクト
７０８  直列表現
７１０  前文
７１６  イベント・タイプ
９００  プロセッサ
９０１  コンピュータ・システム
９０２  ホスト・バス
９０４  Ｌ２キャッシュ
９０６  ホスト−ＰＣＩブリッジ
９０８  メイン・メモリ
９１０，９１４  ＰＣＩバス
９１２  ＩＳＡアクセス・パススルー
９１６  サービス・プロセッサ
９１８  フラッシュ・メモリ
９２０  不揮発性ＲＡＭ
９２２  ＪＴＡＧ／Ｉ２Ｃバス
９３０  ＬＡＮカード
９３５  ＰＣＩ−ＩＳＡブリッジ
９４０  ＩＳＡバス
９４５  ユニバーサル・シリアルバス（ＵＳＢ）機能
９５５  電力管理機能
９６２  パラレル・インタフェース
９６４  シリアル・インタフェース
９６８  キーボード・インタフェース
９７０  マウス・インタフェース
【図１】
2007172602.tif 000003
【図２】
2007172602.tif 000004
【図３】
2007172602.tif 000005
【図４】
2007172602.tif 000006
【図５】
2007172602.tif 000007
【図６】
2007172602.tif 000008
【図７】
2007172602.tif 000009
【図８】
2007172602.tif 000010
【図９】
2007172602.tif 000011
【図１０】
2007172602.tif 000012