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 自动化支持的主要内容,如果未能解决你的问题,请参考以下文章