Ich habe eine kleine Taskleiste Anwendung, die einen systemweiten Hotkey registriert. Wenn der Benutzer irgendwo in irgendeiner Anwendung einen Text auswählt und diesen Hotkey drückt, möchte ich den ausgewählten Text erfassen können. Ich tue dies mit AutomationElements zur Zeit:So erhalten Sie ausgewählten Text aus einem beliebigen Fenster (mit UI-Automatisierung) - 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);
}
dies für einige Anwendungen funktioniert (wie Editor, Visual Studios Editboxen und so weiter), aber nicht für alle (wie Word, FireFox, Chrome und so weiter.)
Wer hier mit irgendwelchen Ideen, wie man den ausgewählten Text in JEDER Anwendung abrufen kann?
Beachten Sie, dass die Zwischenablage nur gefüllt wird, wenn die Anwendung implementiert _ Ctrl-C (oder was auch immer); Die Zwischenablage ist keine Lösung. – smirkingman