(57)【要約】【課題】  ユーザインターフェースオートメーションコードとコンピュータプログラムのコードの暗黙の同期化のためのシステムおよび方法を提供すること。【解決手段】  ユーザインターフェースに対応するウィンドウのメッセージキューにフックする同期化ＡＰＩを呼び出す。同期化ＡＰＩは、ウィンドウおよび他のシステムアクティビティに対応する関連スレッドが、メッセージキューが空であることを示すときに、リターンする。空のメッセージキューは、ユーザインターフェースがアイドルであることと、オートメーションコードが次のアクションを処理できることを示す。【選択図】  図３
2005228301.tif 000002
【特許請求の範囲】
【請求項１】
ユーザインターフェースオートメーション同期化の、コンピュータ実施される方法であって、
ユーザインターフェースに表示される選択されたウィンドウをサブクラス化するステップであって、前記選択されたウィンドウのそれぞれは、スレッドのメッセージキューに対応するステップと、
前記選択されたウィンドウのそれぞれに対応するタイマをセットするステップと、
前記選択されたウィンドウの１つに関連する特定のタイマが発火したかどうかを判定するステップと、
前記スレッドの前記メッセージキューが空であるときに、前記ユーザインターフェースオートメーションが次のアクションに進むように、前記メッセージキューが空であるかどうかを判定するステップと
を備えることを特徴とするコンピュータ実施される方法。
【請求項２】
前記選択されたウィンドウのサブクラス化を開始するために同期化アプリケーションプログラムインターフェースを呼び出すステップをさらに備えることを特徴とする請求項１に記載のコンピュータ実施される方法。
【請求項３】
前記スレッドの前記メッセージキューが空であるかどうかを判定するために待機アプリケーションプログラムインターフェースを呼び出すステップをさらに備えることを特徴とする請求項１に記載のコンピュータ実施される方法。
【請求項４】
前記ユーザインターフェースオートメーションが前記待機アプリケーションプログラムインターフェースへの前記呼出しを待っているときに、前記スレッドのメッセージキューは空として示されることを特徴とする請求項３に記載のコンピュータ実施される方法。
【請求項５】
選択されたウィンドウのサブクラス化は、前記選択されたウィンドウに対応するウィンドウプロシージャコードをユーザインターフェースオートメーションコードに置換することに対応することを特徴とする請求項１に記載のコンピュータ実施される方法。
【請求項６】
前記選択されたウィンドウのそれぞれに対応する前記タイマは、０をセットされることを特徴とする請求項１に記載のコンピュータ実施される方法。
【請求項７】
前記選択されたウィンドウの１つに関連する特定のタイマが発火したことの判定は、前記選択されたウィンドウの前記１つに対応するメッセージキューが空であることを示すことを特徴とする請求項１に記載のコンピュータ実施される方法。
【請求項８】
システムアクティビティに対応するタイマをセットするステップをさらに備えることを特徴とする請求項１に記載のコンピュータ実施される方法。
【請求項９】
前記ユーザインターフェースオートメーションが次のアクションに進む前に、前記システムアクティビティに対応するスレッドの前記メッセージキューが空であるかどうかをさらに判定するステップをさらに備えることを特徴とする請求項８に記載のコンピュータ実施される方法。
【請求項１０】
ユーザインターフェースオートメーション同期化を提供するコンピュータ実行可能命令を含むコンピュータ読み取り可能な媒体であって、
ユーザインターフェースオートメーションコードに対応する、前記ユーザインターフェースに表示される選択されたウィンドウをフックするステップであって、前記選択されたウィンドウのそれぞれは、スレッドのメッセージキューに対応するステップと、
前記選択されたウィンドウのそれぞれに対応するタイマをセットするステップと、
前記選択されたウィンドウの１つに関連する特定のタイマが発火したかどうかを判定するステップと、
前記スレッドの前記メッセージキューが空であるときに、前記ユーザインターフェースオートメーションが次のアクションに進むように、前記メッセージキューが空であるかどうかを判定するステップと
を備えることを特徴とするコンピュータ読み取り可能な媒体。
【請求項１１】
前記選択されたウィンドウのサブクラス化を開始するために同期化アプリケーションプログラムインターフェースを呼び出すステップをさらに備えることを特徴とする請求項１０に記載のコンピュータ読み取り可能な媒体。
【請求項１２】
選択されたウィンドウをフックするステップは、前記選択されたウィンドウに対応するウィンドウプロシージャコードがユーザインターフェースオートメーションコードに置換されるように、選択されたウィンドウをサブクラス化するステップを含むことを特徴とする請求項１０に記載のコンピュータ読み取り可能な媒体。
【請求項１３】
選択されたウィンドウをフックするステップは、前記選択されたウィンドウに対応するウィンドウプロシージャコードにダイナミックリンクライブラリをアタッチするステップを含むことを特徴とする請求項１０に記載のコンピュータ読み取り可能な媒体。
【請求項１４】
前記スレッドの前記メッセージキューが空であるかどうかを判定するために、待機アプリケーションプログラムインターフェースを呼び出すステップをさらに備えることを特徴とする請求項１０に記載のコンピュータ読み取り可能な媒体。
【請求項１５】
前記ユーザインターフェースオートメーションが前記待機アプリケーションプログラムインターフェースへの呼出しを待っているときに、前記スレッドのメッセージキューが、空として示されることを特徴とする請求項１４に記載のコンピュータ読み取り可能な媒体。
【請求項１６】
前記選択されたウィンドウの１つに関連する特定のタイマが発火したかの判定は、前記選択されたウィンドウの前記１つに対応するメッセージキューが空であることを示すことを特徴とする請求項１０に記載のコンピュータ読み取り可能な媒体。
【請求項１７】
ユーザインターフェースオートメーションを同期化するシステムであって、
ユーザインターフェースオートメーションコードに対応する、ユーザインターフェースに表示される選択されたウィンドウをフックするステップであって、前記選択されたウィンドウのそれぞれが、スレッドのメッセージキューに対応するステップと、
前記選択されたウィンドウのそれぞれに対応するタイマをセットするステップと、
前記選択されたウィンドウの１つに関連する特定のタイマが発火したかどうかを判定するステップと、
前記スレッドの前記メッセージキューが空であるときに、前記ユーザインターフェースオートメーションが次のアクションに進むように、前記メッセージキューが空であるかどうかを判定するステップと
を行うように構成されたアプリケーションプログラムインターフェースを含むアプリケーションを備えることを特徴とするシステム。
【請求項１８】
前記アプリケーションプログラムインターフェースは、さらに、前記スレッドの前記メッセージキューが空であるかどうかを判定するために待機アプリケーションプログラムインターフェースを呼び出すように構成されることを特徴とする請求項１７に記載のシステム。
【請求項１９】
前記ユーザインターフェースオートメーションが前記待機アプリケーションプログラムインターフェースへの呼出しを待っているときに、前記スレッドのメッセージキューが空として示されることを特徴とする請求項１７に記載のシステム。
【請求項２０】
前記アプリケーションプログラムインターフェースは、さらに、前記選択されたウィンドウのそれぞれに対応する前記タイマを０をセットするように構成されることを特徴とする請求項１７に記載のシステム。
【請求項２１】
前記アプリケーションプログラムインターフェースは、さらに、システムアクティビティに対応するタイマをセットするように構成されることを特徴とする請求項１７に記載のシステム。
【請求項２２】
前記アプリケーションプログラムインターフェースは、さらに、前記ユーザインターフェースオートメーションが次のアクションに進む前に、前記システムアクティビティに対応するスレッドの前記メッセージキューが空であるかどうかをさらに判定するように構成されることを特徴とする請求項２１に記載のシステム。
【発明の詳細な説明】
【背景技術】
【０００１】
コンピュータプログラムに関連するエラーを訂正する反復処理は、顧客の期待にかなう製品を供給するための重要な部分である。さまざまなテスト手順が、コンピュータプログラムのテストのために開発された。ある種のテストは、コンピュータプログラムのさまざまな部分の反復自動テストを可能にするために自動化されている。
【０００２】
コンピュータプログラムのうちで自動化された処理が適用される部分に、ユーザインターフェース（ＵＩ）機能が含まれる。ＵＩテストオートメーションコードは、コンピュータプログラムのＵＩの選択された態様の自動テストのために提供される。
【発明の開示】
【課題を解決するための手段】
【０００３】
本発明は、コンピュータプログラムの状態とオートメーションコードの暗黙の同期化を可能にする。一般に、オートメーションコードの作成者は、コンピュータプログラムのユーザインターフェースのテストでオートメーションが動作するように同期化コードを記述する必要がある。本発明は、そのような明示的同期化コードの必要をなくす。本発明によれば、オートメーションコードは、イベントドリブンであり、プログラムのＵＩの使用によって生じるアクションが完了した時を検出する。したがって、オートメーションコードは、暗黙のうちにコンピュータプログラムと同期化され、コンピュータプログラムのＵＩに関連する各アクションが完了した時を確認することができる。言い換えれば、本発明は、システムが次のステップの準備ができる（すなわち、コンピュータプログラムのＵＩが次のオートメーションステップの準備ができる）まで、オートメーションの特定のステップが完了しないことを宣言するヒューリスティック（ｈｅｕｒｉｓｔｉｃ）を導入する。ユーザインターフェースに対応するウィンドウのメッセージキューにフックする同期化ＡＰＩが呼び出される。同期化ＡＰＩは、ウィンドウおよび他のシステムアクティビティに対応する関連スレッドが、メッセージキューが空であることを示すときにリターンする。空のメッセージキューは、ユーザインターフェースがアイドルであるステップと、オートメーションコードが次のアクションを処理できることを示す。
【発明を実施するための最良の形態】
【０００４】
本発明を、以下で添付の図面を参照してより完全に説明するが、添付の図面は、本明細書の一部を形成し、例として、本発明を実施する特定の例示的実施形態を示す。しかし、本発明は、多数の異なる形で具現化することができ、本明細書で説明する実施形態に制限されるものと解釈されてはならず、これらの実施形態は、この開示を完全にするために提供され、当業者に本発明の範囲を完全に伝えるものである。とりわけ、本発明は、方法またはデバイスとして具現化することができる。したがって、本発明は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態、またはソフトウェア態様とハードウェア態様を組み合わせた実施形態の形をとることができる。
したがって、下の詳細な説明を、制限的な意味で解釈してはならない。
【０００５】
・例示的オペレーティング環境
図１に、本発明を実施するためにシステムに含めることができる例示的コンピューティング装置１００を示す。コンピューティング装置１００は、本発明に適用できる一般的なオペレーティング環境を示す。非常に基本的な構成で、コンピューティング装置１００には、通常、少なくとも１つの処理装置１０２およびシステムメモリ１０４が含まれる。処理装置１０２に、既存の物理的プロセッサ、設計中のプロセッサ、一緒に働く複数のプロセッサ、仮想プロセッサ、および２進実行可能命令を解釈できる任意の他のデバイスまたはソフトウェアプログラムが含まれる。コンピューティング装置の正確な構成および種類に応じて、システムメモリ１０４は、揮発性（ＲＡＭなど）、不揮発性（ＲＯＭ、フラッシュメモリなど）、またはこの２つの組み合わせとすることができる。システムメモリ１０４には、通常、オペレーティングシステム１０５、１つまたは複数のプログラムモジュール１０６が含まれ、プログラムデータ１０７を含めることができる。この基本構成は、図１では破線１０８内のコンポーネントによって示されている。
【０００６】
コンピューティング装置１００は、追加の特徴または機能を有することもできる。たとえば、コンピューティング装置１００に、たとえば磁気ディスク、光ディスク、またはテープなど、追加のデータ記憶装置（取外し可能および／または固定）も含めることができる。そのような追加ストレージは、図１では、取外し可能記憶装置１０９および固定記憶装置１１０によって示される。コンピュータ記憶媒体には、コンピュータ読み取り可能な命令、データ構造、プログラムモジュール、または他のデータなど、情報を格納するための方法または技術で実施される、揮発性および不揮発性の、取外し可能および固定の媒体を含めることができる。システムメモリ１０４、取外し可能記憶装置１０９、および固定記憶装置１１０は、いずれも、コンピュータ記憶媒体の例である。コンピュータ記憶媒体には、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ、または他のメモリ技術、ＣＤ−ＲＯＭ、ディジタル多用途ディスク（ＤＶＤ）、または他の光記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置、またはその他の磁気記憶装置、あるいは、所望の情報を格納するのに使用でき、コンピューティング装置１００によってアクセスできる任意の他の媒体が含まれるが、これに限定されない。そのようなコンピュータ記憶媒体のいずれでも、コンピューティング装置１００の一部とすることができる。コンピューティング装置１００は、キーボード、マウス、ペン、スタイラス、音声入力装置、接触入力装置などの入力装置１１２も有することができる。ディスプレイ、スピーカ、プリンタなどの出力装置１１４も含めることができる。これらのデバイスのすべてが、当技術分野で既知であり、本明細書で詳細に説明するに及ばない。
【０００７】
コンピューティング装置１００に、装置が、ネットワークを介するなど、他のコンピューティング装置１１８と通信できるようにする通信接続１１６も含めることができる。通信接続１１６は、通信媒体の例である。通信媒体は、典型的には、搬送波またはその他の搬送メカニズムなどの変調されたデータ信号中のコンピュータ読み取り可能な命令、データ構造、プログラムモジュール、または、その他のデータを具現化するものであり、任意の情報伝達媒体を含む。「変調されたデータ信号」という用語は、信号中に情報を符号化する形でその特性の１つまたは複数を設定または変化させた信号を意味する。制限ではなく例として、通信媒体には、有線ネットワークまたは直接配線接続などの有線媒体と、音響、ＲＦ、赤外線、および他の無線媒体などの無線媒体が含まれる。本明細書で使用される用語コンピュータ読み取り可能な媒体には、記憶媒体と通信媒体の両方が含まれる。
【０００８】
図２に、実質的に本発明で使用するためのモバイル装置の代替オペレーティング環境を示す。本発明の一実施形態で、モバイル装置２００は、一体化された携帯情報端末（ＰＤＡ）および無線電話機などのコンピューティング装置に一体化される。
【０００９】
この実施形態で、モバイル装置２００は、プロセッサ２６０、メモリ２６２、ディスプレイ２２８、およびキーパッド２３２を有する。メモリ２６２には、一般に、揮発性メモリ（たとえばＲＡＭ）および不揮発性メモリ（たとえば、ＲＯＭ、フラッシュメモリなど）の両方が含まれる。モバイル装置２００には、メモリ２６２に常駐し、プロセッサ２６０で実行されるオペレーティングシステム２６４が含まれる。キーパッド２３２は、押しボタン数字ダイヤリングパッド（通常の電話機にあるものなど）、マルチキーキーボード（普通のキーボードなど）とするか、タッチスクリーンまたはスタイラスを尊重してモバイル装置に含めなくてもよい。ディスプレイ２２８は、液晶ディスプレイ、またはモバイルコンピューティング装置で一般的に使用される他の種類のディスプレイとすることができる。ディスプレイ２２８は、接触感知型とすることができ、その場合に、入力デバイスとしても働く。
【００１０】
１つまたは複数のアプリケーションプログラム２６６が、メモリ２６２にロードされ、オペレーティングシステム２６４上で動作する。アプリケーションプログラムの例に、電話ダイヤラプログラム、電子メールプログラム、スケジューリングプログラム、ＰＩＭ（個人情報管理）プログラム、ワードプロセッシングプログラム、スプレッドシートプログラム、インターネットブラウザプログラムなどが含まれる。モバイル装置２００には、メモリ２６２内の不揮発性ストレージ２６８も含まれる。不揮発性ストレージ２６８は、モバイル装置２００の電源が切られた場合であっても失われてはならない永続的情報を格納するのに使用することができる。アプリケーション２６６は、電子メールアプリケーションによって使用される電子メールまたは他の情報、ＰＩＭによって使用される連絡先情報、スケジューリングプログラムによって使用される面会予定情報、ワードプロセッシングアプリケーションによって使用される文書など、ストレージ２６８内の情報を使用し、格納することができる。同期化アプリケーションも、モバイル装置に常駐し、ホストコンピュータに常駐する対応する同期化アプリケーションと相互作用（ｉｎｔｅｒａｃｔ）するようにプログラムされて、ストレージ２６８に保管された情報をホストコンピュータに格納された対応する情報と同期した状態に保つ。
【００１１】
モバイル装置２００は、電源２７０を有し、電源２７０は、１つまたは複数の電池として実装することができる。電源２７０に、さらに、電池を増補するか再充電する、ＡＣアダプタまたは電源付きドッキングクレードルなどの外部電源を含めることができる。
【００１２】
モバイル装置２００は、２種類の外部通知機構すなわち、ＬＥＤ  ２４０およびオーディオインターフェース２７４と共に図示されている。これらのデバイスは、電源２７０に直接に接続することができ、その結果、アクティブ化されたときに、プロセッサ２６０および他のコンポーネントが電池電力節約のためにシャットダウンされている場合であっても、通知機構によって指示される持続時間の間オンになる。ＬＥＤ  ２４０は、デバイスの電源オン状態を示すために、ユーザがアクションをとるまで無期限にオンになるようにプログラムすることができる。オーディオインターフェース２７４は、ユーザに可聴信号を提供し、ユーザから可聴信号を受け取るのに使用される。たとえば、オーディオインターフェース２７４は、電話会話を容易にするためなど、可聴出力を提供するためにスピーカに接続することができ、可聴入力を受け取るためにマイクロホンに接続することができる。
【００１３】
モバイル装置２００には、無線周波数通信の送信および受信の機能を実行するラジオ（ｒａｄｉｏ）２７２も含まれる。ラジオ２７２は、モバイル装置２００と外部の世界の間の、通信搬送波またはサービスプロバイダを介した無線接続を容易にする。ラジオ２７２との間の伝送は、オペレーティングシステム２６４の制御の下で行われる。言い換えると、ラジオ２７２によって受信される通信は、オペレーティングシステム２６４を介してアプリケーションプログラム２６６に散布され、逆も同様である。
【００１４】
ラジオ２７２は、モバイル装置２００が、ネットワークを介するなど、他のコンピューティング装置と通信することを可能にする。ラジオ２７２は、通信媒体の１例である。通信媒体は、典型的には、搬送波またはその他の搬送メカニズムなどの変調されたデータ信号中のコンピュータ読み取り可能な命令、データ構造、プログラムモジュール、または、その他のデータを具現化するものであり、任意の情報伝達媒体を含む。「変調されたデータ信号」という用語は、信号中に情報を符号化する形でその特性の１つまたは複数を設定または変化させた信号を意味する。制限ではなく例として、通信媒体には、有線ネットワークまたは直接配線接続などの有線媒体と、音響、ＲＦ、赤外線、および他の無線媒体などの無線媒体が含まれる。本明細書で使用される用語コンピュータ読み取り可能な媒体には、記憶媒体と通信媒体の両方が含まれる。
【００１５】
・メッセージキューベースＵＩオートメーション同期化
従来のＵＩテストオートメーションコードに関する問題は、駆動する論理が、テストされるＵＩベースターゲットと非同期に実行されることである。これは、通常、ＵＩを駆動するのに使用される包括的な方法自体が同期式でないので、唯一の選択肢である。その結果、そのようなオートメーションの作成者が、オートメーションをアプリケーションの状態と同期化するコードを明示的に提供しなければならないことになる。すなわち、アクションを実行し、任意の時間期間の間待つかアクションが行われたことの明示的シグナルを待ち、その後、次のアクションに進行する。ある明示的な同期化ソリューションは、コンピュータプログラムの状態が指定された状態に達したことを保証するために、指定された期間の間にオートメーションをループさせることを用いた。この余分な同期化コードは、記述が不可解であって、事実上保証されたメンテナンス出費であり、というのは、必ず、ユーザが、明示的なシグナリングが使用可能でない場合に、パフォーマンス問題を回避するために調整しなければならないからである。もう１つの問題は、この明示的同期化が、通常は最適でなく、かなりの時間期間だけプログラムの用意が遅れる（しばしば、信頼性を高めるために激しくパディングされる）ことである。これによって、性能テスト用のオートメーションコードの記述が難しくなる。
【００１６】
暗黙の同期化は、アクションが「終わる」時を必ず「知っている」ので、作成者が同期化を処理するコードを作成する必要をなくすことによって、第１の問題に対処する。これによって、コードは、特定の意図を反映し、次のアクションを実行すべき時を待つというロジスティックによって汚されない。
【００１７】
メッセージキューベース同期化は、最適のときにアクションが完了したことを検出し、効果的にイベントドリブンになることによって、第２の問題に対処する。
【００１８】
本発明は、遅延設定がオートメーションプロセスに書き込まれるときに使用可能でなかったレベルの性能テストを可能にする。
【００１９】
図３に、本発明によるコンピューティング装置のデスクトップの典型的なＵＩ出力３００を示すブロック図を示す。デスクトップ３０２に、例示的なウィンドウ３０４、３０６、および３０８が含まれる。ウィンドウのそれぞれ（たとえば３０４）は、対応するコンピューティング装置または他のロケーションに格納され、コンピューティング装置によって表示される異なるプログラムに対応するものとすることができる。もう１つの実施形態では、プログラムは、デスクトップフォーマットで表示されるのではなく、全画面出力または別の種類の出力であるＵＩ出力を提供することができる。
【００２０】
特定のウィンドウ（たとえば３０４）をもたらすディスプレイは、コンピューティング装置のシステムに送られる、特定のウィンドウ内のディスプレイをレンダリングするメッセージに対応する。メッセージは、アプリケーションプログラムインターフェース（ＡＰＩ）呼出しの結果としてシステムに供給されるＵＩイベントに対応する。ＡＰＩ呼出しは、ＵＩ出力をトリガするためにプログラムによって提供される。ＡＰＩ呼び出し機構を使用してウィンドウ内にＵＩ出力を表示するプロセスは、非同期式プロセスである。プログラムのＵＩとの相互作用をエミュレートするために提供されるオートメーションコードセットは、したがって、テストのために非同期プロセスをトレースするという問題に直面する。
【００２１】
ウィンドウのそれぞれ（たとえば３０４）は、コンピューティング装置で動作するスレッドによって管理される。各スレッドは、複数のウィンドウを管理することができる。各スレッドは、スレッドに対応するウィンドウのメッセージをサイクルする。所与のときに、それぞれが複数のウィンドウに対応する複数のスレッドが、コンピューティング装置で動作している場合がある。特定のウィンドウのＵＩ出力に影響するユーザ入力が検出されたときに、システムは、そのウィンドウへのメッセージを処理して、ディスプレイの必要な変更をもたらす。各スレッドは、対応するメッセージキューを有し、このメッセージキューは、現在そのスレッドによって処理されているメッセージに対応する。
【００２２】
本発明は、各スレッドのメッセージキューを監視することによって、ウィンドウにメッセージを提供するプロセスにオートメーションプロセスを注入またはインタールード（ｉｎｔｅｒｌｕｄｅ）する。したがって、特定のメッセージの結果としてのディスプレイの更新または変更のプロセスが完了したときに、このイベントの完了が、オートメーションプロセスに知らされる。関連スレッドのメッセージキューが空のときに、オートメーションプロセスは、オートメーション入力から生じるアクションが処理されたことを知る。
【００２３】
一実施形態で、あるスレッドが、重要なスレッドとして識別され（たとえば、タスクバーのシェルスレッド、ソフトウェア入力パネルに対応するスレッド、現在表示されているウィンドウに対応するスレッドなど）、これらのスレッドとオートメーションプロセスの間の同期化が、該当のプログラムにかかわらずに提供される。言い換えると、特定のプログラムのＵＩ出力を、特定のスレッドによって処理することができる。この特定のスレッドのメッセージキューを監視するだけではなく、重要なスレッドと思われる他のスレッドのメッセージキューも監視される。監視されるスレッドのそれぞれのメッセージキューが空のときに、プロセスは、オートメーション入力から生じたアクションが処理されたことを知る。
【００２４】
図４に、本発明による暗黙のＵＩ同期化の処理の論理流れ図を示す。プロセス４００は、同期化プロセスを実施するＡＰＩがオートメーションプロセスによって呼び出された後に、入る（ｅｎｔｅｒ）ブロック４０２に入る。一実施形態で、呼び出されるＡＰＩは、ＷａｉｔＦｏｒＦｏｒｅｇｒｏｕｎｄＩｄｌｅＥｘという名前である。呼び出された同期化ＡＰＩは、可視ウィンドウを所有するスレッドならびに上位プロファイルシェルおよびシステムアクティビティのスレッドのメッセージキューの監視というヒューリスティックを使用する。処理は、ブロック４０４で継続される。
【００２５】
ブロック４０４で、表示されている、ある選択されたウィンドウを同期化ＡＰＩによってサブクラス化する。一実施形態で、同期化ＡＰＩに、ウィンドウをサブクラス化するように特定のウィンドウにフックする内部Ｃ＋＋クラスが含まれる。ウィンドウのサブクラス化には、特定のウィンドウのウィンドウプロシージャをオートメーションプロセスに対応するウィンドウプロシージャに置換することが含まれる。結果として、ウィンドウが表示されるときに、プログラムのコードに含まれる元のウィンドウプロシージャではなく、オートメーションプロセスに対応するウィンドウプロシージャが呼び出される。もう１つの実施形態では、ダイナミックリンクライブラリ（ＤＬＬ）が、アプリケーションのプロセス空間にロードされ、アプリケーションがフックコードをホストするようになる。その結果、ウィンドウプロシージャは、ＤＬＬを介してフックコードを参照することによって実施することができる。処理は、ブロック４０６で継続される。
【００２６】
ブロック４０６で、同期化ＡＰＩによってサブクラス化されたウィンドウのタイマをセットアップする。もう１つの実施形態では、上位プロファイルシェルおよびシステムアクティビティのスレッドについてもタイマをセットアップする。タイマは、特定の時間待ち、時間が満了したときに通知を提供するように構成することができるメッセージキュー機能である。一実施形態では、タイマの特定の特性を活用するように、０の時間期間をセットされたタイマが使用される。０の時間期間が使用されるときには、メッセージキューが空のときにタイマが発火するというタイマのプロパティが利用される。したがって、タイマが発火したことのタイマ通知が受け取られるときに、オートメーションプロセスは、一時的であっても、メッセージキューが空であることを知る。処理は、判断ブロック４０８で継続される。
【００２７】
判断ブロック４０８では、スレッドに関連する特定のタイマが発火したかどうかを判定する。特定のタイマが発火していない場合には、処理は、ブロック４０８の先頭に戻り、タイマが発火するのを待つ。特定のタイマが発火した場合には、そのスレッドに関連するメッセージキューが、空であり、処理は、ブロック４１０で継続される。
【００２８】
ブロック４１０で、関連するスレッドのメッセージキューの１つにメッセージが入ったときに通知を提供するＡＰＩを呼び出す。一実施形態で、この待機ＡＰＩを、ＭｓｇＷａｉｔＦｏｒＭｕｌｔｉｐｌｅＯｂｊｅｃｔｓ  ＡＰＩと称する。待機ＡＰＩを呼び出した後に、処理は判断ブロック４１２に進む。
【００２９】
判断ブロック４１２で、関連スレッドのそれぞれがメッセージを待っているかどうかを判定する。関連スレッドのそれぞれは、関連スレッドのそれぞれが待機ＡＰＩへの呼出しを待っているときに、メッセージを待っている。すべての関連スレッドが待機ＡＰＩへの呼出しを待っているのでない場合には、処理は判断ブロック４０８に戻って、すべての関連タイマが発火したかどうかを判定する。しかし、すべての関連スレッドが待機ＡＰＩへの呼出しを待っている場合に、ブロック４１４で処理が継続され、同期化プロセス４００からオートメーションプロセスへのリターンがもたらされる。
【００３０】
もう１つの実施形態で、待機ＡＰＩ呼出しをスキップするように同期化ＡＰＩを構成して、メッセージがすべてのＵＩスレッドで同時に処理されていることを単純に保証することができる。同期化ＡＰＩは、即座にリターンするのではなく、メッセージキューがすべてＮミリ秒の連続する期間にアイドルであることを確認するように設定することもできる。
【００３１】
上の説明、例、およびデータは、本発明の構成の製造および使用の完全な説明を提供する。本発明の多数の実施形態を、本発明の趣旨および範囲から逸脱せずに作ることができるので、本発明は、添付の特許請求の範囲にある。
【図面の簡単な説明】
【００３２】
【図１】本発明の１つの例示的実施形態で使用できる例示的コンピューティング装置を示す図である。
【図２】本発明の１つの例示的実施形態で使用できる例示的モバイル装置を示す図である。
【図３】本発明によるコンピューティング装置のデスクトップの典型的なＵＩ出力を示すブロック図である。
【図４】本発明による暗黙のＵＩ同期化の処理を示す論理流れ図である。
【符号の説明】
【００３３】
１００  コンピューティング装置
１０２  処理装置
１０４  システムメモリ
１０５  オペレーティングシステム
１０６  プログラムモジュール
１０７  プログラムデータ
１０９  取外し可能記憶装置
１１０  固定記憶装置
１１２  入力装置
１１４  出力装置
１１６  通信接続
１１８  他のコンピューティング装置
２２８  ディスプレイ
２３０  周辺装置ポート
２３２  キーパッド
２４０  ＬＥＤ
２６０  プロセッサ
２６２  メモリ
２６６  アプリケーション
２６８  ストレージ
２７０  電源
２７２  無線インターフェースレイヤ
２７４  オーディオインターフェース
【図１】
2005228301.tif 000003
【図２】
2005228301.tif 000004
【図３】
2005228301.tif 000005
【図４】
2005228301.tif 000006
【外国語明細書】
2005228301000001.pdf