如何阅读WM_PAINT消息的内容?

时间:2018-06-08 22:22:18

标签: windows winapi hook wm-paint

我的目标是通过屏幕抓取程序的一部分,该程序会不断更新新文本。我已经尝试过使用Tesseract的OCR,但我相信如果可能的话,以某种方式拦截文本会更有效率。我试图使用GetWindowText()函数,但它只返回窗口标题。使用Window Detective我已经确定,只要窗口以我希望捕获的方式更新,WM_PAINT消息就会被可靠地发送到窗口。

我看了一下Windows API Hooks,但似乎大多数涉及DLL注入的技术都是为了发送新消息,而不是访问已发送消息的内容。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

当你说'屏幕刮'时,那是什么意思?阅读你的帖子,听起来你实际上想要在子窗口或控件中的文本 - 作为文本,而不仅仅是位图。为此,您需要:

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

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

  3. 如果这没有成功,你可能会成功挂钩ExtTextOut(),虽然这不是一个令人愉快的主张,我认为你可能很难实现它。也就是说,我认为接受的方式(在某种意义上“接受”一词)是here

  4. 参考第3点,即使你实现了它,你怎么知道对ExtTextOut()的任何特定呼叫是否正在吸引你感兴趣的窗口?最有可能回答HWND WindowFromDC()

  5. 我希望有所帮助。请不要再向我提出一些关于这可能适用于您的特定用例的详细问题。我对此并不感兴趣,这些只是作为一些标志。