投稿者 魔界の仮面弁士  (社会人) 投稿日時 2023/1/2 13:59:05
> Create{And|Or}Condition メソッドは 2 つの条件を繋ぎます。
> これを繰り返せばより多くの条件を繋げることができますが、代わりに
> Create{And|Or}ConditionFromArray メソッドを使うこともできます。
> Create{And|Or}ConditionFromNativeArray については、おそらく使うことはないでしょう。

間違っていました。m(_ _)m

CreateAndConditionFromArray や
CreateOrConditionFromArray は、 VBA から利用できないようです。

CreateAndConditionFromNativeArray や
CreateOrConditionFromNativeArray であれば利用できます。

Dim uiAuto As CUIAutomation8
Set uiAuto = New CUIAutomation8

Dim cond(0 To 2) As IUIAutomationCondition
Set cond(0) = uiAuto.CreateAndCondition( _
    uiAuto.CreatePropertyCondition(UIA_ControlTypePropertyId, UIA_WindowControlTypeId), _
    uiAuto.CreatePropertyCondition(UIA_ClassNamePropertyId, "Chrome_WidgetWin_1") _
)   'Chromium(Google Chrome, Microsoft Edge) 
Set cond(1) = uiAuto.CreateAndCondition( _
    uiAuto.CreatePropertyCondition(UIA_ControlTypePropertyId, UIA_WindowControlTypeId), _
    uiAuto.CreatePropertyCondition(UIA_ClassNamePropertyId, "IEFrame") _
)   'MSIE(Microsoft Internet Explorer) 
Set cond(2) = uiAuto.CreateAndCondition( _
    uiAuto.CreatePropertyCondition(UIA_ControlTypePropertyId, UIA_PaneControlTypeId), _
    uiAuto.CreatePropertyCondition(UIA_ClassNamePropertyId, "MozillaWindowClass") _
)   'Firefox(Mozilla Firefox) 

'『Visual Basic でサポートされていないオートメーション タイプが関数で使用されています。』 
'Set condBrowser = uiAuto.CreateOrConditionFromArray(cond) 

'第一引数に「配列の先頭要素」を渡し、第二引数に「配列の要素数」を渡す 
Set condBrowser = uiAuto.CreateOrConditionFromNativeArray(cond(0), 3)

Dim uiBrowsers As IUIAutomationElementArray
Set uiBrowsers = uiAuto.GetRootElement().FindAll(TreeScope_Children, condBrowser)