2010-11-22 6 views
7

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?

+0

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

Antwort

7

Leider gibt es keine Möglichkeit, den ausgewählten Text aus einer beliebigen Anwendung zu erhalten. UI Automation funktioniert wenn die Anwendung UIA TextPattern unterstützt; leider, die meisten nicht. Ich schrieb eine Anwendung, die dies versuchte, und hatte eine Reihe von Fallbacks.

Ich habe versucht (so ziemlich in Reihenfolge):

  1. UIA.TextPattern
  2. Internet Explorer spezifische (dies hatte verschiedene Implementierungen für IE 6,7,8,9)
  3. Adobe Reader- spezifisch
  4. Zwischenablage

Dieses abgedeckt 80-90% der Anwendungen gibt, aber es gab einige, die noch immer nicht.

Beachten Sie, dass das Wiederherstellen der Zwischenablage eigene Probleme hat; Einige Anwendungen (Office usw.) stellen herstellerspezifische Informationen in die Zwischenablage, die Zeiger auf interne Daten haben können. Wenn Sie Ihre eigenen Informationen in die Zwischenablage schreiben, werden die internen Daten freigegeben, und wenn Sie die alten Daten zurückgeben, zeigt die Zwischenablage nun auf freigegebene Daten, was zu Abstürzen führt. Sie könnten dies umgehen, indem Sie nur bekannte Zwischenablageformate speichern/wiederherstellen, aber das führt wiederum zu einem seltsamen Verhalten, bei dem sich die Apps "falsch" verhalten und nicht abstürzen.

+0

Wie hat die Adobe Reader spezifische Implementierung funktioniert? Sie haben irgendwelche Details, lassen Sie es mich wissen. –

+0

Ich habe ein Problem in IE, würden Sie bitte eine Lösung dafür vorschlagen? –

+0

@ChintanPatel Das war vor einigen Jahren, und ich habe den Quellcode verloren, also kann ich nicht helfen. –

1

Ist es möglich, in die Zwischenablage zu schauen und Ihren Hotkey zu machen: STRG + C?

Sie können ausgewählten Text aus keiner Anwendung lesen. Zum Beispiel haben einige PDF-Dateien geschützten Inhalt, der Kopien verbietet.

1

UIA Technologie nicht von allen Anwendungen unterstützt wird, können Sie versuchen, MSAA in einigen Fällen zu verwenden (wie FF, Chrome, etc.), aber Sie werden immer noch viele Probleme bekommen. Der beste Weg ist, aktuelle Zwischenablage Text speichern, senden Sie "STRG + C" Tastendruck Nachricht über SendMessage WinAPI-Funktion, erhalten Zwischenablage Text und ursprünglichen Zwischenablage Text wiederherstellen, wie Rick sagte.

+1

Die Zwischenablage muss gespeichert und anschließend wieder eingefügt werden. Das ist nicht immer einfach. –

+0

Ich habe versucht, aber ich konnte ausgewählten Text aus Office Word nicht erfassen. :( http://stackoverflow.com/questions/25281314/capture-selected-text-from-any-window-does-not-sucess-with-office-word – Kiradev

Verwandte Themen