Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
inspectで見えるのにUIAutomationで捕捉できないオブジェクト
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30830#CommentId85568
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
でふぁいあんと
 (社会人)
投稿日時
2022/12/28 17:20:36
お世話になっております。重ね重ねの投稿、誠にお手数をおかけいたします。
前回、UIAutomationの遷移について大変丁寧な解説を頂きましたので、
さらに考え方だけでもお聞きできないかと思いました。
例えば、Edgeにて、msnのトップページを開きます。
それをinspect.exeにて参照すると、
[デスクトップ]ウィンドウから、UIAutomationの階層を表示できます。
vbにて、その階層を追いかけます。
'デスクトップを取得
Set uiAuto = New UIAutomationClient.CUIAutomation
Set elmDesktop = uiAuto.GetRootElement
'デスクトップから、Nameをつかってedgeを取得
Set uiCnd = uiAuto.CreatePropertyCondition(UIA_ControlTypePropertyId, UIA_WindowControlTypeId)
Set aryElm = elmDesktop.FindAll(TreeScope_Subtree, uiCnd)
For lopI = 0 To aryElm.Length - 1
'Nameで探す
If LCase(aryElm.GetElement(lopI).CurrentName) Like "新しいタブ*" Then
Set elmEdge = aryElm.GetElement(lopI)
Exit For
End If
Next
'ClassName -> Viewを一気に取得
Set uiCnd = uiAuto.CreatePropertyCondition(UIA_ClassNamePropertyId, "View")
Set aryElm = elmEdge.FindAll(TreeScope_Descendants, uiCnd)
'edgeのClassName->Viewは、2個めの要素
Set aryElm = aryElm.GetElement(1).FindAll(TreeScope_Children, uiAuto.CreateTrueCondition)
Set elmMSN = aryElm.GetElement(0)
'ここで、inspectを見ると、Viewの階層の下は、
'Classname => WebViewとChrome_RenderWidgetHostHWND がありますが、
Set uiCnd = uiAuto.CreatePropertyCondition(UIA_ClassNamePropertyId, "Chrome_RenderWidgetHostHWND")
'または
Set uiCnd = uiAuto.CreatePropertyCondition(UIA_ClassNamePropertyId, "WebView")
'のどちらを使っても
Set elmMSN = elmMSN.FindFirst(TreeScope_Children, uiCnd)
elmMSN is nothing が trueになってしまいます。
ここで、上記2つのクラスは無視して
Viewから 全数取得
Set aryElm = elmMSN.FindAll(TreeScope_Children, uiAuto.CreateTrueCondition)
Set elmMSN = aryElm.GetElement(0)
すると、
elmMSNは、2段下の Name:新しいタブ を拾います。
つまり、WebViewと、Chrome_RenderWidgetHostHWND が無いことになっているのですが
vbだからでしょうか?
あるいは、プログラムのUIAutomationで無視されるオブジェクトは気にしなくてもいい
など
どう解釈したらよいのでしょうか。
最終的には、ブラウザのテキスト拾ったり、クリックしたりができればよいです。
「補足1」最初のブラウザを取得するところNameが環境によって違うかもしれません。
「補足2」実際のソースでは、「新しいタブ」からVIewまで、
1つずつ階層を下ってViewまで拾いましたが、ソースの掲載上2番目のviewと決め打ち
しています。