У меня есть небольшое приложение на панели задач, которое регистрирует общесистемные горячие клавиши. Когда пользователь выбирает текст в любом месте любого приложения и нажимает эту горячую клавишу, я хочу иметь возможность захватить выделенный текст. В настоящее время я делаю это с помощью 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 и т. Д.)
Кто-нибудь из присутствующих, у кого есть идеи, как восстановить выделенный текст в ЛЮБОМ приложении?