Tengo una pequeña aplicación de bandeja que registra una tecla de acceso directo en todo el sistema. Cuando el usuario selecciona un texto en cualquier lugar de cualquier aplicación y presiona esta tecla de acceso directo, quiero poder capturar el texto seleccionado. Actualmente estoy haciendo esto utilizando AutomationElements:Cómo obtener el texto seleccionado de CUALQUIER ventana (usando la Automatización de IU) - 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);
}
Esto funciona para algunas aplicaciones (como Bloc de notas, cajas de edición estudios visuales y tal) pero no para todos (como Word, Firefox, Chrome, y así sucesivamente.)
¿Alguien aquí con alguna idea de cómo recuperar el texto seleccionado en CUALQUIER aplicación?
A pesar de lo que se dice a continuación, recuerde que el portapapeles solo se llena _si la aplicación implementa_ Ctrl-C (o lo que sea); el portapapeles no es una solución – smirkingman