MFC 和 UI 自动化支持

Posted

技术标签:

【中文标题】MFC 和 UI 自动化支持【英文标题】:MFC and UI Automation Support 【发布时间】:2013-11-20 20:53:54 【问题描述】:

首先,总的来说,我对 Microsoft 编程非常陌生。

情况 我有一个 MFC 应用程序,它有一个带有各种按钮的可停靠工具栏,例如“新建文件”、“保存文件”等。本质上,我需要实现的是一种自动单击这些按钮的方法。通过使用各种 GUI 间谍工具,例如 UISpy 和 Visual UI Automation,我能够看到带有 AutomationID、ClassName 等的工具栏对象。但是,我看不到此工具栏的子按钮。无论如何要暴露这些对象?这是截图http://postimg.org/image/n2drpxaa3/

如果我需要在那里更改某些内容,我可以访问源代码。

【问题讨论】:

【参考方案1】:

工具栏按钮不是真正的按钮控件,它们只是由工具栏绘制在那里。要模拟单击这些按钮,请将 WM_COMMAND 消息发送到主窗口。您可以使用 Spy 程序来确定复制工具栏按钮发送的消息所需的参数。

【讨论】:

谢谢斯科特。学习新东西。因此,为了确保我完全理解,我能够窥探到当我在 Winspector 中单击工具栏上的按钮时,我看到发送了 WM_COMMAND。它具有字段(代码:0 控制 ID:57601 控制 HWND:0x0000000)。在 C# 中,我基本上是做 SendMessage(hwnd, 57601, IntPtr.Zero, IntPrt.Zero) 然后我基本上只是模拟点击我的 UI 上的工具栏按钮? 我在让它工作时遇到了问题。 WM_COMMAND 是否应该等于 0x111 而 wParam 应该是 57601? 你应该可以使用 ::SendMessage(hwnd, WM_COMMAND, 57601, 0);无需查找 Windows 消息的十六进制值。另外,你应该可以通过查看目标程序的resource.h文件来确认57601 ID。 谢谢斯科特。只是另一个后续问题。我的工具栏上有一个“按钮”,单击该按钮会弹出一个带有一些选项的上下文/弹出菜单。我尝试监视以查看在此操作发生时是否发送了 wm_command,但没有找到。左键单击后,我确实设法找到了以下内容。 00080960řWM_ACTIVATE 00080960小号WM_SETMESSAGESTRING wStringID:0000AC5A lpszString:00000000 00080960řWM_SETMESSAGESTRING 00080960小号WM_INITMENUPOPUP hmenuPopup:07520C79 UPOS:0 fSystemMenu:假 00080960řWM_INITMENUPOPUP 跨度>

以上是关于MFC 和 UI 自动化支持的主要内容,如果未能解决你的问题,请参考以下文章

为 MFC 接口开发自动翻译

网易开源支持图像识别的自动化UI测试工具,零基础亲测好评!

前端自动化测试之UI Recorder(介绍)

Airtest---UI自动化测试项目

UI自动化测试浏览器操作及对元素的定位方法(xpath定位和css定位详解)

我可以将 MFC 支持添加到现有 ATL COM 项目吗