我的目标是通过屏幕抓取程序的一部分,该程序会不断更新新文本。我已经尝试过使用Tesseract的OCR,但我相信如果可能的话,以某种方式拦截文本会更有效率。我试图使用GetWindowText()函数,但它只返回窗口标题。使用Window Detective我已经确定,只要窗口以我希望捕获的方式更新,WM_PAINT消息就会被可靠地发送到窗口。
我看了一下Windows API Hooks,但似乎大多数涉及DLL注入的技术都是为了发送新消息,而不是访问已发送消息的内容。
我该如何解决这个问题?
答案 0 :(得分:1)
当你说'屏幕刮'时,那是什么意思?阅读你的帖子,听起来你实际上想要在子窗口或控件中的文本 - 作为文本,而不仅仅是位图。为此,您需要:
确定哪个子窗口或控件实际包含您要获取的文本。听起来你可能已经这样做但如果没有,选择的工具通常是Spy++。 (请注意:您使用的间谍版本必须与您的应用程序的“位数”匹配。)
然后,首先,尝试弄清楚是否可以以某种方式检索该窗口中的文本。如果它是一个标准的Windows控件(特别是EDIT或RICHEDIT),那么有记录的方法可以做到这一点,请参阅MSDN。
如果这没有成功,你可能会成功挂钩ExtTextOut()
,虽然这不是一个令人愉快的主张,我认为你可能很难实现它。也就是说,我认为接受的方式(在某种意义上“接受”一词)是here。
参考第3点,即使你实现了它,你怎么知道对ExtTextOut()
的任何特定呼叫是否正在吸引你感兴趣的窗口?最有可能回答HWND WindowFromDC()
。
我希望有所帮助。请不要再向我提出一些关于这可能适用于您的特定用例的详细问题。我对此并不感兴趣,这些只是作为一些标志。