多くの要素を持つリスト(コンボボックスの標準です)を含むコンボボックスが100以上あります。選択するエントリを探したいそれら。エントリを見つけるために、私は与えられたパターンを各要素の名前と比較します。AutomationElement:キャッシュされた要素(GetCachedChildren経由)から "live"要素へ
パフォーマンス上の理由から(100以上の要素)、私はすべての子のスコープを持つ親にCacheRequestを使用していますので、すばやくすべての子を処理し、子Iの正しいインデックスを見つけることができます選択したい。
私は正しいインデックスを持っていますが、キャッシュされたAutomationElementも持っていますが、CacheRequestでAutomationElementMode.Noneを指定してから(まだパフォーマンスに影響を与えるかどうかをテストする必要があります)、キャッシュされた要素を将来の呼び出しで使用できるもの(「ライブ」要素)に変換できないようです。
(AutomationElement.FromWindowHandleという関数があるので)NativeWindowHandleを使って変換しようとしましたが、ハンドルが0であるように見えます。
まだ、キャッシュされたSelectionPatternを使用しようとはしませんでした。ComboBoxがカスタムビルドされていることがあるため、すべての場合に機能するかどうかはわかりません。
私は子インデックスを持っています。キャッシュできる値はすべて取得できます。キャッシュされた要素の作業/ライブAutomationElementを取得するにはどうすればよいですか? アンドレアス
おかげで(それが大きな違いを生むべきではありませんが、自動化対象としてWin32アプリケーション()でWindows 7の64でC#を使用して)
ありがとうございました!あなたはどうやってそのインターアートを手に入れますか? UIAtuomationからそのインタフェースを実装するオブジェクトへの変換ですか? –
はい、管理されていないAPIのみを使用しています。詳細はこちらをご覧ください:http://social.msdn.microsoft.com/Forums/en-US/windowsaccessibilityandautomation/thread/c3f142e1-0624-4ec5-a313-482e72d5454d(IUIAutomationLegacyIAccessiblePatternは管理対象の一部ではありませんコード)。あなたがアンマネージドを試してみたいと思ったら私に教えてください。私は自分の答えに追加することができます。 – chrismead