自动单击菜单项

时间:2019-09-12 20:00:24

标签: vba menu ui-automation

借助VBA脚本,我想自动化第三方应用程序。我已经设法使用Windows API自动化所有窗口,但是菜单控件(栏和弹出窗口)却失败了。该应用程序已经很旧了,但由于它仅在公司内部使用,因此我无法真正为您提供更多信息。

我已经设法通过Windows API读取菜单项名称,但是当我发送WM_COMMAND时,应用程序崩溃了。另外,我无法检索有关这些菜单项的任何其他信息。尽管如此,它仍然可以在记事本上完美运行。因此,我认为第三方应用程序没有希望。

选项专用模块 显式选项

私有声明PtrSafe函数FindWindow库“ user32”别名“ FindWindowA”(ByVal lpClassName为任意,ByVal lpWindowName为任意)

公共Sub main()

Dim hwnd As LongPtr: hwnd = API.FindWindow(lpClassName:="Notepad", lpWindowName:="Untitled - Notepad")

If hwnd = 0 Then Exit Sub

With New UIAutomationClient.CUIAutomation

    With .ElementFromHandle(hwnd:=ByVal hwnd).FindFirst(scope:=TreeScope.TreeScope_Descendants, _
                                                condition:=.CreatePropertyCondition(propertyId:=UIA_PropertyIds.UIA_NamePropertyId, _
                                                                                    Value:="File"))

        Debug.Print .CurrentName

    End With

End With

结束子

我通过inspect.exe注意到实际的菜单项(“新建”,“新窗口”,“打开...”等)是: -类型为UIA_MenuItemControlTypeId。 -“文件”的祖先,但“文件”没有子项。

您能告诉我如何从“文件”中获取“新”吗?

感谢您的帮助!

0 个答案:

没有答案