gpt4 book ai didi

C# - 从现有进程中读取文本

转载 作者:可可西里 更新时间:2023-11-01 10:40:44 25 4
gpt4 key购买 nike

我们必须从现有的 VB6 应用程序中读取文本。所以我们使用了kernel32之外的FindWindow、GetWindowText和EnumChildWindows方法,可以枚举和读取这个过程中显示的文本。

我们可以用我们的方法阅读 90% 的文本,但是一般有一个特定的控件(或框)我们无法阅读。

我们无法使用 UI spy 程序定位我们需要阅读的文本,因此我假设它们必须使用 GDI/GDI+ 将其直接呈现到屏幕上。他们不能使用控件或窗口来呈现我们需要的文本。

有没有办法确定他们如何呈现文本并可能阅读文本?

我们不想获取窗口的 hDC 并将其渲染到位图上并以某种方式反向验证文本……这可能是一场噩梦。

解决方案:我们发现仅在此框中查找 2-3 个短语而不是实际对文本进行 OCR 是可能的。因此,我们将把它渲染成位图并将其与 2-3 个预存位图进行比较,这样我们就可以逐个像素地进行比较。

最佳答案让我们找到了这个解决方案。

最佳答案

如果他们直接在表面上绘图,没有一些奇怪的 OCR 东西就无法获得文本。

更新:在考虑了您的问题之后,我认为按照您的描述(抓取窗口的 hDC 并从中创建位图)将是一项相对容易的任务(相对于首先尝试拦截呈现文本的 API 调用)。

例如,它不会像在手写体上进行 OCR 那样困难。只要能确定 Visual Basic 6 应用程序绘制文本所使用的字体,并且只要每次将要抓取的文本绘制到窗体的同一位置,就相对容易破解将文本绘制成离散字符(如微小的小位图),然后将每个字符与您使用相同字体以相同大小绘制的预先生成的字符集合进行比较。字符将在逐个像素的基础上完美匹配。

如果程序运行在不同的系统上,用不同的字体绘制文本,可能会出现问题。

关于C# - 从现有进程中读取文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1433854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com