-1

我的目标是截取不断更新新文本的程序的一部分。我已经尝试使用 Tesseract 进行 OCR,但我相信如果可能的话,以某种方式截取文本会更有效。我曾尝试使用 GetWindowText() 函数,但它只返回窗口标题。使用Window Detective我已经确定,每当窗口以我希望捕获的方式更新时,都会可靠地将 WM_PAINT 消息发送到窗口。

我对 Windows API Hooks 进行了一些研究,但似乎这些涉及 DLL 注入的大多数技术旨在发送新消息,而不是访问已发送消息的内容。

我应该如何解决这个问题?

4

1 回答 1

1

当你说'screen-scrape'时,你真的是这个意思吗?阅读您的帖子,听起来您实际上想要获取子窗口或相关控件中的文本- 作为文本,而不仅仅是位图。为此,您需要:

  1. 确定哪个子窗口或控件实际包含您要访问的文本。听起来您可能已经这样做了,但如果没有,选择的工具通常是Spy++。(请注意:您使用的 Spy 版本必须与您的应用程序的“位数”相匹配。)

  2. 然后,首先,尝试确定是否可以以某种方式检索该窗口中的文本。如果它是标准的 Windows 控件(特别是 EDIT 或 RICHEDIT),那么有记录的方法可以做到这一点,请参阅 MSDN。

  3. 如果这没有成功,您可能会成功地挂钩调用ExtTextOut(),尽管这不是一个令人愉快的提议,我认为您可能很难实现它。也就是说,我相信接受的方式(在某种意义上的“接受”这个词)就在这里

  4. 参考第 3 点,即使您实现了它,您如何知道是否有任何特定调用ExtTextOut()正在绘制到您感兴趣的窗口?回答,很可能,HWND WindowFromDC()

我希望这会有所帮助。请不要向我提出一堆关于这如何适用于您的特定用例的详细问题。我对此并不真正感兴趣,这些只是作为一些路标。

于 2018-06-11T09:50:57.090 回答