У меня есть небольшое приложение для лотков, которое регистрирует горячую клавишу в системе. Когда пользователь выбирает текст в любом месте любого приложения и нажимает эту горячую клавишу, я хочу иметь возможность захватить выделенный текст. Я сейчас делаю это с помощью AutomationElements:Как получить выделенный текст из ЛЮБОГО окна (с использованием автоматизации пользовательского интерфейса) - C#
//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, и так далее.)
Кто-нибудь здесь с любыми идеями о том, как можно получить выделенный текст в ЛЮБОЙ заявке?
Несмотря на сказанное ниже, помните, что буфер обмена заполняется только тогда, когда приложение реализует Ctrl + C (или что-то еще); буфер обмена не является решением – smirkingman