我的目标是屏幕抓取程序的一部分,该部分程序不断更新新文本。我已经尝试过使用 Tesseract 进行 OCR,但我相信如果可能的话,以某种方式拦截文本会更有效。我尝试使用 GetWindowText(( 函数,但它只返回窗口标题。使用窗口侦测,我已经确定每当窗口以我希望捕获的方式更新时,都会可靠地将WM_PAINT消息发送到窗口。
我已经研究了Windows API Hooks,但似乎大多数涉及DLL注入的技术都是为了发送新消息,而不是访问已发送消息的内容。
我应该如何处理这个问题?
当你说"屏幕抓取"时,这就是你的真正意思吗? 阅读您的帖子,听起来您实际上想要获取相关子窗口或控件中的文本- 作为文本,而不仅仅是位图。 为此,您需要:
-
确定哪个子窗口或控件实际包含要获取的文本。 听起来您可能已经这样做了,但如果没有,选择的工具通常是Spy++。 (请注意:您使用的间谍版本必须与应用程序的"位数"相匹配。
-
然后,首先,尝试确定是否可以以某种方式检索该窗口中的文本。 如果它是一个标准的Windows控件(特别是EDIT或RICHEDIT(,那么有记录的方法可以做到这一点,请参阅MSDN。
-
如果这没有成功,你可能会成功地将调用
ExtTextOut()
,尽管这不是一个令人愉快的提议,我认为你可能很难实现它。 也就是说,我相信接受的方式(在某种意义上的"接受"一词(就在这里。 -
关于第 3 点,即使您实现了它,您如何知道是否有任何特定的
ExtTextOut()
调用正在绘制到您感兴趣的窗口? 答案,很可能是HWND WindowFromDC()
.
我希望这有所帮助。 请不要带着一堆关于这如何适用于您的特定用例的详细问题来回复我。 我对此并不感兴趣,这些只是作为一些路标。