在此论坛中使用IUIAutomation
和VBA
有一些意图。但是所有这些都依赖于这样一个事实:你知道要在FindWindowEx
中使用它的类的名称。最受欢迎的是:
Controlling IE11 "Do you want to Open/Save" dialogue window buttons in VBA
hWnd = FindWindowEx(hWnd, 0, "Frame Notification Bar", vbNullString)
本网站中的代码可以帮助您了解PARENTS和CHILDRENS处理程序的关联方式 http://www.vbaexpress.com/kb/getarticle.php?kb_id=52
自动 - > AutoIt窗口信息) https://www.autoitscript.com/site/autoit/允许您单击窗口并获取处理程序/类/名称详细信息。
非常令人沮丧,很难缩小到我们想要点击的元素。这段代码允许你这样做
Sub test2()
Dim h1, h2 As Long
Dim sWindowName As String
Dim AutomationObj As IUIAutomation
Dim WindowElement As IUIAutomationElement
Dim Button As IUIAutomationElement
Dim hWnd As LongPtr
sWindowName = vbNullString
Set AutomationObj = New CUIAutomation
h1 = FindWindow("#32770", "Internet Explorer")
Debug.Print h1
While h1 <> 0
h2 = FindWindowEx(h1, 0, vbNullString, sWindowName)
If h2 <> 0 Then
Set WindowElement = AutomationObj.ElementFromHandle(ByVal h2)
Dim iCnd As IUIAutomationCondition
Set iCnd = AutomationObj.CreatePropertyCondition(UIA_NamePropertyId, "Save")
Set Button = WindowElement.FindFirst(TreeScope_Subtree, iCnd)
Dim InvokePattern As IUIAutomationInvokePattern
If Button.CurrentName = "Save" Then
Set InvokePattern = Button.GetCurrentPattern(UIA_InvokePatternId)
InvokePattern.Invoke
h1 = 0
Else
h1 = h2
End If
Else
h1 = 0
End If
Debug.Print h2
Wend
End Sub
h1
和FindWindow
允许您缩小以获取IE窗口的句柄(以及SAVE按钮)
有没有人有这样的击球手方法?因为在这里我只是在#32770下循环处理器等待获得SAVE按钮。它确实有效,但我应该是一种系统/有效的方式来理解如何在IUIAutomation
中使用正确的处理程序
答案 0 :(得分:0)
通过inspect.exe可以通过多种方式查看确定元素的方法。在示例部分的autoit中,您可以找到许多有关如何处理ms uia的示例。您可以使用createtruecondition从getrootelement开始过滤,该创建条件也适用于vba。然后,您将获得桌面元素的所有主窗口。