将其他应用中的选定文本添加到自己的C#应用​​中

时间:2013-07-09 13:12:27

标签: c# text selected microsoft-ui-automation

我是一个能够正确响应全局热键的C#应用​​。如果按下全局热键,我想从另一个具有焦点的应用程序中获取所选文本。

我测试了原生Win32 Api,然后SendKeys CTRL + C ,剪贴板,...)和现在的Microsoft UI Automation!问题是,这仅适用于记事本,但不适用于Internet Explorer或Word或其他应用程序。

我认为必须有比我的代码更好的解决方案。我读到发送CTRL + C应该可以正常工作,但这只适用于记事本。

这是我触发全局热键时调用的方法:

    public String GetSelectedTextFromApp()
    {
        String output = "";
        AutomationElement focused = AutomationElement.FocusedElement;
        object pattern;
        TextPatternRange[] trs;
        if (focused.TryGetCurrentPattern(TextPattern.Pattern, out pattern))
        {
            TextPattern tp = (TextPattern)pattern;
            trs = tp.GetSelection();
            output = trs[0].GetText(-1);
        }
        return output;
    }

1 个答案:

答案 0 :(得分:0)

您尝试自动执行的控件可能未实现TextPattern。它可能只实现ValuePattern。此外,您关注的控件可能不是实际包含文本的控件,而是一个包装控件,您可以在其中找到实现上述模式的AutomationElement。 Andrii说,另一种可能性是控制根本不支持UIA(尽管我发现很难相信MS Word的情况)。

在这种情况下,值得使用UISpy.exe,这将帮助您查看您尝试自动化的应用程序的可视树。您还可以查看每个Pattern支持的AutomationElement。您也可以在GetSupportedPatterns()上致电AutomationElement,查看当前支持的Pattern