(57)【要約】【課題】クライアントにユーザインタフェース（ＵＩ）情報を提供する。【解決手段】クライアントサーバ環境内のイベントメカニズム２１０は、クライアントが対象のＵＩ情報を受け取るように登録することを可能にする登録メカニズムを有する。ＵＩオートメーションクライアント２０２は、クライアントから登録情報を受け取り、受け取ったときに対象のＵＩ情報をクライアントに搬送する。ＵＩオートメーションサーバ２０４は、ＵＩオートメーションクライアント２０２から登録情報を受け取り、ＵＩエンジン２０６に登録をアドバイスする。加えて、ＵＩオートメーションサーバ２０４は、ＵＩエンジン２０６からＵＩ情報を受け取る。ＵＩオートメーションサーバ２０４は、クライアントにとって対象でない情報をフィルタするフィルタリング装置と、クライアントにとって対象の情報をＵＩオートメーションクライアント２０２に通知する通知装置とを含む。【選択図】　図３
2004145851.tif 000002
【特許請求の範囲】
【請求項１】
ユーザインタフェースの変化をクライアントに通知し続ける、クライアントサーバ環境内のイベントメカニズムであって、
対象のユーザインタフェース情報を受け取るように前記クライアントが登録することを可能にする登録メカニズムと、
前記クライアントから登録情報を受け取り、受け取ったときに前記対象のユーザインタフェース情報を前記クライアントに搬送するユーザインタフェース（ＵＩ）オートメーションクライアントであって、前記登録情報を使用してユーザインタフェースサーバにアドバイスするユーザインタフェースオートメーションクライアントと、
前記ユーザインタフェースオートメーションクライアントから登録情報を受け取り、ユーザインタフェースエンジンから前記ユーザインタフェース情報を受け取るユーザインタフェースオートメーションサーバであって、前記クライアントにとって対象でない情報をフィルタするフィルタリング装置と、前記クライアントにとって対象の情報を前記ユーザインタフェースオートメーションクライアントに通知する通知装置とを含むユーザインタフェースオートメーションサーバと
を備えたことを特徴とするイベントメカニズム。
【請求項２】
前記登録メカニズムは、前記クライアントから登録情報を受諾し、該登録情報は、オブジェクト情報、該オブジェクト情報に関するクライアント位置、およびソースオブジェクトと共に返すべきプロパティのリストを含むことを特徴とする請求項１に記載のイベントメカニズム。
【請求項３】
前記ＵＩオートメーションクライアントは、前記オブジェクト情報を指定の前記クライアント位置に送達する手段を含むことを特徴とする請求項２に記載のイベントメカニズム。
【請求項４】
前記ＵＩオートメーションサーバの前記フィルタリング手段は、前記ユーザインタフェースエンジンからの前記ユーザインタフェース情報が前記オブジェクト情報と、必要なプロパティのリストとを含むかどうかを判定することを特徴とする請求項２に記載のイベントメカニズム。
【請求項５】
前記登録メカニズムは、指定の範囲の情報を求める要求を受け取ることを特徴とする請求項１に記載のイベントメカニズム。
【請求項６】
前記ユーザインタフェースオートメーションサーバは、前記ユーザインタフェース情報が前記クライアントにとって対象のものであり、かつ前記指定の範囲内にある場合に論理要素を形成し、前記ユーザインタフェース情報が対象でないものであり、または前記指定の範囲内にない場合に前記ユーザインタフェース情報を廃棄することを特徴とする請求項５に記載のイベントメカニズム。
【請求項７】
前記ユーザインタフェースエンジンからの前記ユーザインタフェースオートメーションサーバの通知は、変更されたプロパティの名前、新しい値、および利用可能な任意の古い値を含むことを特徴とする請求項１に記載のイベントメカニズム。
【請求項８】
前記ユーザインタフェース情報は、トップレベルウィンドウイベント、フォーカスイベント、プロパティ変更イベント、コントロールパターンイベント、論理構造変更イベント、マルチメディアイベント、シンプルサウンドイベント、およびソフトフォーカスイベントのグループから選択される少なくとも１つのイベントタイプに関する情報を含むことを特徴とする請求項１に記載のイベントメカニズム。
【請求項９】
各イベントは、前記イベントタイプのうちの１つだけに該当することを特徴とする請求項８に記載のイベントメカニズム。
【請求項１０】
各イベントタイプは、リスナを追加し、該リスナを除去し、前記イベントタイプを聴取するように前記イベントメカニズムを促し、かつ前記ユーザインタフェースエンジンが前記ＵＩオートメーションサーバに前記ユーザインタフェースエンジンのイベントを通知するための１組のメソッドを含むことを特徴とする請求項８に記載のイベントメカニズム。
【請求項１１】
コンピュータで実行される、対象のユーザインタフェースイベントをクライアントに通知する方法であって、
前記クライアントから、指定のユーザインタフェース情報を求める登録要求を受け取るステップと、
前記指定のユーザインタフェース情報が利用可能であるかどうかを判定するために、ユーザインタフェース（ＵＩ）オートメーションサーバからのユーザインタフェースエンジンの情報を監視するステップと、
前記ユーザインタフェースオートメーションサーバからユーザインタフェースオートメーションクライアントに前記指定のユーザインタフェース情報を渡すステップと、
前記ユーザインタフェースオートメーションクライアントから適切なクライアント位置に、前記指定のユーザインタフェース情報を送達するステップと
を備えたことを特徴とする方法。
【請求項１２】
登録要求を受け取る前記ステップは、オブジェクト情報、該オブジェクト情報に関するクライアント位置、および必要なプロパティのリストを含む登録情報を受け取るステップを含むことを特徴とする請求項１１に記載の方法。
【請求項１３】
前記指定のユーザ情報を送達するステップは、前記オブジェクト情報を指定の前記クライアント位置に送達するステップを含むことを特徴とする請求項１２に記載の方法。
【請求項１４】
前記ユーザインタフェースエンジンからのユーザインタフェース情報が、前記オブジェクト情報と、必要なプロパティのリストとを含むかどうかを判定するために、前記ＵＩオートメーションサーバを用いて前記ユーザインタフェース情報をフィルタするステップをさらに備えたことを特徴とする請求項１２に記載の方法。
【請求項１５】
登録要求を受け取るステップは、指定の範囲の情報を求める要求を受け取るステップを含むことを特徴とする請求項１１に記載の方法。
【請求項１６】
前記ユーザインタフェース情報が前記クライアントにとって対象のものであり、かつ前記指定の範囲内にある場合に、前記ユーザインタフェースオートメーションサーバを用いて論理要素を形成するステップと、
前記ユーザインタフェース情報が対象でないものであり、または前記指定の範囲内にない場合に前記ユーザインタフェース情報を廃棄するステップと
をさらに備えたことを特徴とする請求項１５に記載の方法。
【請求項１７】
変更されたプロパティの名前、新しい値、および利用可能な任意の古い値を含む情報を前記ユーザインタフェースエンジンから受け取るステップをさらに備えたことを特徴とする請求項１１に記載の方法。
【請求項１８】
トップレベルウィンドウイベント、フォーカスイベント、プロパティ変更イベント、コントロールパターンイベント、論理構造変更イベント、マルチメディアイベント、シンプルサウンドイベント、およびソフトフォーカスイベントのグループから選択される少なくとも１つのイベントタイプに関するユーザインタフェース情報を受け取るステップをさらに備えたことを特徴とする請求項１１に記載の方法。
【請求項１９】
各イベントは、前記イベントタイプのうちの１つだけに該当することを特徴とする請求項８に記載のイベントメカニズム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、支援技術製品、自動テスト製品、ならびにユーザインタフェース情報を収集するその他の製品、およびこれらの製品とユーザインタフェース情報との相互作用の分野に関した、イベントメカニズムおよびクライアントに対象のユーザインタフェースイベントを通知する方法に関する。
【背景技術】
【０００２】
支援技術（ＡＴ；ａｓｓｉｓｔｉｖｅ　ｔｅｃｈｎｏｌｏｇｙ）製品は、コンピュータソフトウェアに含まれ、コンピュータソフトウェアによって提示される情報に対する、学習と、コミュニケーションと、アクセスとに関する領域で支援を必要とするコンピュータユーザを助けるために存在する。この製品は、コンピュータインタフェースに関連する情報を必要とする。同様に、既存の自動テスト（ａｕｔｏｍａｔｅｄ　ｔｅｓｔｉｎｇ）製品やユーザインタフェース命令ユーティリティもまた、ユーザインタフェースについての情報を必要とする。現在のところ、これらの製品は、十分なユーザインタフェース（ＵＩ）情報源を有していない。これらの３つのタイプの製品（クライアント）は、（１）アプリケーションのユーザインタフェースについての情報を収集し、（２）ＵＩを構築するのに用いる技術の如何に関わらず、ＵＩ要素をプログラムによって発見して、ＵＩ要素に問い合わせ、（３）キーボード入力およびポインタ入力を生成し、（４）どのタイプの挙動または機能が現在利用可能かを認識することが可能となるように、他の所から必要なサポートを得る必要がある。これらの機能をＡＴ製品に与える単一の技術は、現在のところ利用可能ではない。さらに、現在のＡＴ製品は、すべてのグラフィカルなオペレーティングシステム（ＯＳ）技術と常に互換であるわけではなく、かつ冗長な通知または誤解を招くような通知を集中式にフィルタし、調整する能力が欠けている。追加の欠点は、現在の自動化インフラストラクチャやアクセシビリティ（ａｃｃｅｓｓｉｂｉｌｉｔｙ）インフラストラクチャが拡張可能でなく、したがって新しい機能を追加するにはＯＳレベルの変更が必要となることである。
【０００３】
さらに、現在のところ、アプリケーションのユーザインタフェースについての情報を収集するには、ＡＴ製品がアプリケーション特有のコードを書いて、ユーザについての情報を得なければならない。このアプリケーション特有のコードを書くプロセスは時間がかかり、継続的な保守を必要とする。現在の自動化インフラストラクチャはまた、冗長なイベント通知、または誤解を招くようなイベント通知を一貫した方式でフィルタし、調整する能力も欠けている。したがって、イベントコンシューマは、情報を自主的にフィルタする必要がある。
【０００４】
現在のシステムは、以下の３つのレベルの細分性で、ＡＴ製品がイベント通知を要求することを可能にする。その３つの細分性とは、（１）デスクトップ上のすべてのもの、（２）特定のプロセス単位（ワードプロセッサの開始など）、または（３）特定のプロセス中のスレッド単位（プロセスで作業を行う複数のオブジェクト）である。現在、クライアントがイベントを受け取ったとき、クライアントは、イベントが発生した特定のウィンドウについてのウィンドウハンドルと、イベントが発生した場所を示す他の情報ビットを受け取る。クライアントは、クロスプロセスコールを作成して、イベントに関係するＵＩオブジェクトを取り出すことができる。このオブジェクトを使用して、クライアントは、追加のクロスプロセスコールを作成し、そのオブジェクトについての情報を問い合わせることができる。クライアントが５つの情報を必要とする場合、クライアントは５つのクロスプロセスコールを作成しなければならない。クロスプロセスコールは非常に低速であり、したがって、現在のアクセシビリティインフラストラクチャを使用してＵＩ情報を収集する性能コストは高い。このタイプの周知のシナリオを図８に示す。サーバアプリケーション８１２はイベント６を発火する。カーネル８１４は、どのクライアントに通知しなればならないかを判定し、イベント通知１８を当該のクライアント８１０に送る。クライアント８１０は、プロセス境界２を介して、イベント通知１８に関係するオブジェクトをサーバアプリケーション８１２に求める要求８１６を作成する。サーバアプリケーション８１２はオブジェクト８２０を返し、次いでクライアント８１０は、イベントを発火したＵＩコントロールについての情報を求める要求８１６の送出を開始することができる。サーバアプリケーション８１２は、プロセス境界２を介して、要求された情報のオブジェクト８２０をクライアント８１０に返す。
【０００５】
別の現在のオプションは、クライアントコードをダイナミックリンクライブラリ（．ＤＬＬ）としてプロセス内にロードすることを可能にする。このオプションはいくつかの欠点を有する。まず、このオプションは、クライアントコードをプロセスにロードするために、システムから協力を得る必要があることである。第２に、このオプションは、クライアントコードをアプリケーションのプロセスにロードした後、アプリケーションのプロセスが収集する情報を制限することが困難であるので、セキュリティ問題を引き起こすことである。第３に、クライアントにとって効果的な技法となるように、このオプションをシステム上のあらゆるプロセスにロードしなければならないことである。最適には、承認されたクライアントだけが、別のアプリケーションのプロセスにロードされるべきである。
【０００６】
さらに、クライアントが受け取りたいイベント通知を指定する能力をクライアントに与えるシステムが必要である。周知のシステムでは、クライアントはいくつかのクロスプロセスコールを作成し、次いでその情報を解析して、クライアントがそのイベントを対象としているかどうかを判定することが必要であることがある。このイベントフィルタリングをより高性能（ｐｅｒｆｏｒｍａｎｔ）な方式で実施することができ、新しいシステムまたはアプリケーションイベントをサポートするために容易に更新することができるメカニズムが必要である。さらに、セキュリティ問題を軽減するために、承認されたコンポーネントだけを使用するシステムが必要である。
【０００７】
現在、ユーザインタフェースについての情報をシークするとき、特定のＵＩフレームワークに固有のツリーにアクセスするために、ＡＴ製品が必要である。したがって、複数のＵＩフレームワークに関するユーザインタフェース情報を搬送するためには複数のツリーが必要である。これらの相異なるツリーは、対象でない情報、またはエンドユーザによって操作される可視ＵＩコントロールを管理する隠しコンテナオブジェクトなどの、ユーザにとって可視でない情報を含む可能性がある。したがって、ユーザにとって対象のノードだけを有する、単一の統合ツリーが求められている。
【０００８】
尚、出願人が知っている先行技術として、記載すべき先行技術文献情報は特に見あたらない。
【考案の開示】
【発明が解決しようとする課題】
【０００９】
ＡＴ製品、自動テストツール、および命令ユーティリティのニーズに対処する解決策が必要である。この解決策は、すべてのグラフィカルなＯＳ技術から使用可能であるべきであり、かつこの解決策により、すべての形のＵＩおよびＵＩコンポーネントがアクセス可能となるべきである。
【００１０】
本発明は、このような状況に鑑みてなされたもので、その目的とするところは、クライアントにユーザインタフェース情報を提供する方法およびコンピュータアプリケーションを対象とする、イベントメカニズムおよびクライアントに対象のユーザインタフェースイベントを通知する方法を提供することにある。
【課題を解決するための手段】
【００１１】
本発明の一態様では、ユーザインタフェース（ＵＩ）の変化をクライアントに通知し続けるイベントメカニズムがクライアントサーバ環境内に提供される。イベントメカニズムは、対象のＵＩ情報を受け取るようにクライアントが登録することを可能にする登録メカニズムを含む。このイベントメカニズムはまた、イベント通知を受け取るようにクライアントを登録し、イベントが生じたときにクライアントにそのイベント通知を搬送するＵＩオートメーションクライアントも含む。ＵＩオートメーションサーバはＵＩフレームワークから通知を追加で受け取り、かつＵＩオートメーションサーバは、クライアントにとって対象でないイベントを除去するフィルタリングメカニズムと、残りの対象の通知をＵＩオートメーションクライアントに通知する通知メカニズムとを含む。
【００１２】
本発明の別の態様は、対象のＵＩ要素についての情報を収集するコンピュータ実行方法を提供する。この方法は、クライアントから、指定のユーザインタフェース情報を求める要求を受け取り、ＵＩオートメーションサーバによって使用されるＵＩエンジンに照会し、要求されたＵＩ情報が利用可能であるかどうかを判定する。指定のＵＩ情報は、ＵＩオートメーションサーバからＵＩオートメーションクライアントに渡される。
【００１３】
本発明の追加の利点および新規な特徴は以下で説明され、ある程度、以下を検討する際に当業者には明らかになるであろうし、あるいは、本発明を実施することによって理解されさよう。
【発明の効果】
【００１４】
以上説明したように本発明によれば、クライアントにユーザインタフェース情報を提供することができる。
【発明を実施するための最良の形態】
【００１５】
以下、図面を参照して本発明の実施形態を詳細に説明する。
【００１６】
例示的動作環境
図１に、本発明を実装することができる適切なコンピューティングシステム環境１００の例を示す。コンピューティングシステム環境１００は、適切なコンピューティング環境の一例に過ぎず、本発明の使用または機能の範囲に関して何らかの制限を示唆するものではない。例示的動作環境１００に図示する構成要素のうちのいずれか１つあるいはそれらの組合せに関係する、何らかの依存または要件を、コンピューティング環境１００が有するものと解釈すべきでもない。
【００１７】
本発明を、コンピュータによって実行されるプログラムモジュールなどのコンピュータ実行可能命令の一般的状況で説明する。一般に、プログラムモジュールは、特定のタスクを実行し、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。さらに、ハンドヘルド装置、マルチプロセッサシステム、マイクロプロセッサベースの、またはプログラム可能な消費者向け電子機器、ミニコンピュータ、メインフレームコンピュータなどを含む他のコンピュータシステム構成を用いて本発明を実施できることを当業者は理解されよう。本発明は、通信ネットワークを介してリンクされるリモート処理装置によってタスクが実行される分散コンピューティング環境でも実施することができる。分散コンピューティング環境では、プログラムモジュールは、メモリ記憶装置を含む、ローカルコンピュータの記憶媒体とリモートコンピュータの記憶媒体の両方に配置することができる。
【００１８】
図１を参照すると、本発明を実装するための例示的システム１００は、プロセッサ１２０と、システムメモリ１３０と、システムメモリを含む様々なシステム構成要素をプロセッサ１２０に結合するシステムバス１２１とを含む、コンピュータ１１０の形の汎用コンピューティング装置を含む。
【００１９】
コンピュータ１１０は通常、様々なコンピュータ可読媒体を含む。例えば、限定はしないが、コンピュータ可読媒体は、コンピュータ記憶媒体および通信媒体を含むことができる。システムメモリ１３０は、読取り専用メモリ（ＲＯＭ）１３１やランダムアクセスメモリ（ＲＡＭ）１３２などの、揮発性および／または不揮発性メモリの形のコンピュータ記憶媒体を含む。スタートアップ中などにコンピュータ１１０内の要素間で情報を転送する助けになる基本ルーチンを含むＢＩＯＳ（Ｂａｓｉｃ　Ｉｎｐｕｔ／Ｏｕｔｐｕｔ　Ｓｙｓｔｅｍ）１３３が、一般にＲＯＭ１３１内に格納されている。ＲＡＭ１３２は一般に、プロセッサ１２０に即座にアクセス可能であり、かつ／またはプロセッサ１２０が現在操作しているデータおよび／またはプログラムモジュールを含む。例えば、限定はしないが、図１に、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７を示す。
【００２０】
コンピュータ１１０はまた、他の取外し可能／取外し不能な揮発性／不揮発性コンピュータ記憶媒体も含むことができる。単なる一例であるが、図１に、ノンリムーバブル不揮発性磁気媒体を読み書きするハードディスクドライブ１４１、リムーバブル不揮発性磁気ディスク１５２を読み書きする磁気ディスクドライブ１５１、およびＣＤ−ＲＯＭまたは他の光媒体などのリムーバブル不揮発性光ディスク１５６を読み書きする光ディスクドライブ１５５を示す。例示的動作環境で使用することのできる他の取外し可能／取外し不能な揮発性／不揮発性コンピュータ記憶媒体には、限定はしないが、磁気テープカセット、フラッシュメモリカード、デジタルバーサタイルディスク、デジタルビデオテープ、ソリッドステートＲＡＭ、およびソリッドステートＲＯＭなどが含まれる。ハードディスクドライブ１４１は一般に、インタフェース１４０などのノンリムーバブルメモリインタフェースを介してシステムバス１２１に接続され、磁気ディスクドライブ１５１および光ディスクドライブ１５５は一般に、インタフェース１５０などのリムーバブルメモリインタフェースによってシステムバス１２１に接続される。
【００２１】
上記で論じ、図１に示すドライブと、関連するコンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、またはコンピュータ１１０に関する他のデータの記憶を実現する。例えば図１では、ハードディスクドライブ１４１が、オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、およびプログラムデータ１４７を格納するものとして示されている。これらの構成要素は、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７と同一にすることができ、あるいはそれらとは異なるものにすることができることに留意されたい。オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール、１４６、およびプログラムデータ１４７が少なくとも異なるコピーであることを示すため、ここでは異なる符号を付けた。ユーザは、キーボード１６２、ならびにマウス、トラックボール、またはタッチパッドと一般に呼ばれるポインティングデバイス１６１などの入力装置を介してコマンドおよび情報をコンピュータ１１０に入力することができる。他の入力装置（図示せず）には、マイクロフォン、ジョイスティック、ゲームパッド、サテライトディッシュ、スキャナなどを含めることができる。これらの入力装置や他の入力装置はしばしば、システムバスに結合されたユーザ入力インタフェース１６０を介してプロセッサ１２０に接続されるが、パラレルポート、ゲームポート、ユニバーサルシリアルバス（ＵＳＢ）などの他のインタフェースおよびバス構造によって接続することもできる。モニタ１９１または他のタイプのディスプレイ装置も、ビデオインタフェース１９０などのインタフェースを介してシステムバス１２１に接続される。モニタに加えて、コンピュータはまた、スピーカ１９７やプリンタ１９６などの他の周辺出力装置も含むことができ、その周辺出力装置は、出力周辺インタフェース１９５を介して接続することができる。
【００２２】
本発明のコンピュータ１１０は、リモートコンピュータ１８０などの１つまたは複数のリモートコンピュータへの論理接続を使用するネットワーク環境で動作することができる。リモートコンピュータ１８０はパーソナルコンピュータでよく、通常はコンピュータ１１０に関して上記で説明した要素のうちの多数あるいはすべてを含むが、図１にはメモリ記憶装置１８１だけを示した。図１に示す論理接続は、ローカルエリアネットワーク（ＬＡＮ）１７１および広域ネットワーク（ＷＡＮ）１７３を含むが、他のネットワークも含むことができる。
【００２３】
ＬＡＮネットワーク環境で使用するとき、コンピュータ１１０は、ネットワークインタフェースまたはアダプタ１７０を介してＬＡＮ１７１に接続される。ＷＡＮネットワーク環境で使用するとき、コンピュータ１１０は通常、インターネットなどのＷＡＮ１７３を介して通信を確立するためのモデム１７２、あるいは他の手段を含む。モデム１７２は内蔵でも外付けでもよく、ユーザ入力インタフェース１６０または他の適切なメカニズムを介してシステムバス１２１に接続することができる。ネットワーク環境では、コンピュータ１１０に関係して図示したプログラムモジュール、またはその一部は、リモートメモリ記憶装置に格納することができる。例えば、限定はしないが、図１に、リモートアプリケーションプログラム１８５を、メモリ装置１８１上に常駐するものとして示す。図示したネットワーク接続は例示的なものであり、コンピュータ間の通信リンクを確立する他の手段も使用できることを理解されよう。
【００２４】
コンピュータ１１０の他の多くの内部構成要素を図示していないが、そのような構成要素と、その相互接続は周知であることを当業者は理解されよう。したがって、本発明に関連して、コンピュータ１１０の内部構造に関する追加の詳細を開示する必要はない。
【００２５】
アクセシビリティシステム構造
図２に示すように、アクセシビリティシステム２００は、クライアント環境３００およびサーバ環境４００と対話する。アクセシビリティシステム２００は、図１に関して上記で説明したコンピュータ環境１００内に実装することができる。アクセシビリティシステム２００は、クライアント３００との対話を容易にするクライアント側アクセシビリティインタフェース２２０と、サーバ側４００との対話を容易にするサーバ側アクセシビリティインタフェース２３０と、アクセシビリティシステムコア２０１とを含む。本発明のアクセシビリティシステム２００は、ユーザインタフェース（ＵＩ）にプログラム式にアクセスするための、新しいアプリケーションプログラムインタフェース（ＡＰＩ）、インタフェース、およびメタファーを提供する。アクセシビリティシステム２００により、アプリケーションが、アプリケーション自体と、アプリケーションが使用する任意のコンポーネントをアクセス可能にすることができる。
【００２６】
クライアント環境３００は、支援技術（ＡＴ）製品または自動ＵＩテストツールを含むことが好ましい。サーバ側４００は、図２に示すように様々な技術を実装することができる。サーバシステム４１０は、第１のタイプのＵＩ内で見つけることができるアダプタ４１２およびコア４１４を含む。サーバシステム４２０は、ワシントン州レドモンドのＭｉｃｒｏｓｏｆｔ　ＣｏｒｐｏｒａｔｉｏｎのＭｉｃｒｏｓｏｆｔオペレーティングシステム製品で利用可能なＷｉｎ３２　ＵＩなどの第２のタイプのＵＩ内で見つけることができるプロキシコンポーネント（ａ　ｐｒｏｘｉｅｓ　ｃｏｍｐｏｎｅｎｔ）４２２およびコントロール（ｃｏｎｔｒｏｌｓ）４２４を含む。サーバシステム４３０は、代替の第３のタイプのＵＩ内で見つけることができるアダプタ４３２および内部ＯＭ（ｏｂｊｅｃｔ　ｍｏｄｅｌ）４３４を含む。
【００２７】
図３に示すように、アクセシビリティシステム２００内に含まれるイベントメカニズム２１０は、クライアント環境３００およびサーバ環境４００との対話を容易にするＵＩオートメーションクライアント２０２およびＵＩオートメーションサーバ２０４に依拠する。ＵＩオートメーションクライアント２０２およびＵＩオートメーションサーバ２０４は、本発明のイベントメカニズム２１０を参照しながら以下でより詳細に説明する。本発明のアクセシビリティシステム２００は、（１）アプリケーションのユーザインタフェースについての情報を収集し、（２）ＵＩを構築するのに用いる技術の如何に関わらず、ＵＩ要素をプログラム式に発見して、ＵＩ要素に問い合わせ、（３）キーボード入力およびポインタ入力を生成し、（４）どのタイプの挙動または機能が現在利用可能かを認識する機能をクライアント（ＡＴ製品）３００に与える。アクセシビリティシステム２００により、アプリケーションが、アプリケーション自体と、アプリケーションが使用する任意のコンポーネントとをアクセス可能にすることができる。図２および３に図示する構造により、（１）論理ＵＩツリー、（２）コントロールパターン、（３）イベントメカニズム、（４）入力ＡＰＩ（この文書には含まず）、および（５）プロパティを含む、アクセシビリティシステム２００の５つの主要な態様が可能となる。
【００２８】
ＵＩアクセスの論理ツリー２２２
アクセシビリティシステム２００の一体化コンポーネントは論理ツリー２２２である。論理ツリー２２２の例を図４（Ｄ）に示す。ツリー２２２は、クライアント側アクセシビリティインタフェース２２０に含まれる。
【００２９】
論理ツリー２２２は、基礎となるＵＩ要素の構造的階層のフィルタ後のビューであり、コントロールまたはアプリケーション開発者が実装しなければならない別々のツリーではない。その代わりに、論理ツリー２２２は、構成要素を論理ツリー２２２で公開すべきかどうかを示すいくつかの明確なプロパティ、すなわち対象である、対象でないをキーオフ（ｋｅｙ　ｏｆｆ）する。アクセシビリティシステムコア２０１は、この情報を消費して、フィルタ後のＵＩ論理ツリー２２２を生成し、フィルタ後のＵＩ論理ツリー２２２はＡＴ製品またはテストスクリプトに提示される。
【００３０】
論理ツリー２２２は、コントロール、コントロール中の項目、またはグループ構造をそれぞれ表す要素のツリーである。グループ構造は、ダイアログ、ペイン（ｐａｎｅ）、またはフレームでよい。論理ツリー２２２の構造は、ユーザが理解するアプリケーションのＵＩを表すべきである（コントロールが実際には異なる基礎となる構造を使用して実装される場合であっても）。ツリーは経時的に安定であるべきである。アプリケーションがユーザから見て同じように見える限り、シーンの背後のアプリケーションの実装の細部が変更された場合であっても、そのアプリケーションを表す論理ツリー２２２は、依然として同じであるべきである。Ｍｉｃｒｏｓｏｆｔ　ＯＳ製品におけるシェルの「ＳｈＤｏｃＶｉｅｗ」ウィンドウなどの、構造的理由および実装上の理由のために存在する固有の要素は、このツリーに出現すべきではない。ユーザはそれらを知覚しないからである。
【００３１】
論理ツリー２２２は、複数の異なるプロセスをクライアントにとっては同一となるように統合することができる、複数のフラグメントから構築された単一のツリーである。論理ツリー２２２は、バルク検索を可能にし、プロパティのリストに関する値を得ることができる。ユーザが通常クロスプロセスコールを起動して値を問い合わせるまで、アクセシビリティシステム２００は、論理ツリー２２２を使用することによって値を取り出すことになる。
【００３２】
周知のシステムの１ステップで構築する代わりに、論理ツリー２２２は、ロー（ｒａｗ）ツリーを構築するのに使用されるフラグメントから構築される。図５に示すように、３つの主な手順が論理ツリー２２２を構築する。手順７２では、アクセシビリティシステム２００は、基礎となる技術の固有要素の位置を突き止め、図４（Ａ）に示す固有ツリーに到達する。手順７４では、アクセシビリティシステム２００は固有要素を組み合わせ、図４（Ｂ）に示すローツリー２０を形成する。最後に、手順７６では、図４（Ｄ）に示すように、ローツリー２０中の対象でないコンポーネントを隠すことにより論理ツリー２２２を得る。
【００３３】
図４（Ａ）に、Ｗｉｎ３２　ＵＩまたはその他の任意の利用可能なＵＩなどの、基礎となる技術の固有要素から構築される２つの固有ツリー１０および１４を示す。固有ツリー１０は、相互に様々な関係を有する親ノード１１と複数の子孫１２を含む。同様に、固有ツリー１４は、複数の子ノード１６を有する親ノード１５を含む。子ノード１６は、互いに兄弟であると表現することができる。
【００３４】
図４（Ｂ）に示すように、固有ツリー１０と１４を組み合わせ、ローツリー２０を形成することができる。ローツリー２０は、子ノード２２および３０を有する親ノード２１を含む。子ノード２２は子孫２３〜２９を有し、子ノード３０は子孫３１〜３３を有する。このローツリー２０は、固有ツリー１０と１４の組合せであり、固有ツリー１０のノードがノード２２〜２９を形成し、固有ツリー１４のノードがノード３０〜３３を形成する。
【００３５】
図４（Ｃ）および４（Ｄ）に略図で示す方法によって、ローツリー２０が論理ツリー２２２に変換される。ローツリー２０から論理ツリー２２２に移動するために、開発者はローツリーにヒントを挿入することができる。開発者は、ローツリー２０内のノードを、「自身を隠す（ｈｉｄｅ　ｓｅｌｆ）」、または「自身と子を隠す（ｈｉｄｅ　ｓｅｌｆ　ａｎｄ　ｃｈｉｌｄｒｅｎ」、または「ノードの子を隠す（ｈｉｄｅ　ｃｈｉｌｄｒｅｎ　ｏｆ　ｎｏｄｅ）」などとマークすることができる。開発者はまた、ノードを横方向に移動することができ、または子の前にノードを配置することもできる。ローツリー２０でのこれらの「ヒント」および修正を使用して、論理ツリー２２２が形成される。例えば、図４（Ｃ）では、ブロック４０および４１で示すように、開発者が、ローツリー２０のノード２４〜２６および３３を対象でないものとしてマークしている。通常、ユーザから見えない要素を含むノードは、対象でないものとしてマークされる。可視のＵＩに関係するノードは通常、対象のものとみなされ、ＡＴクライアント３００が使用するために論理ツリー２２２内に含まれる。図４（Ｄ）に示すように、対象でないものとマークされたノードは、論理ツリー２２２内に含まれない。
【００３６】
アクセシビリティシステム２００は、論理ツリー２２２を使用して、イベントについての情報、システムの状態、オブジェクトの位置、およびコントロールについての情報を見つける。周知のシステムは、そのツリー内を調査する機能を有さない。論理ツリー２２２は、クライアント３００のプリファレンスに基づいてナビゲートすることができ、使用中のサーバ側アプリケーションの如何に関わらず、情報を提供することができる。
【００３７】
動作の際に、クライアント３００がアプリケーションについてのユーザに関する情報を得る必要がある場合、クライアント３００は押下するボタンを探し、ボタン上のテキストを観測する。クライアント３００は、ＡＰＩ「要素を検出（ｆｉｎｄ　ａｎ　ｅｌｅｍｅｎｔ）」を呼び出す。このＡＰＩは、クライアント側インタフェース２２０の論理ツリー２２２内の位置に対して参照される値を返す。論理ツリー２２２を介して、アクセシビリティシステム２００は、使用中のアプリケーションの如何に関わらず、クライアント３００にＵＩの抽象ビューを与える。抽象モデルは、リストボックス、ボタン、または他のＵＩコンポーネントが互いに共通に有すると考えることができる構造、プロパティ、イベント、および機能を含む。
【００３８】
論理ツリー２２２は、ＵＩの論理的表現である単一の統合ツリーであり、クライアント３００にとって対象の要素だけを含む形状に形成される。したがって、ＡＴ製品に、ＵＩ要素の構造的階層をフィルタさせ、エンドユーザに提示されるモデルを推論させるのではなく、論理ツリー２２２は、エンドユーザに提示される構造に厳密にマッピングされる階層を提示する。これにより、ユーザに対するＵＩを記述するＡＴ製品の作業が著しく単純化され、ユーザがアプリケーションと対話する助けとなる。
【００３９】
この論理ＵＩツリー２２２は、アクセシビリティシステム２００の基本的部分であるので、アクセシビリティシステム２００の他のコンポーネントのすべては、論理ツリー２２２から動作するように設計される。例えば、図６に、非常に単純な構造を有するように見える単純なダイアログボックス６０を示す。しかし、現在利用可能なアクセシビリティ技術を介して見たとき、このダイアログボックス６０の構造は驚くほど複雑である。このダイアログボックス６０は、エンドユーザにとって意味のあるものを発見するためにＡＴ製品がフィルタしなければならない２６４個のオブジェクトを含む。アクセシビリティシステム２００と、論理ＵＩツリー２２２に対するアクセシビリティシステム２００のサポートを用いて、このダイアログボックス６０を所有する開発者は、いくつかのプロパティを設定し、図６に示す以下の構造をＡＴ製品３００に提示することができる。
【００４０】
図６に示すように、「実行」ダイアログでは、開発者は、フライングウィンドウグラフィック６２や、６３の「プログラム、フォルダ、文書、またはインターネットリソースの名前を入力すると、ウィンドウはそれを開きます」を対象のものとして指示することができる。開発者はまた、メモ帳、ワード、電卓などを含むコンボボックス６４と、ＯＫボタン６５、キャンセルボタン６６、およびブラウズボタン６７も対象のものとして指示することができる。これにより、開発者の要素階層をタグ付けし、それによってＵＩアクセシビリティシステム２００を介して開発者のアプリケーションのＵＩ論理表現を生成する低コストなメカニズムが開発者に提供される。図示する各機能は、論理ツリー２２２内の他の各ノードと指定の関係を有するノードによって表現することができる。この論理表現により、テストチームと、ＡＴ製品すなわちクライアント３００に対して直接の利点が提供される。
【００４１】
１組のＡＰＩにより、クライアント３００がツリーを取得することが可能となる。機能には、（１）ポイントごとの論理要素、（２）イベントからの論理要素、（３）現在フォーカスしている論理要素が含まれる。前述のように、論理要素はＵＩコンポーネント、恐らくはコントロール、コントロールの一部、あるいはコンテナまたは論理的グループ化（すなわちダイアログ、ペイン、またはフレーム）を表す。コントロールは、その機能の点で非常に様々である可能性がある。したがって、異なるインタフェースを使用して、特定のタイプのコントロールに関連する機能を表すことができる。これらのコントロール特有のインタフェースは、すべてのコントロールに共通の機能を表す共通ベースインタフェースから導出される。共通ベースインタフェースは、（１）論理ツリー２２２をナビゲートするメソッド、（２）プロパティ値を取得する一般的メソッド、（３）サポートされるコントロール特有のインタフェースにアクセスするメソッドを含む。論理ツリー２２２をナビゲートする際、基礎となる各アプリケーションＵＩ技術は、ナビゲーションのためのそれ自体の技法を提供する。
【００４２】
論理ツリー２２２はユーザにとって究極の対象であるが、ロー（ｒａｗ）要素ツリー２０もまた、いくつかの重要な機能を提供する。論理ツリー２２２はユーザが関係する要素だけを含むが、ロー要素ツリー２０は、基礎となるフレームワークの実装構造を表す２２などのノードを含む。例えばＷｉｎ３２　ＵＩフラグメントでは、このツリーはＨＷＮＤを表すノードを含む。ある点では、ロー要素ツリー２０は、論理要素ツリー２２２と、基礎となるフレームワーク自体の固有要素ツリーとの間の「妥協点」である。ロー要素ツリー２０は、論理要素ツリー２２２を構築する基礎として使用され、固有要素が最初にシステムに接続される所である。
【００４３】
デバッグおよびテストのためにもロー要素ツリー２０を使用することができる。問題のある特定のノードがどこかを特定し、または表現することが有用である。ベースロー要素ノードに対する機能には、ロー要素ツリーをナビゲートするメソッド、対応する論理要素にジャンプするメソッド（それが存在する場合）、この要素に対する「デバッグ文字列」、例えばＨＷＮＤノードに対する「ＨＷＮＤ　０ｘ４８３ＦＥ」含むプロパティ、およびその他の「舞台裏のインフラストラクチャ（ｂｅｈｉｎｄ　ｔｈｅ　ｓｃｅｎｅｓ　ｉｎｆｒａｓｔｒｕｃｔｕｒｅ）」メソッドが含まれる。これらの他のメソッドにより、ヒットテストおよび位置決め、イベントが可能となり、フレームワークが容易に提供することができるプロパティ（例えば、フォーカス、イネーブル）の公開が可能となる。
【００４４】
ロー要素ツリー２０は、様々なレンダリングエンジンからの要素を表すノード２２〜３３を含む。ロー要素ツリーは、レンダリングエンジンがレンダリングエンジン自体をアクセシビリティシステム２００に接続する開始点として使用され、ロー要素ツリーは、Ｗｉｎ３２からのＨＷＮＤなどの固有の要素を統合論理ツリー２２２に適合させる軽量アダプタオブジェクトから構築される。ロー要素ツリーは、ある技術が別の技術をホストするホスティング遷移を処理するためにもさらに使用される。ロー要素ツリー２０は、どの論理ツリー２２２が構築されるかに基づくので、ロー要素ツリー２０を使用して、論理ツリー２２２が完全であり、接続されているかをチェックすることができ、未反映の要素をチェックすることができる。ロー要素ツリー２０は、ある基本要素ＩＤを提供することや、フォーカス、イネーブル、および位置などの、ある基本フレームワーク提供の要素プロパティを提供することなど、他のインフラストラクチャ状のタスクのためにさらに使用することができる。
【００４５】
ロー要素ツリー２０は、ＡＴ製品すなわちクライアント３００についての主な情報源ではなく、論理ナビゲーションには使用されず、エンドユーザに公開されない。ロー要素ツリー２０はまた、ツリー内の要素の位置を将来のある時点で返すことができるように、ツリー内の要素の位置を取り込むために使用することもできない。論理要素ツリー２２２は、これらのすべての機能を実施する。
【００４６】
ロー要素ツリー２０は一般に、表現される論理要素の知識なしに、基礎となるレンダリング技術（ＨＷＮＤ、Ｅｌｅｍｅｎｔ）のロー要素から機械的に構築することができる。したがって、ロー要素ツリー２０を使用して、論理ツリー２２２内の反映されていないロー要素を探すことができる。ロー要素ツリー２０により、ノードの位置の「スタックダンプ」状の記述を取り込むことが可能となるので、ロー要素ツリー２０は有用なデバッグツールおよび診断ツールである。さらに、周知のシステムでは、そのシステムのツリーがコード特有の基準に基づき、異なる技術を用いて実装することが難しい。この手法は、基礎となる任意のレンダリング技術によって実装することができ、または基礎となる任意のレンダリング技術の代わりに実装することができる一般的で抽象的な「ロー要素」タイプを使用する。
【００４７】
ロー要素ツリーを得るために、ロー要素ルートの呼出しにより、その親がヌルであり、他のすべてのノードがそれを究極の先祖として有することを確実にすることによって検証されたデスクトップ要素が取得される。他の要素を得るために、指定のポイントからロー要素を得るメソッドを呼び出すことにより、有効な画面座標を使用して要素が返される。ロー要素ツリーを得た後、要素（親、兄弟、および子）をチェックすることによってロー要素ツリーをチェックし、検証することができる。
【００４８】
動作の際には、クライアント３００は、親、次の兄弟、前の兄弟、第１の子、最後の子などの関係を使用して、ロー要素ツリー２０をナビゲートすることができる。次いでクライアント３００は、ロー要素から、論理ツリー２２２内の対応する論理要素にジャンプすることができる。
【００４９】
イベントメカニズム
クライアント３００がイベントの通知の継続を望むとき、クライアント３００は、図３に示すＵＩオートメーションクライアント２０２を介して登録し、情報を得ることができる。クライアント３００は、進むための情報を望む場合、受け取ることを望むオブジェクト情報を指定し、戻ることを望む場合、プロパティのリストを指定する。クライアントの要求は、ＵＩオートメーションクライアント２０２に進む。ＵＩオートメーションクライアント２０２は、デスクトップ上の任意のプロセスを監視することができる。ＵＩオートメーションサーバ２０４は、聴取しているクライアント３００を追跡し、ＵＩオートメーションクライアント２０２に戻る方法を認識する。ＵＩオートメーションクライアント２０２は、クライアントの対象をＵＩエンジン２０６にアドバイスし、したがってＵＩエンジン２０６は、ＵＩオートメーションサーバ２０４にイベントを通知するときを認識している。ＵＩエンジンはクライアントのアドバイスを使用する必要がないが、その代わりに、常にＵＩオートメーションサーバ２０４にイベントを通知するか、それともクライアントが何らかのイベントを聴取している場合にのみＵＩオートメーションサーバに通知するかを選ぶことができる。イベントを聴取するクライアントが存在する場合にのみＵＩエンジンがＵＩオートメーションサーバの通知をオンにしたい場合、アドバイスは有用である。ＵＩエンジンはこのことを行い、ＵＩの速度の生じ得る劣化を回避し、普通なら不要であるコードモジュールのロードを回避する。
【００５０】
次いでＵＩエンジン２０６は、ＵＩオートメーションサーバ２０４にＵＩイベントを通知する。ＵＩオートメーションサーバ２０４は、要求された論理要素をクライアント３００に返し、クライアント３００が要求したイベントのプロパティを含む情報をクライアント３００に送る。ＵＩオートメーションサーバ２０４は、どの情報がクライアント要求の範囲内にあるかを判定し、情報が対象のものである場合にのみ、論理要素を形成する。論理要素の形成には、ＵＩオートメーションサーバ側で、クライアントがイベントを処理するときに使用するとクライアントが指示した１組のプロパティをプリフェッチすることを含む。例えば、ＵＩオートメーションサーバ２０４は、コンボボックスに関する論理要素を見つけることができる。範囲は、コンボボックス、またはその子となる。クライアント３００は、登録段階の間に、子／親／従属関係を要求して範囲を定義することができる。
【００５１】
情報が要求された範囲内にあるかどうかをＵＩオートメーションサーバ２０４が判定した後、ＵＩオートメーションサーバ２０４は論理要素を構築する。ＵＩオートメーションクライアント２０２は、要求した情報をＵＩオートメーションサーバ２０４から受け取るターゲットアプリケーションと通信し、クライアント３００上の適切な空間にオブジェクトをルーティングすることにより、クライアント３００にサービスする。
【００５２】
ＵＩオートメーションサーバ２０４は、イベント通知を受け取るようにクライアント３００が登録したときに作成される。例えば、ＵＩエンジン２０６は、Ｍｉｃｒｏｓｏｆｔ　Ｗｏｒｄ（商標）ワードプロセッシングアプリケーションを実行中である。クライアント３００は、名前プロパティの変更について登録している。クライアントの登録により、ＵＩオートメーションサーバ２０４が作成される。クライアントの登録はまた、名前プロパティについてＵＩオートメーションサーバ２０４に通知することを開始するようにＵＩエンジン２０６にアドバイスする。ＵＩエンジン２０６は範囲情報を取得しない。ＵＩエンジン２０６は、サーバ側に関するＡＰＩのうち１つを呼び出す。ＵＩエンジン２０６は、（１）変化したプロパティ、（２）プロパティの新しい値、および（３）恐らくは古い値を指定する。ＵＩオートメーションサーバ２０４は、クライアント３００にとって対象のイベントに基づいて作成され、したがってイベント、プロパティ、クライアント、および対象の範囲を認識し、したがって、何らかのクライアント３００が、作成された論理要素を対象とするかどうかを認識する。複数のクライアント３００が特定のＵＩオートメーションサーバ２０４を有するイベントに関して登録しており、それらのクライアント３００が同じイベントに関して登録しており、返される論理要素と共にバルクフェッチすべきプロパティを問い合わせる場合、ＵＩオートメーションサーバ２０４がクライアント３００にイベントを送り返すとき、各クライアント３００は、論理要素と共に返される、要求したバルクフェッチプロパティの組合せを取得する。
【００５３】
聴取するクライアント３００ごとに、ＵＩオートメーションサーバ２０４は、イベントに関連する論理要素をクライアントに渡すことをクライアント３００に通知する。ＵＩオートメーションサーバ２０４は、１つの論理要素だけを生成する。これは、各クライアント３００が、イベントのソースであるオブジェクトの自分所有のコピーを求めることが必要である現行技術に勝る改良である。
【００５４】
クライアントがイベントについて登録するときにＵＩエンジン２０６がＵＩオートメーションクライアントのアドバイスを使用しない場合、ＵＩエンジン２０６は、聴取している何らかのアクセシビリティなクライアント３００が存在しているかどうかをＵＩオートメーションサーバ２０４に問い合わせることができ、聴取しているアクセシビリティなクライアント３００が存在しない場合、情報を作成し、それをＵＩオートメーションサーバ２０６に送る作業を回避することができる。例えば、画面リーダがクライアント３００であり、情報の行先、イベントを受け取るためのフォーカス変更オブジェクト、および対象のプロパティの特定のリストを指定する。ＵＩエンジン２０６はアドバイスを受け、イベントをＵＩオートメーションサーバ２０４に送るべきであることを認識する。フォーカス変更を検出したとき、ＵＩエンジン２０６はＵＩオートメーションサーバ２０４に通知する。ＵＩオートメーションサーバ２０４は、周知のインタフェースに変換し、イベントおよびオブジェクトをＵＩオートメーションクライアント２０２に送る。ＵＩオートメーションクライアント２０２は、クライアント３００上の適切な空間にオブジェクトをルーティングする。
【００５５】
上述のコンポーネントは、イベントについてのカーネル中の中央リポジトリをなくすることにより、周知のシステムを改良する。その代わり、ＵＩオートメーションサーバ２０４は、ＵＩオートメーションサーバ２０４が実行中の状況についての情報を取得することに対象のすべてのクライアント３００を認識する。カーネルリポジトリの省略により、ＵＩオートメーションサーバ２０４がカーネルで先に実行された機能を実施するので、よりピアツーピアな対話も生み出される。本発明のアクセシビリティシステム２００は、クライアント３００が確認したいものを指定する能力をクライアント３００に与え、それによって、フィルタリングが、ＵＩオートメーションサーバ２０４を使用してサーバ側で実施される。
【００５６】
図７は、イベント登録／通知方法に関係する手順を示すフローチャートである。ステップ８０では、クライアント３００がイベント通知を要求する。ステップ８２では、ＵＩオートメーションクライアント２０２が、ＵＩオートメーションサーバ２０４に要求を通信する。ステップ８４では、ＵＩオートメーションクライアントが、ＵＩオートメーションクライアントが通知を望むことをＵＩエンジン２０６にアドバイスする。ステップ８６では、ＵＩオートメーションサーバ２０４が、ＵＩエンジン２０６から通知を受け取る。ステップ８８では、ＵＩオートメーションサーバ２０４が、受け取った情報をフィルタする。受け取った情報がユーザにとって対象でないものであることがステップ９０で判明した場合、ＵＩオートメーションサーバ２０４は情報を廃棄し、ステップ９２の通知の待機に進む。あるいは情報が対象のものであることがステップ９０で判明した場合、ステップ９４で、ＵＩオートメーションサーバ２０４は論理要素を作成し、それをＵＩオートメーションクライアント２０２に送る。ステップ９６では、ＵＩオートメーションクライアント２０２が、受け取った情報をクライアント３００上の適切な場所に置く。
【００５７】
アクセシビリティシステム２００のイベントメカニズム２１０により、クライアント３００が、ＵＩのプロパティ変化と、コントロールの構造のツリー変化と、マルチメディアイベントと、関係する情報とに関するイベント通知の受取りを登録することが可能となる。この機能を有さない場合、クライアント３００は、何らかの情報、構造、または状態が変化したかどうかを確認するために、システム内のすべてのＵＩ要素を連続的にポーリングしなければならない。アクセシビリティシステム２００のイベントメカニズム２１０により、クライアント３００が、プロセス外のイベントを受け取り、イベント通知と共に返すべきプロパティの集合を要求し、複数の要素に対するイベントに関して登録することも可能となる。
【００５８】
イベントメカニズム２１０は、ＡＴ製品またはテストアプリケーションがイベントに関して登録するのに使用するインタフェース、イベント通知を受け取るのに使用するオブジェクトに対してＡＴ製品が実装するインタフェース、およびＵＩイベントのイベントエンジンを通知するのに使用するインタフェースコントロールインプリメンタを公開する。イベントメカニズム２１０は、ＵＩをレンダリングするのに使用するＵＩエンジンとは無関係に、ＡＴ製品およびテストアプリケーションがイベントを受け取ることを可能とし、かつ基礎となる技術の如何に関わらず、ＡＴ製品およびテストアプリケーションが、トップレベルアプリケーションウィンドウを追跡し、フォーカスすることを可能にする目的で使用される。
【００５９】
図２に、クライアント３００がアクセシビリティシステム２００とどのように対話するかを示す。プロセス間で、イベントのグローバルな管理は存在しない。その代わりに、各アクセシビリティシステムのクライアント３００またはサーバ４００は、それ自体のコンテキストを有する。クライアントアプリケーションは、アクセシビリティシステム２００をサポートするアプリケーションに関するイベントのみを受け取る。アプリケーションでアクセシビリティシステムのイベントの使用を開始するには、クライアント３００は、以下の４つのうち１つを行うことができる。（１）「ＡｄｄＴｏｐＬｅｖｅｌＷｉｎｄｏｗＬｉｓｔｅｎｅｒ」ＡＰＩを使用して、デスクトップ上と、そのイベントについてのハンドラ内に出現する新しいＵＩを見つけ、他のイベントに関して登録し、それによって任意のプロセスからイベントを受け取る。（２）Ｆｉｎｄ　ＡＰＩのうち１つを使用して対象のＵＩの位置を突き止め、特定の１つのＵＩをターゲットとする。（３）画面上のウィンドウハンドルまたはポイントを見つけること、そのハンドルまたはポイントを使用して、論理要素を獲得し、イベントを聴取するための参照として使用することなど、対象のＵＩを発見するための他の何らかの手段を使用する。または、（４）「ＡｄｄＦｏｃｕｓＣｈａｎｇｅｄＬｉｓｔｅｎｅｒ」ＡＰＩを使用して、入力フォーカスを追跡し、現在フォーカスを有しているＵＩに対するイベントに関して登録する。
【００６０】
トップレベルウィンドウは、その親がデスクトップであるウィンドウである。「オープンされる」という用語の使用は、新しいトップレベルウィンドウがユーザに対して出現することを示す。「クローズされる」という用語の使用は、トップレベルウィンドウが破棄されることを示す。
【００６１】
アクセシビリティシステムのサーバ側インタフェース２３０は、追加され、除去されるイベントをアクセシビリティシステム２００に通知するための２つのＡＰＩを含む。ＵＩオートメーションクライアントは、クライアントがイベントに関して登録および登録解除するときに、これらのＡＰＩを呼び出す。これにより、ＵＩエンジン２０６が、どのアクセシビリティイベントがそのコンテキストで要求されているかについての情報を取得することが可能となる。
【００６２】
適用可能なら、イベントは、アプリケーションの論理要素ツリー２２２からの論理要素と関連付けられる。論理要素が適用可能でない場合、イベントは、イベントのソースを表す、人間が可読な文字列または他の周知のオブジェクトと関連付けられる。イベントメカニズム２１０は、イベント登録の間、ユーザ供給のプリファレンスに基づくフィルタリングを提供する。イベントに関係するデータを作成し、そのクロスプロセスをクライアントに送る前に、クライアントのフィルタリングプリファレンスをサーバで使用することにより、イベントメカニズム２１０は、クロスプロセスコールの数を減少させることによってプロセス外パフォーマンスを本質的に改良する。イベントメカニズム２１０は、イベント登録中、イベントにとって対象の論理要素のプロパティを指定する方法を提供する。これにより、クロスプロセスコールの数がさらに減少する。イベントメカニズム２１０は、オペレーティングシステム（ＯＳ）の大きな変更を必要とせずに拡張可能である。管理されるコードを使用してイベントメカニズム２１０を実装することができるが、未管理のアプリケーションは、ＣＯＭ相互運用性を介してイベントメカニズム２１０にアクセスすることができる。
【００６３】
ＡＴクライアント３００がイベントの処理を実行するのに、（１）イベント登録、および（２）コールバックでのイベントの処理という２つのタスクがある。この２つのタスクに対する重要な要件は、管理されるコードと未管理のコードのどちらでも使用可能であるべきことである。本発明の一実施形態では、クライアント３００は、イベントに関して登録するときにインタフェースを渡すことができる。クライアント３００は、登録するときに周知のインタフェースを実装するオブジェクトを渡し、ＵＩエンジン２０６は、そのインタフェースに対してコールバックし、リスナに通知する。論理要素ツリー２２２中にソースオブジェクトが存在する場合、コールバックはそれぞれ、ソース要素および追加のパラメータを受け取る。
【００６４】
ＡＴ製品によって実装される周知のインタフェースが、イベントを返すためのメソッドとして使用される。以下の各節では、いくつかのタイプのイベント、登録がどのようなものか、およびイベントがどのように受け取られるかを示す。
【００６５】
１．トップレベルウィンドウイベント
トップレベルウィンドウイベントは、メニューおよびコンボボックスドロップダウン、あるいはデスクトップを親として有する任意の機能に関するイベントを含む。本発明の実施形態では、ＡｄｄＴｏｐＬｅｖｅｌＷｉｎｄｏｗＬｉｓｔｅｎｅｒメソッドを使用して、オープンおよびクローズされるトップレベルウィンドウの通知を受け取る。ＡｄｄＴｏｐＬｅｖｅｌＷｉｎｄｏｗＬｉｓｔｅｎｅｒの呼出しにより、現在のデスクトップ上での新しいトップレベルウィンドウのオープン、またはトップレベルウィンドウのクローズに関する通知が取得される。ＲｅｍｏｖｅＴｏｐＬｅｖｅｌＷｉｎｄｏｗＬｉｓｔｅｎｅｒメソッドにより、デスクトップ上でのトップレベルウィンドウのオープンまたはクローズに関する通知の受取りを停止するメカニズムが提供される。このメソッドは、コールバックオブジェクトを使用して、このリスナを識別する。したがって、ＲｅｍｏｖｅＴｏｐＬｅｖｅｉＷｉｎｄｏｗＬｉｓｔｅｎｅｒメソッドに渡されるオブジェクトは、ＡｄｄＴｏｐＬｅｖｅｌＷｉｎｄｏｗＬｉｓｔｅｎｅｒに渡されるオブジェクトと同じである。ＯｎＴｏｐＬｅｖｅｌＷｉｎｄｏｗＯｐｅｎｅｄメソッドは、オープンされる新しいトップレベルウィンドウごとに１度、アクセシビリティシステム２００によって呼び出される。同様に、ＯｎＴｏｐＬｅｖｅｌＷｉｎｄｏｗＣｌｏｓｅｄメソッドは、トップレベルウィンドウがクローズしたときにアクセシビリティシステム２００によって呼び出すことができる。この通知を受け取るためには、クライアント３００はＡｄｄＴｏｐＬｅｖｅｌＷｉｎｄｏｗＬｉｓｔｅｎｅｒメソッドを呼び出す。
【００６６】
２．フォーカスイベント
クライアント３００はしばしば、フォーカスを追跡するためのメソッドを必要とする。これをＭｉｃｒｏｓｏｆｔ　Ｗｉｎｄｏｗｓ（登録商標）ＯＳで行うことは困難である。例えば、メニュー（例えばＭｉｃｒｏｓｏｆｔ　Ｗｏｒｄのファイルメニュー）をドロップダウンしたとき、メニュー中の項目は、ユーザがカーソルを下方に１つずつ移動するごとにフォーカスを得る。メニューがクローズしたとき（例えばユーザがＥＳＣキーを押したとき）、現在はフォーカスイベントが送られない。その代わりに、フォーカス変更に対象のクライアントは、いくつかのイベントを聴取し、そのうちのどれがフォーカス変更を論理的に表すかを解釈しなければならない。本発明の実施形態では、ＡｄｄＦｏｃｕｓＣｈａｎｇｅｄＬｉｓｔｅｎｅｒメソッドを使用して、リスナにフォーカス変更イベントを通知することができる。クライアント３００は、返すべき１組のプロパティを指定することができる。論理要素と共に返すプロパティを指定するこの機能は、すべてのイベント登録ＡＰＩの一部である。クライアント３００は、ＲｅｍｏｖｅＦｏｃｕｓＣｈａｎｇｅｄＬｉｓｔｅｎｅｒメソッドを呼び出して、フォーカス変更に関する通知の受取りを停止することができる。このメソッドは、コールバックオブジェクトを使用してこのリスナを識別し、この場合、ＲｅｍｏｖｅＦｏｃｕｓＣｈａｎｇｅｄＬｉｓｔｅｎｅｒメソッドに渡されるオブジェクトはＡｄｄＦｏｃｕｓＣｈａｎｇｅｄＬｉｓｔｅｎｅｒプロシージャに渡されるオブジェクトと同じになる。アクセシビリティシステム２００は、フォーカスが変化したとき、ＯｎＦｏｃｕｓＣｈａｎｇｅｄメソッドを呼び出す。ＯｎＦｏｃｕｓＣｈａｎｇｅｄメソッドで使用されるＦｏｃｕｓＥｖｅｎｔＡｒｇｓパラメータは、フォーカス変更に関係する情報を公開する。最後にフォーカスした論理要素についての情報が利用可能である場合、その要素が、ＯｎＦｏｃｕｓＣｈａｎｇｅｄ要素で使用されるｅｖｅｎｔ　ａｒｇｓパラメータで利用可能となる。何かが明示的に要素にフォーカスを置くまで、ＵＩ要素がフォーカスされないときもある。
【００６７】
３．プロパティ変更イベント
プロパティ変更イベントは、論理要素のプロパティが変化したときに発火される。本発明の実施形態では、クライアント３００がＡｄｄＰｒｏｐｅｒｔｙＣｈａｎｇｅｄＬｉｓｔｅｎｅｒメソッドを呼び出し、プロパティ変化に関する通知を受け取る。プロパティの値がＡｄｄＰｒｏｐｅｒｔｙＣｈａｎｇｅｄＬｉｓｔｅｎｅｒで指定される論理要素ツリー内の論理要素に関して変化したとき、ＯｎＰｒｏｐｅｒｔｙＣｈａｎｇｅｄメソッドが、アクセシビリティシステム２００によって呼び出される。範囲パラメータは、どの要素に関してイベントを発火すべきかを示す。例えば、ウィンドウのルート論理要素と、子孫を求める要求を渡すことにより、そのウィンドウに対するプロパティ変更コールバックが制限される。範囲パラメータがツリー内のすべての要素に設定される場合、その範囲は無視され、デスクトップ上で発生する指定のプロパティに対するどんな変更も送られる。クライアント３００は、様々な数組のプロパティおよび／または様々なコールバックオブジェクトを用いてＡｄｄＰｒｏｐｅｒｔｙＣｈａｎｇｅｄＬｉｓｔｅｎｅｒを複数回呼び出すことができる。アクセシビリティシステム２００によって提供される通知は、変化したプロパティ、新しいプロパティ値、および、利用可能なら古いプロパティ値を示す。
【００６８】
クライアント３００は、ＲｅｍｏｖｅＰｒｏｐｅｒｔｙＣｈａｎｇｅｄＬｉｓｔｅｎｅｒメソッドを呼び出し、プロパティ変化に関する通知の受取りを停止することができる。このメソッドは、範囲要素およびコールバックオブジェクトを使用してこのリスナを識別し、この場合、渡されるオブジェクトはＡｄｄＰｒｏｐｅｒｔｙＣｈａｎｇｅｄＬｉｓｔｅｎｅｒに渡されるオブジェクトと同じでなければならない。
【００６９】
４．コントロールパターンからのイベント
コントロールパターンから発火されるイベントは拡張可能である必要があり、したがってこれらのイベントはＧＵＩＤによって識別される。登録時に任意のＧＵＩＤ値が受諾される。任意の新しいコントロールパターンについて、その新しいコントロールパターンがドキュメント化するイベントは、一意のＧＵＩＤである必要がある。ＡＴ製品は、新しいコントロールパターンイベントを聴取するように変更を受ける必要がありうる。リスナもまた、これらのイベントをスコープできる必要がある。例えば、指示テストでは、これらのイベントを、アプリケーション内の特定のアプリケーションまたはコントロールに限定したいことがある。コントロールパターンは、ソースが何かを定義し、イベントコンシューマは、ソース要素およびイベント引数オブジェクトを使用するメソッドを認識するために、文書のその部分を参照する必要がある。
【００７０】
ＡｄｄＥｖｅｎｔＬｉｓｔｅｎｅｒメソッドにより、クライアント３００がコントロールに関するイベントを受け取ることが可能となる。範囲パラメータを使用して、どの要素に対してイベントを発火するかを指示することができる。例えば、ウィンドウのルート論理要素を渡し、子孫を要求することにより、ウィンドウに対するイベントが限定される。ツリー内のすべての要素が望まれる場合、デスクトップ上のすべてのイベントが送られる。ＲｅｍｏｖｅＥｖｅｎｔＬｉｓｔｅｎｅｒメソッドを使用して、コントロールに関するイベントの受取りを停止することができる。このメソッドは、範囲要素、コールバックオブジェクト、およびイベント識別子を使用して、リスナを識別することができる。この場合、渡されるオブジェクトは、ＡｄｄＥｖｅｎｔＬｉｓｔｅｎｅｒに渡されるオブジェクトと同じでなければならない。
【００７１】
アプリケーションがＡｄｄＥｖｅｎｔＬｉｓｔｅｎｅｒメソッドを起動したとき、コントロール特有のイベントが発火され、かつイベントのソースがＡｄｄＥｖｅｎｔＬｉｓｔｅｎｅｒで指定される論理要素ツリー内の論理要素であるとき、ＯｎＥｖｅｎｔメソッドが、アクセシビリティシステム２００によって呼び出される。コントロールに関するイベントが発火されるとき、イベント特有の情報がしばしば利用可能である。
【００７２】
ＲｅｍｏｖｅＡｌｌＬｉｓｔｅｎｅｒｓメソッドは、任意のイベントの受取りを停止するために呼び出すことができる。これは、クライアントアプリケーションがシャットダウンする前にクリーンアップする迅速な方法である。アプリケーションを終了するときにこの除去方法を最適に使用することができる。
【００７３】
５．論理構造変更イベント
論理構造変更イベントは、論理要素ツリー構造が変化したときに発火される。ＡｄｄＬｏｇｉｃａｌＳｔｒｕｃｔｕｒｅＣｈａｎｇｅｄＬｉｓｔｅｎｅｒメソッドは、論理要素ツリーの構造的変化に関する通知を受け取るように実装することができる。論理要素が追加、除去、または無効にされるとき、指定のコールバックオブジェクトに対するメソッドが呼び出される。範囲パラメータは、上述のように要素を制限することができる。ＲｅｍｏｖｅＬｏｇｉｃａｌＳｔｒｕｃｔｕｒｅＣｈａｎｇｅｄＬｉｓｔｅｎｅｒメソッドを呼び出して、論理要素ツリー変化に関するイベントの受取りを停止することができる。このメソッドは、コールバックオブジェクトおよび範囲要素を使用して、このリスナを識別することができ、この場合、渡されるオブジェクトは、ＡｄｄＥｖｅｎｔＬｉｓｔｅｎｅｒに渡されるオブジェクトと同じでなければならない。
【００７４】
子要素が追加され、親がＡｄｄＬｏｇｉｃａｌＳｔｒｕｃｔｕｒｅＣｈａｎｇｅｄＬｉｓｔｅｎｅｒで指定される論理要素ツリー２２２内の論理要素であるとき、アクセシビリティシステム２００によってＯｎＣｈｉｌｄＡｄｄｅｄメソッドをコールすることができる。子要素が除去され、古い親がＡｄｄＬｏｇｉｃａｌＳｔｒｕｃｔｕｒｅＣｈａｎｇｅｄＬｉｓｔｅｎｅｒで指定される論理要素ツリー内の論理要素であるとき、ＯｎＣｈｉｌｄＲｅｍｏｖｅｄメソッドが、アクセシビリティシステム２００によって呼び出される。
【００７５】
短期間に多数の子（例えば２０を超える子）が追加されるとき、ＯｎＣｈｉｌｄｒｅｎＢｕｌｋＡｄｄｅｄメソッドがアクセシビリティシステムによって呼び出される。多数の子が短期間に除去されるとき、ＯｎＣｈｉｌｄｒｅｎＢｕｌｋＲｅｍｏｖｅｄメソッドがアクセシビリティシステムによって呼び出される。多数の子（例えば２０を超える子）が短期間に追加され、かつ除去されるとき、ＯｎＣｈｉｌｄｒｅｎＩｎｖａｌｉｄａｔｅｄがアクセシビリティシステム２００によって呼び出される。
【００７６】
６．マルチメディアイベント
別のタイプのイベントはマルチメディアイベントである。マルチメディアは、サウンド、ビデオ、アニメーションを含むことができる。メソッドは、マルチメディアイベントをサポートし、「停止」、「休止」、「早送り」、「巻戻し」、および「消音」を含むクライアントのアクションを通知する。マルチメディアリスナを追加および除去するために、前述と同様のメソッドを実装することができる。
【００７７】
７．シンプルサウンドイベント
シンプルサウンドイベントは、マルチメディアイベントとは別々に扱うことができる。シンプルサウンドイベントは、サウンド自体以外の何らかのイベントをユーザに搬送するために存在する、単純な短期間のサウンドを表す。シンプルサウンドイベントは、新しいメールが届いたときに再生されるサウンド、ラップトップの電池が少ないときに生成されるサウンド、またはメッセージボックスがＩｃｏｎＥｘｃｌａｍａｔｉｏｎタイプで表示されるときに再生されるサウンドを含むことができる。ＡｄｄＳｏｕｎｄＬｉｓｔｅｎｅｒメソッドをコールして、再生されるシンプルサウンドの通知を受け取ることができ、ＲｅｍｏｖｅＳｏｕｎｄＬｉｓｔｅｎｅｒメソッドを実装して、シンプルサウンドイベントに関する通知の受取りを停止することができる。
【００７８】
ＯｎＳｏｕｎｄメソッドは、シンプルサウンドが再生されたときにアクセシビリティシステム２００によって呼び出される。この通知を受け取るには、聴取アプリケーションはＡｄｄＳｏｕｎｄＬｉｓｔｅｎｅｒを呼び出す。ＯｎＳｏｕｎｄメソッドは、サウンドの名前、音源、ユーザにとってのサウンドの重要度を示す警報レベル値の情報を取り出す。可能な警報レベルには、重要度が未知であることを示す「未知」、情報が提示されたことを示す「情報」、警告状態を示す「警告」、ユーザ応答が必要であることを示す「質問」、イベントが重大ではないが重要である可能性があることを示す「感嘆（Ｅｘｃｌａｍａｔｉｏｎ）」、および重大なイベントが発生したことを示す「重大」が含まれる。
【００７９】
８．ソフトフォーカスイベント
ソフトフォーカスイベントはデスクトップ上に出現するが、バックグラウンドにとどまる。ソフトフォーカスイベントのいくつかの例は、通知エリアで「新しい更新が利用可能である」ことを示すバルーンヘルプウィンドウ、フォーカスを得たいバックグラウンドアプリケーションについてのタスクバー内のフラッシングアイコン、および印刷が開始したとき、および終了したときに通知トレーに出現し、通知トレーから消滅するプリンタアイコンである。これらのイベントは、他のイベントカテゴリと幾分重なるように見える（マルチメディアはソフトフォーカスと同様にアニメーションイベントを含むことがある）。しかし、イベントは、イベントがどのように搬送されるかではなく、イベントがユーザに何を搬送するかに基づいて分類される。
【００８０】
入力フォーカスを得ずにユーザの注意を引かせようとするイベントの通知を受け取るようにＡｄｄＳｏｆｔＦｏｃｕｓＬｉｓｔｅｎｅｒメソッドを実装することができる。ＲｅｍｏｖｅＳｏｆｔＦｏｃｕｓＬｉｓｔｅｎｅｒメソッドは通知を停止する。このメソッドは、コールバックオブジェクトを使用してこのリスナを識別し、したがって渡されるオブジェクトは、ＡｄｄＳｏｆｔＦｏｃｕｓＬｉｓｔｅｎｅｒに渡されるオブジェクトと同じになるべきである。
【００８１】
ＯｎＳｏｆｔＦｏｃｕｓメソッドは、ソフトフォーカスイベントが生じたときにアクセシビリティシステム２００によって呼び出すことができる。この通知を受け取るためには、聴取アプリケーションまたはクライアント３００が、ＡｄｄＳｏｆｔＦｏｃｕｓＬｉｓｔｅｎｅｒを呼び出す。利用可能なら、ソース要素を使用して、イベントについてのより多くの情報を取得することができる。ソース要素の例は、システムトレー内の通知アプリケーションのうち１つによって使用されるバルーンヘルプウィンドウの論理ルート要素である。ＯｎＳｏｆｔＦｏｃｕｓメソッドは、イベントの名前、イベントのソース、およびユーザにとっての重要度を示す警報レベルを返す。
【００８２】
以下の表に、クライアント３００がＡｄｄＴｏｐＬｅｖｅｌＷｉｎｄｏｗＬｉｓｔｅｎｅｒ　ＡＰＩを使用して特定のプロセスからイベントを聴取するときの、クライアント３００およびアクセシビリティシステム２００の動作を示す。
【００８３】
【表１】
2004145851.tif 000003
【００８４】
イベント通知
対応するイベント通知メソッドは、サーバ４００または基礎となるＵＩエンジンによって使用され、上記で列挙したアクセシビリティシステムのイベントがサポートされる。ＵＩオートメーションサーバＡＰＩは、サーバまたは基礎となるＵＩエンジンが呼び出して、このことを実施することができるメソッドを含む。例えば、特定のプロパティが論理要素に対して変化したときにサーバが通知するために呼び出すＮｏｔｉｆｙＰｒｏｐｅｒｔｙＣｈａｎｇｅｄメソッドがある。適切なパラメータを生成し、ＵＩが変化したときにこの通知メソッドを呼び出すことはサーバ４００または基礎となるＵＩエンジンの役割である。
【００８５】
サーバメソッド
ＡｄｖｉｓｅＥｖｅｎｔＡｄｄｅｄメソッドおよびＡｄｖｉｓｅＥｖｅｎｔＲｅｍｏｖｅｄメソッドは、クライアント３００がイベントを要求しているときにサーバ４００に通知するためにＵＩオートメーションクライアントによって呼び出される。これにより、対象のイベントが存在しないときに、サーバ４００がアクセシビリティシステム２００にイベントを伝えないようにすることが可能となる。サーバは、これらの通知を使用して、イベントを使用するクライアントが存在するかに応じて実行を行うことができる。
【００８６】
コントロールパターン
アクセシビリティモデルは、特定のＵＩ要素またはコントロールによってサポートされる機能を分類し、公開する独自の手法を提供する。従来技術のように機能を特定のコントロールタイプ（例えば、ボタン、エディットボックス、またはリストボックス）と関連付ける代わりに、アクセシビリティモデルは、ＵＩ挙動の１つの面をそれぞれ定義する１組の共通コントロールパターンを定義する。これらのパターンは互いに独立であるので、これらのパターンを組み合わせて、特定のＵＩ要素によってサポートされる機能の全セットを記述することができる。
【００８７】
例えば、要素を、Ｂｕｔｔｏｎなどの要素のクラス名によって記述する代わりに、アクセシビリティシステム２００は、起動可能なコントロールパターンをサポートするものとして要素を記述する。コントロールパターンは、要素によってサポートされる構造、プロパティ、イベント、およびメソッドを定義する。したがって、これらのパターンにより、クライアントがコントロールの挙動を照会することが可能となるだけではなく、特定のパターンに対して設計されたインタフェースを使用することによってクライアントがコントロールをプログラム式に操作することも可能となる。例えば、ＳｅｌｅｃｔｉｏｎＣｏｎｔａｉｎｅｒパターンは、選択された項目について照会し、特定の項目を選択または選択解除し、またはコントロールが単一の選択モードをサポートするか、それとも複数の選択モードをサポートするかを判定するメソッドを提供する。
【００８８】
アクセシビリティシステム２００に対して現在定義されているコントロールパターンには、（１）選択コンテナ、（２）階層、（３）起動可能、（４）単純グリッド、（５）テキスト、（６）値、（７）オブジェクト表示、（８）スクロール可能、（９）ソート可能、（１０）描画、および（１１）他のコンテナ、が含まれる。
【００８９】
この技法により、コントロール開発者が、ＡＴ製品およびテストスクリプトに対する挙動を公開する明確な手法を依然として有しながら、新しいタイプのコントロールを実装することが可能となる。新しいタイプの挙動が導入される場合、新しいコントロールパターンを定義して、必要な機能を表すことができる。
【００９０】
今や、各ＵＩコントロールではなく、各パターンと共にどのように動作するかを理解できるように支援技術製品およびテストスクリプトを書くことができる。コントロールクラスよりもコントロールパターンはずっと少ないので、この技法により、必要なコードが最小となる。（周知のコントロールパターンがサポートされる限りは）この手法はまた、効果的に新しいコントロールに問い合わせ、操作することができる、より柔軟なアーキテクチャを促進する。
【００９１】
以下の表に、この技法がサポートする共通のコントロールおよびパターンのうちのいくつかの例を与える。
【００９２】
【表２】
2004145851.tif 000004
【００９３】
共通コントロールパターンに関連する機能を公開するために、より具体的なインタフェースを使用する。これらのパターンの例には、（１）選択管理コンテナ、（２）グリッドレイアウトコンテナ、（３）値を含むＵＩ要素、（４）オブジェクト（ファイル、Ｅメールなど）を表すアイコン、および（５）起動することができるＵＩ要素、が含まれる。一般には、これらのパターンは特定のコントロールに厳密に結合されているのではなく、様々なコントロールが同じパターンを実装することができる。例えば、リストボックス、コンボボックス、ツリービューはすべて、「選択管理コンテナ」パターンを実装する。あるコントロールは、適切であれば複数のパターンを実装することができる。選択グリッドは、「グリッドレイアウトコンテナ」パターンと「選択管理コンテナ」パターンのどちらも実装する。
【００９４】
以前のアプリケーションのような単一の「役割」プロパティは存在しない。その代わりに、２つの別々のメカニズムが使用される。コントロールパターンがコントロールの利用可能な機能を決定し、人間の可読なローカライズ可能なプロパティが、「ボタン」、「リストボックス」などのユーザが理解することのできるコントロールタイプ名を提供する。
【００９５】
プロパティ
アクセシビリティシステム２００は、一般的なＧｅｔＰｒｏｐｅｒｔｙメソッドを特徴とする。プロパティは、ローカライズ不能なニーモニック形式（スクリプティングおよび構成ファイルに有用）に変換し、またはローカライズ不能なニーモニック形式から変換するのに使用し、ローカライズした記述を得るのにも使用されるユーティリティメソッドを有し、ＧＵＩＤによって表されることが好ましい。個々のメソッドの代わりに一般的なＧｅｔＰｒｏｐｅｒｔｙメソッドを使用する２つの主な利点は、（ａ）インタフェースを変更することなく、経時的に新しいプロパティを追加することが可能となり、（ｂ）別々のメソッドを使用するときには不可能であるアレイドリブンバルクプロパティフェッチングなどの、実装技法が可能となることである。各プロパティは、明確な目的を有さなければならない。プロパティが人間消費のためのものか、それとも機械消費のためのものか、プロパティをローカライズすべきかどうかなどを明確に定義しなければならない。
【００９６】
本発明を、すべての点を限定的ではなく例示的なものと意図される特定の実施形態に関係して説明した。代替実施形態は、本発明の範囲を逸脱することなく、本発明の関係する当業者にとって明らかとなるであろう。
【００９７】
上記から、本発明が、明白でありかつシステムおよび方法に固有な、他の利点と共に、前述の目的および対象をすべて達成するように適合されることを理解されよう。ある特徴およびサブコンビネーションは実用的なものであって、他の特徴およびサブコンビネーションを参照せずに使用できることを理解されよう。このことは、特許請求の範囲で企図されている。
【図面の簡単な説明】
【００９８】
【図１】本発明の実施形態のコンピューティングシステム環境のブロック図である。
【図２】本発明の実施形態のアクセシビリティシステムのクライアント環境、およびサーバ環境の間の対話のブロック図である。
【図３】本発明の実施形態のアクセシビリティシステムコアのコンポーネントを示すブロック図である。
【図４（Ａ）】本発明の実施形態の固有要素からの論理ツリーの作成を示す図である。
【図４（Ｂ）】本発明の実施形態の固有要素からの論理ツリーの作成を示す図である。
【図４（Ｃ）】本発明の実施形態の固有要素からの論理ツリーの作成を示す図である。
【図４（Ｄ）】本発明の実施形態の固有要素からの論理ツリーの作成を示す図である。
【図５】本発明の実施形態の論理ツリーを構築する手順の順序を示すフローチャートの図である。
【図６】本発明の実施形態のダイアログボックスと、論理要素を形成するダイアログボックスのコンポーネントとを示す図である。
【図７】本発明の実施形態のイベントメカニズムを活動化する際に必要とされる手順を示すフローチャートの図である。
【図８】イベント通知のための周知のシステムを示す図である。
【符号の説明】
【００９９】
１０、１４　固有ツリー
２０　ローツリー
６０　ダイアログボックス
６２　フライングウィンドウグラフィック
６４　コンボボックス
６５　ＯＫボタン
６６　キャンセルボタン
６７　ブラウズボタン
１００　コンピュータ環境
１１０　コンピュータ
１２０　プロセッサ
１２１　システムバス
１３０　システムメモリ
１３１　読取り専用メモリ
１３２　ランダムアクセスメモリ
１３３　ＢＩＯＳ
１３４、１４４　オペレーティングシステム
１３５、１４５　アプリケーションプログラム
１３６、１４６　他のプログラムモジュール
１３７、１４７　プログラムデータ
１４０、１５０　インタフェース
１６０　ユーザ入力インタフェース
１６１　マウス
１６２　キーボード
１７０　ネットワークインタフェースまたはアダプタ
１７１　ローカルエリアネットワーク
１７２　モデム
１７３　広域ネットワーク
１８０　リモートコンピュータ
１９０　ビデオインタフェース
１９１　モニタ
１９５　出力周辺インタフェース
１９６　プリンタ
１９７　スピーカ
２００　アクセシビリティシステム
２０１　アクセシビリティシステムコア
２０２　ＵＩオートメーションクライアント
２０４　ＵＩオートメーションサーバ
２０６　ＵＩエンジン
２１０　イベントメカニズム
２２０　クライアント側アクセシビリティインタフェース
２２２　論理ツリー
２３０　サーバ側アクセシビリティインタフェース
３００　クライアント環境
４００　サーバ環境
４１０　サーバシステム
４１２　アダプタ
４１４　コア
４２０　サーバシステム
４２２　プロキシコンポーネント
４２４　コントロール
４３０　サーバシステム
４３２　アダプタ
４３４　内部ＯＭ
【図１】
2004145851.tif 000005
【図２】
2004145851.tif 000006
【図３】
2004145851.tif 000007
【図４（Ａ）】
2004145851.tif 000008
【図４（Ｂ）】
2004145851.tif 000009
【図４（Ｃ）】
2004145851.tif 000010
【図４（Ｄ）】
2004145851.tif 000011
【図５】
2004145851.tif 000012
【図６】
2004145851.tif 000013
【図７】
2004145851.tif 000014
【図８】
2004145851.tif 000015
【外国語明細書】
2004145851.tif 000016
2004145851.tif 000017
2004145851.tif 000018
2004145851.tif 000019
2004145851.tif 000020
2004145851.tif 000021
2004145851.tif 000022
2004145851.tif 000023
2004145851.tif 000024
2004145851.tif 000025
2004145851.tif 000026
2004145851.tif 000027
2004145851.tif 000028
2004145851.tif 000029
2004145851.tif 000030
2004145851.tif 000031
2004145851.tif 000032
2004145851.tif 000033
2004145851.tif 000034
2004145851.tif 000035
2004145851.tif 000036
2004145851.tif 000037
2004145851.tif 000038
2004145851.tif 000039
2004145851.tif 000040
2004145851.tif 000041
2004145851.tif 000042
2004145851.tif 000043
2004145851.tif 000044
2004145851.tif 000045
2004145851.tif 000046
2004145851.tif 000047
2004145851.tif 000048
2004145851.tif 000049
2004145851.tif 000050
2004145851.tif 000051
2004145851.tif 000052
2004145851.tif 000053
2004145851.tif 000054
2004145851.tif 000055
2004145851.tif 000056
2004145851.tif 000057