【问题标题】:Modifying Windows GUI objects from outside using handles使用句柄从外部修改 Windows GUI 对象
【发布时间】:2013-11-16 20:10:37
【问题描述】:

在做一个自动化测试应用程序时,我正在寻找一种方法来直接通过从外部应用程序访问这些元素来修改 Windows 应用程序 GUI 元素(标签、按钮文本等)。如果我知道一个窗口/对象句柄(通过 Spy++ 获得),我将如何在内存中搜索要替换的字符串或其他值?

谢谢。

【问题讨论】:

  • 如果您只想更改控件的标签,您可以向其发送WM_SETTEXT 消息。
  • 那么应用程序内部值呢?如何向其他进程处理项发送消息?我如何知道它是否是标签、编辑框...检测类型并以某种方式进行转换?

标签: c++ winapi reverse-engineering automated-tests


【解决方案1】:

UI Automation 是一种更好的方式来做你想做的事情。它甚至适用于自定义控件(实现 UI 自动化)、无窗口控件等。

【讨论】:

  • 这不完全符合我的要求。除非其他行为符合某些标准,否则我需要能够强制某些值来伪造情况。例如:我希望能够在类似于多个 GPU 模型的 GPU-Z 应用程序中强制提供信息。被测试的用户需要能够直观地判断某些数据是否错误且不匹配。我负担不起重新制作每个此类应用程序的 GUI。所以这个想法是运行一个服务/应用程序,它将循环并维护假值......
  • 现在,当我这样说的时候......想象一下它是一个游戏教练,我需要在那个“游戏”中强制某个变量的值。如何搜索(我猜?)数组中第一个字符的内存地址,并在比游戏刷新循环(每 10 毫秒、每 1 毫秒...)更快的循环中强制将我的数据放入其中?
  • @user2956864 那么你不是在测试,你(充其量)是在嘲笑。这将是非常特定于应用程序的。
  • @user 我看不出使用 UI 自动化无法实现您的要求。您添加了一个新要求(直接访问变量的内存位置),但未能提供理由说明为什么这是必要的,或者这如何在使用 UI 自动化的基础上添加任何内容。现在,如果您真的想要查找窗口文本的地址,可以通过HWND 获得此信息。如果你愿意写一个可以访问内核内存的模块。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多