如何阅读 WM_PAINT 消息的内容?
How to read content of WM_PAINT message?
我的目标是 screen-scrape 不断更新新文本的程序的一部分。我已经尝试使用 Tesseract 进行 OCR,但我相信如果可能的话以某种方式截取文本会更有效率。我曾尝试使用 GetWindowText() 函数,但它仅 returns window 标题。使用 Window Detective 我确定每当 window 以我希望捕获的方式更新时,WM_PAINT 消息就会可靠地发送到 window.
我研究了一些 Windows API 挂钩,但似乎大多数涉及 DLL 注入的技术都是为了发送新消息,而不是访问已发送消息的内容。
我该如何解决这个问题?
当你说 'screen-scrape' 时,你真的是这个意思吗?阅读您的 post,听起来您实际上想要获取子 window 或相关控件中的 text - 作为文本,而不仅仅是作为位图。为此,您需要:
确定哪个子 window 或控件实际包含您要访问的文本。听起来您可能已经这样做了,但如果没有,选择的工具通常是 Spy++。 (请注意:您使用的 Spy 版本必须与您的应用程序的 'bitness' 匹配。)
然后,首先,尝试弄清楚window中的文本是否可以通过某种方式检索到。如果它是标准 Windows 控件(特别是 EDIT 或 RICHEDIT),那么有记录的方法可以做到这一点,请参阅 MSDN。
如果这没有成功,您可能会成功挂钩对 ExtTextOut()
的调用,尽管这不是一个令人愉快的提议,我认为您可能很难实现它。也就是说,我相信公认的方式(在某种意义上 'accepted')是 here.
参考第 3 点,即使您实现了它,您如何知道对 ExtTextOut()
的任何特定调用是否吸引了您感兴趣的 window ?答案很可能是 HWND WindowFromDC()
.
希望对您有所帮助。请不要带着一堆关于这如何适用于您的特定用例的详细问题来找我。我对此并不感兴趣,这些只是作为一些标志posts。
我的目标是 screen-scrape 不断更新新文本的程序的一部分。我已经尝试使用 Tesseract 进行 OCR,但我相信如果可能的话以某种方式截取文本会更有效率。我曾尝试使用 GetWindowText() 函数,但它仅 returns window 标题。使用 Window Detective 我确定每当 window 以我希望捕获的方式更新时,WM_PAINT 消息就会可靠地发送到 window.
我研究了一些 Windows API 挂钩,但似乎大多数涉及 DLL 注入的技术都是为了发送新消息,而不是访问已发送消息的内容。
我该如何解决这个问题?
当你说 'screen-scrape' 时,你真的是这个意思吗?阅读您的 post,听起来您实际上想要获取子 window 或相关控件中的 text - 作为文本,而不仅仅是作为位图。为此,您需要:
确定哪个子 window 或控件实际包含您要访问的文本。听起来您可能已经这样做了,但如果没有,选择的工具通常是 Spy++。 (请注意:您使用的 Spy 版本必须与您的应用程序的 'bitness' 匹配。)
然后,首先,尝试弄清楚window中的文本是否可以通过某种方式检索到。如果它是标准 Windows 控件(特别是 EDIT 或 RICHEDIT),那么有记录的方法可以做到这一点,请参阅 MSDN。
如果这没有成功,您可能会成功挂钩对
ExtTextOut()
的调用,尽管这不是一个令人愉快的提议,我认为您可能很难实现它。也就是说,我相信公认的方式(在某种意义上 'accepted')是 here.参考第 3 点,即使您实现了它,您如何知道对
ExtTextOut()
的任何特定调用是否吸引了您感兴趣的 window ?答案很可能是HWND WindowFromDC()
.
希望对您有所帮助。请不要带着一堆关于这如何适用于您的特定用例的详细问题来找我。我对此并不感兴趣,这些只是作为一些标志posts。