2016-09-22 11 views
9

(管理)のMicrosoft UIオートメーションフレームワークは、このようにウィンドウを検索する必要性を抑制し、ウィンドウのAutomationId値与えられたAutomationElementタイプをインスタンス化するいくつかの方法を提供する場合、私は、.NETに、知っていただきたいと思いますウィンドウハンドルまたは他の種類の識別子によって識別されます。私の目的を理解するためにVB.NETで書かれAutomationIdの値を指定して、AutomationElementの型をインスタンス化できますか?

擬似例:

Dim automationId As Integer = 1504 
Dim element As AutomationElement = AutomationElement.FromAutomationId(automationId) 
+0

私が見つけた最高のものは[this](https://msdn.microsoft.com/en-us/library/aa349646(v=vs.110).aspx)でした。それ以外の場合は、独自のクラス(可能な場合)を構築し、 'AutomationId'プロパティをシャドウ/オーバーライドするといいでしょう。次に、そのセッターが実行されるたびに、 "ウィンドウ"/"コントロール"をグローバルな共有リスト/ディクショナリに格納します。 –

+0

@Visual Vincent Thankyou、私が見ている "問題"は、それが検索方法論であり、高価な検索アルゴリズムである要素を検索するためにAutomationElementが必要であるということです。私はすべてのことを避けるために、より直接的な方法が存在するかどうかを知りたいと思います。 – ElektroStudios

答えて

3

まあ、ありません。どのオートメーションプロパティも要素のプロパティです。オートメーション要素は必ずしもHWNDに対応するとは限りません(HWNDにはすべてオートメーション要素がありますが、特に現代のUIフレームワークではHWNDを持つオートメーション要素はほとんどありません)ので、ツリーウォークが必要です。また、UIオートメーションの便利な点は、ツリーウォークがプロバイダ側のにあるであり、アプリケーション内でではなく、クロスプロセスコールの数が減ることです。

関連する問題