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

时间:2009-12-13 19:05:09

标签: c# windows

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

我还没试过,但我四处搜索,发现这可以通过使用windows API(user32.dll)来完成 - GetForegroundWindow()

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

我猜测是否获得了所选的文本/图像,然后我可以将其复制到剪贴板并在我的应用程序中使用它,因为所有应用程序都可以访问剪贴板。

有什么想法?任何替代/更好的方法来做到这一点?

2 个答案:

答案 0 :(得分:0)

GetForegroundWindow()是获得活动窗口的方式。

我认为你可能会对你想做的事情有困难。每个窗口由许多子窗口组成。您需要获取任何子窗口的文本。

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

例如,您可以使用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.然后检查剪贴板中您想要的内容。


您也可以使用Active Accessibility SDK找到解决方案或部分解决方案。

答案 1 :(得分:0)

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