Как получить выделенный текст из ЛЮБОГО окна (с помощью автоматизации пользовательского интерфейса) - C #

У меня есть небольшое приложение на панели задач, которое регистрирует общесистемные горячие клавиши. Когда пользователь выбирает текст в любом месте любого приложения и нажимает эту горячую клавишу, я хочу иметь возможность захватить выделенный текст. В настоящее время я делаю это с помощью AutomationElements:

//Using FocusedElement (since the focused element should be the control with the selected text?)
AutomationElement ae = AutomationElement.FocusedElement;        
AutomationElement txtElement = ae.FindFirst(TreeScope.Subtree,Condition.TrueCondition);
if(txtElement == null)
    return;

TextPattern tp;

try
{
    tp = txtElement.GetCurrentPattern(TextPattern.Pattern) as TextPattern;
}
catch(Exception ex)
{
    return;
}

TextPatternRange[] trs;

if (tp.SupportedTextSelection == SupportedTextSelection.None)
{
    return;
            }
else
{
    trs = tp.GetSelection();
    string selectedText = trs[0].GetText(-1);
    MessageBox.Show(selectedText );

}

Это работает для некоторых приложений (таких как блокнот, поля редактирования визуальных студий и т. Д.), Но не для всех (таких как Word, FireFox, Chrome и т. Д.)

Кто-нибудь из присутствующих, у кого есть идеи, как восстановить выделенный текст в ЛЮБОМ приложении?

7
задан nelshh 22 November 2010 в 09:26
поделиться