【问题标题】:Copying text from a textbox in C++从 C++ 中的文本框中复制文本
【发布时间】:2010-11-10 01:08:10
【问题描述】:

具体来说,一个程序正在运行,我想从程序内部的文本框中提取文本。

一般来说,我应该使用什么方法/主题来“进入”我系统上运行的另一个 .exe 并使用 C++ 从其中的文本框中提取数据?

我只是想要一个指向我可能实现这一目标的方式的指针。谢谢。

【问题讨论】:

  • 最坏的情况,获取屏幕截图并使用某种类型的文本阅读程序。但那是出路,所以这不是一个有效的答案。我相信您所追求的高度取决于其他程序是用什么编程语言/ gui工具包编写的。
  • 什么程序?答案高度依赖于此——例如,适用于本机 Win32 或 .NET WinForms 应用程序的东西,不适用于 WPF 或 Qt 应用程序。

标签: c++ windows text copying


【解决方案1】:

您可以简单地将EnumChildWindowsSendMessageWM_GETTEXT 一起使用到要从中获取文本的特定窗口。

【讨论】:

    【解决方案2】:

    另一种“进入”GUI 应用程序(特定于 Windows)的常用技术是 DLL 注入 + Windows 子类化。这可能被认为是有点高级的 windows 编程,一本关于该主题的优秀书籍是 'Windows Via C/C++'。简要介绍一下这本质上是什么:

    1. 将您的自定义 DLL 注入目标程序的地址空间。
    2. 查找目标文本框的 HWND。
    3. 子类化与更改/编辑此文本框相关的函数。
    4. 现在,只要有人编辑/更改文本,您的函数将首先被调用,允许您查看/操作文本。您甚至可以选择不将其转发给普通处理程序。

    另外请注意,我上面提到的任何内容都不是“破解窗口”,这是一种定义明确的行为,是 Microsoft 有意实施的。实际上,它在 MSDN 上有很好的记录。

    如果您想这样做,请查看“Windows 子类化”和“设置挂钩”。

    【讨论】:

      【解决方案3】:

      请参阅 How I Built a Working Online Poker Bot: Extracting Text from 3rd-Party Applications 以了解 @DeusAduro 提到的注入和子类技术以及其他一些相同技术的解释,例如挂钩 GDI 文本输出 API。当然,如果它是标准文本框,您始终可以发送 WM_GETTEXT,这甚至可以跨进程边界工作(实际上旨在跨进程边界工作)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多