C# 在windows应用程序中,如何从任何窗口检查和检索(如果有)选定的文本/图像?

C# 在windows应用程序中,如何从任何窗口检查和检索(如果有)选定的文本/图像?,c#,windows,C#,Windows,我有一个windows应用程序,它应该不断跟踪活动的应用程序窗口 我还没有尝试,但我四处搜索,发现这可以通过使用windows API(user32.dll)-getForeGroundIndow() 但是,我的需求还需要应用程序在活动窗口中查找任何选定的文本或图像(可以是文档、pdf、电子邮件、浏览器、mspaint等)。我不知道该怎么做。是否可以在活动窗口中查找选定的文本或图像,如果找到,是否可以将其检索到我的应用程序并使用 我猜如果获得了选定的文本/图像,那么我可以将其复制到剪贴板,并从我

我有一个windows应用程序,它应该不断跟踪活动的应用程序窗口

我还没有尝试,但我四处搜索,发现这可以通过使用windows API(user32.dll)-
getForeGroundIndow()

但是,我的需求还需要应用程序在活动窗口中查找任何选定的文本或图像(可以是文档、pdf、电子邮件、浏览器、mspaint等)。我不知道该怎么做。是否可以在活动窗口中查找选定的文本或图像,如果找到,是否可以将其检索到我的应用程序并使用

我猜如果获得了选定的文本/图像,那么我可以将其复制到剪贴板,并从我的应用程序中使用它,因为所有应用程序都可以访问剪贴板


有什么想法吗?有没有其他/更好的方法可以做到这一点

Yes
getforegroundindow()
是获取活动窗口的方式

我想你可能在想做什么方面有困难。每个窗口由许多子窗口组成。您需要获取这些子窗口中任何一个子窗口的文本

通常,这类工作是使用名为spy++的工具完成的。您可以发现窗口层次结构,然后使用Win32 API获取子窗口

例如,您可以使用WM_GETTEXT消息获取windows文本

    [DllImport("user32.dll", EntryPoint="SendMessage")]
    public static extern int SendMessageForGetText(int hwnd, int msg, int wParam, StringBuilder sb);
    const int WM_GETTEXT = 0x000D; 
不过,我不确定你是否能找到解决问题的通用方法。您可能需要对每个应用程序进行处理


根据您想要执行的操作,您可能只需要发送消息以发送Ctrl+C,然后检查剪贴板以获取所需内容



您还可以使用。

不同的程序(甚至同一程序的不同部分)在内部以不同的方式表示和处理选择,从而找到解决方案或部分解决方案。在许多应用程序中,可以在多个控件中选择某些内容。大多数文本框通常都是相当标准的,但许多具有更高级文本编辑功能的应用程序使用的自定义文本框与此不同。不同的PDF查看器将以不同的方式工作,不同的图形应用程序将以不同的方式工作,等等。

重复:我确实查看了这些线程。事实上,这就是我学到的,我必须使用user32.dll-getForeGroundIndow()来获取活动窗口等。除此之外,还有一个是Python线程,我试图从中尽可能多地理解它。另一个c#线程确实有一些答案,我正在尝试实现这些答案。但是,它们只涉及选定的文本。我需要知道是否有可能在类似的线路上使用图像。因此,我可能需要为每个应用程序分别处理这些。wordweb是我使用过的一个应用程序,具有类似的实现(但只有文本)。wordweb工作得很好。有人知道wordweb是如何实现的吗。我不确定,但我觉得为每个应用程序分别处理这些程序听起来非常详尽。对不起,我不知道那个程序。我认为您最好的选择是调查主动可访问性SDK。