2012-02-09 36 views
0

多くの要素を持つリスト(コンボボックスの標準です)を含むコンボボックスが100以上あります。選択するエントリを探したいそれら。エントリを見つけるために、私は与えられたパターンを各要素の名前と比較します。AutomationElement:キャッシュされた要素(GetCachedChildren経由)から "live"要素へ

パフォーマンス上の理由から(100以上の要素)、私はすべての子のスコープを持つ親にCacheRequestを使用していますので、すばやくすべての子を処理し、子Iの正しいインデックスを見つけることができます選択したい。

私は正しいインデックスを持っていますが、キャッシュされたAutomationElementも持っていますが、CacheRequestでAutomationElementMode.Noneを指定してから(まだパフォーマンスに影響を与えるかどうかをテストする必要があります)、キャッシュされた要素を将来の呼び出しで使用できるもの(「ライブ」要素)に変換できないようです。

(AutomationElement.FromWindowHandleという関数があるので)NativeWindowHandleを使って変換しようとしましたが、ハンドルが0であるように見えます。

まだ、キャッシュされたSelectionPatternを使用しようとはしませんでした。ComboBoxがカスタムビルドされていることがあるため、すべての場合に機能するかどうかはわかりません。

私は子インデックスを持っています。キャッシュできる値はすべて取得できます。キャッシュされた要素の作業/ライブAutomationElementを取得するにはどうすればよいですか? アンドレアス

おかげで(それが大きな違いを生むべきではありませんが、自動化対象としてWin32アプリケーション()でWindows 7の64でC#を使用して)

答えて

0

はあなたが必要な子テキストを持っていますかインデックスに加えて?そうであれば、ユーザーがオートメーション要素を取得するのではなく、必要な子を選択するように入力したかのように、コンボボックスに子のテキストを送信することは可能でしょうか?

常にIUIAutomationLegacyIAccessiblePatternが後退しますが、それはクライアント(AutomationElement)ではなくコアAPIにしかないと思います。

+0

ありがとうございました!あなたはどうやってそのインターアートを手に入れますか? UIAtuomationからそのインタフェースを実装するオブジェクトへの変換ですか? –

+1

はい、管理されていないAPIのみを使用しています。詳細はこちらをご覧ください:http://social.msdn.microsoft.com/Forums/en-US/windowsaccessibilityandautomation/thread/c3f142e1-0624-4ec5-a313-482e72d5454d(IUIAutomationLegacyIAccessiblePatternは管理対象の一部ではありませんコード)。あなたがアンマネージドを試してみたいと思ったら私に教えてください。私は自分の答えに追加することができます。 – chrismead

0

実際、AutomationElementMode.Noneを使用しているのは最良のアイデアではないようです。キャッシュリクエストにかかる時間は、ライブ要素をリクエストしたかどうか、リクエストするプロパティの数によってわずかに影響を受けるようです。 (私が間違っている場合は私を修正します - 体系的にはテストしませんでしたが、キャッシュリクエストでいくつかのオプションを使用して最近気になっています)

これは主にリクエストしたUI要素の数の影響を受けているようです最初の場所。

私はライブリンクを最初にリクエストできます。

これで、Win32SDKのいくつかの機能を使ったアクセスがさらに速くなるかどうかが分かります。

関連する問題