【发布时间】:2015-04-22 12:03:34
【问题描述】:
我正在努力寻找一种可靠的方法来获取当前处于前台的窗口的内容/文本。如果可能的话,它应该能够从用户当前正在使用的每个可能的程序中确定文本
我尝试了什么:
- 拍摄当前活动窗口的屏幕截图,应用一些过滤器并运行 OCR 算法(tesseract .Net 包装器)。这可行,但需要很长时间并且不是很准确。
- 然后我尝试了一些 Windows API 函数(FindWindow 和 SendMessage),如 here 所述。例如,我可以让它为标准编辑器(记事本)运行,但不适用于大多数其他程序
- 我还尝试使它与 AutoHotKey 和 WinGetText 函数以及 .Net Wrapper 一起工作。在这里,我只是得到一些关于窗口的信息,但绝不是它的文本......
不幸的是,现在,我不知道该怎么做,因为我陷入了各种困境……有人有这方面的经验或知道一种可行的方法吗?任何建议都非常感谢
【问题讨论】:
-
没有通用的方法可以做到这一点。如果程序支持可访问性,那么您可能可以使用可访问性 API 来提取文本。如果文本是控件的标题(例如 STATIC),则可以使用
GetWindowText。如果只是通过TextOut或类似方式呈现的纯文本,那么 OCR 是您唯一的选择。 -
UIAutomation 是标准方式。不过,并非所有应用都以这种方式暴露自己。
-
@JonathanPotter:感谢您的评论!是的,文本通常可能不是控件的内容,只是来自 IDE、浏览器窗口、Word、Outlook 等。你可能知道是否有可能以某种方式挂钩到文本渲染(即实际窗口在哪里创建)?
-
@DavidHeffernan:谢谢!你可能有一个开始的链接吗? (是不是像这样msdn.microsoft.com/en-us/library/ms788751(v=vs.110).aspx)谢谢!
-
@casaout 是的,应该可以; here aremore resources