Wie man markierten text aus einem BELIEBIGEN Fenster (mit UI-Automation) - C#

Ich habe ein kleines tray-Anwendung, die registriert eine system-wide Hotkeys. Wenn der Benutzer einen text in einer beliebigen Anwendung und drückt diese hotkey-ich möchte in der Lage zum erfassen der ausgewählten Texte. Ich bin derzeit dabei, dies mit 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 );

}

Das funktioniert bei einigen apps (wie Editor, visual Studio Bearbeiten Kästen und so), aber nicht für alle (z.B. Word, FireFox, Chrome, und so weiter.)

Hier jemand mit Ideen, wie Sie in der Lage sein zu retreive den ausgewählten text in einer BELIEBIGEN Anwendung?

  • Trotz dem, was weiter unten gesagt, denken Sie daran, dass die Zwischenablage nur gefüllt wird, wenn die Anwendung die Strg-C (oder was auch immer); die Zwischenablage ist nicht die Lösung
InformationsquelleAutor nelshh | 2010-11-22
Schreibe einen Kommentar