2009-06-04 9 views
2

私はアクティブアクセシビリティフレームワークを使用して、特定のプログラムのすべてのコントロールを列挙しています。問題は、私がコントロールのツリーをたどると、エクスプローラやビジュアルスタジオのような複雑なアプリケーションには永遠にかかるということです。シンプルなアプリケーションは約2秒かかりますが、大量のコントロールを含む大きなアプリケーションは10秒かかります。誰でもこれを体験できますか?私はまた、プロセス中でMSAAを使用することについていくつかの言及を発見しました。これは何を意味するのでしょうか?Microsoft Active Accessibilityは、コントロールを列挙するときにスーパークラスです。助けて!

答えて

2

まず最初に、「ツリー」に「サイクル」が存在することがあるため、再帰的にトラバースするときに注意してください。オブジェクトを確実に比較して、既にこのオブジェクトにいたかどうかを確認できません。

アクティブアクセシビリティが非常に遅い主な理由は、再帰的に横断されるとは考えられず、ただ1つの要素(カーソルの下)またはその子要素の詳細を表示することです。すべてのAAリクエスト(すべてのプロパティ用)は、コンテキストをターゲットアプリケーションに切り替えて、再び元に戻す必要があります。あなたがすべてのあなたのUIオブジェクトに添付された説明がたくさんあります)を正しく実行しているならば、数千のオブジェクトがあります。

あなたが何か特定のものを探しているならすべてのコントロールをトラバースするのではなく、直接リクエストする方が簡単かもしれません。または、あなたが知っている他のプロパティを持つHWNDにしか見えないオブジェクトのいくつかの種類を探しているならば、最初にすべてのHWNDを列挙してからAccessibleObjectFromWindowを呼び出すほうがはるかに高速です(トップレベルのウィンドウでは機能しません子ウィンドウ用)。子を列挙するときは、HWNDプロパティが変更されるとすぐに停止することができます。

これらのサイクルの1つに実行されるのを避けるために、再帰深度のいくつかのハード最大カウンタを追加します。

関連する問題