C# 获取任何活动窗口的内容

C# 获取任何活动窗口的内容,c#,wpf,winapi,C#,Wpf,Winapi,我正在努力寻找一种可靠的方法来获取当前前景中窗口的内容/文本。如果可能的话,它应该能够从用户当前使用的每个可能的程序中确定文本 我尝试的是: 获取当前活动窗口的屏幕截图,应用一些过滤器并运行OCR算法(tesseract.Net包装器)。这是可行的,但需要很长时间,而且不太准确 然后我尝试了一些Windows API函数(FindWindow和SendMessage),如前所述。例如,我可以让它为标准编辑器(记事本)运行,但不能为大多数其他程序运行 我还尝试使用自动热键和功能,然后再次使用。在

我正在努力寻找一种可靠的方法来获取当前前景中窗口的内容/文本。如果可能的话,它应该能够从用户当前使用的每个可能的程序中确定文本

我尝试的是:

  • 获取当前活动窗口的屏幕截图,应用一些过滤器并运行OCR算法(tesseract.Net包装器)。这是可行的,但需要很长时间,而且不太准确
  • 然后我尝试了一些Windows API函数(FindWindow和SendMessage),如前所述。例如,我可以让它为标准编辑器(记事本)运行,但不能为大多数其他程序运行
  • 我还尝试使用自动热键和功能,然后再次使用。在这里,我只是得到了一些关于窗口的信息,但它的文本并没有

不幸的是,现在,我不知道该怎么办了,因为我被困在各个方面。。。有没有人有这样的经验或者知道一种有效的方法?任何建议都非常受欢迎

很难找到从应用程序检索文本的单一解决方案。不同的项目需要不同的方法

对于自动热键,使用Acc.ahk的AccViewer是首选方法。Acc适用于多种控件以及控件中的元素,它可以覆盖比AutoHotkey的
ControlGet
命令多得多的控件类型

Acc库[AHK_L](2012年9月27日更新)-脚本和函数-自动热键社区

可访问信息查看器-Alpha版本(2012-09-20)-脚本和功能-自动热键社区

描述一些进一步的文本检索方法的链接:

另请注意:


COM(组件对象模型)由AutoHotkey本机处理。它可以用于从Internet Explorer中的web元素中检索文本,并且通过VBA代码,可以从MS Office程序(如MS Excel和MS Word)中检索文本。

没有通用的方法。如果程序支持可访问性,那么您可能可以使用可访问性API来提取文本。如果文本是控件的标题(例如静态),则可以使用
GetWindowText
。如果只是通过
TextOut
或类似方式呈现的纯文本,则OCR是您唯一的选择。UIAutomation是标准方式。但并不是所有的应用程序都是这样暴露自己的。@JonathanPotter:谢谢你的评论!是的,文本通常可能不是控件的内容,只是来自IDE、浏览器窗口、Word、Outlook等。您是否知道是否可以以某种方式连接到文本呈现(即实际窗口的创建位置)?@DavidHeffernan:谢谢!你可能有开始的链接吗?(是这样的吗)谢谢@卡萨奥特:是的,这应该行得通;