1

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

我测试了本机 Win32 Api,然后SendKeysCTRL + C,剪贴板,...),现在是 Microsoft UI 自动化!问题是,这仅适用于记事本,但不适用于 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;
    }
4

1 回答 1

0

您尝试自动化的控件可能未实施TextPattern。它可能只实现ValuePattern. 此外,您关注的控件可能不是实际包含文本的控件,而是一个包装控件,您将在该控件下找到AutomationElement实现上述模式的控件。另一种可能性是,就像 Andrii 所说的那样,控件根本不支持 UIA(尽管我发现在 MS Word 的情况下很难相信)。

在这种情况下,值得使用 UISpy.exe,它可以帮助您查看您尝试自动化的应用程序的可视化树。您还可以看到Pattern每个AutomationElement. 您还可以调用GetSupportedPatterns()every ,以查看当前支持AutomationElement哪些s。Pattern

于 2013-07-10T18:47:39.233 回答