代码之家  ›  专栏  ›  技术社区  ›  pavanred

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

  •  1
  • pavanred  · 技术社区  · 15 年前

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

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

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

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

    有什么想法吗?有其他/更好的方法吗?

    2 回复  |  直到 15 年前
        1
  •  0
  •   Brian R. Bondy    15 年前

    是的 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 .

        2
  •  0
  •   snarf    15 年前

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