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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Leider, es gibt keinen Weg, um den ausgewählten text aus jeder beliebigen Anwendung. UI-Automation arbeitet wenn die Anwendung unterstützt die Microsoft-Benutzeroberflächenautomatisierung (UIA TextPattern; leider, die meisten nicht. Ich schrieb eine Anwendung, die versucht, dies zu tun, und hatte ein paar fallbacks.
Habe ich versucht (so ziemlich in der Reihenfolge):
Dieser umfasste 80-90% der Anwendungen da draußen, aber es waren ganz wenige, noch nicht.
Beachten, dass das wiederherstellen der Zwischenablage hat seine eigenen Probleme; einige Anwendungen (Office, etc.) legen Sie die Hersteller-spezifische Informationen in der Zwischenablage haben kann, dass die Zeiger in den internen Daten; wenn Sie Ihre eigene info in die Zwischenablage zu kopieren, die interne Daten veröffentlicht wird, und wenn man die alten Daten zurück, die Zwischenablage, nun auf befreiten die Daten, die in Abstürzen. Sie arbeiten könnte, um dieses etwas nur durch speichern/wiederherstellen bekannten Zwischenablage-Formate, aber wieder, dass die Ergebnisse in ein merkwürdiges Verhalten, dass apps Verhalten sich "falsch" an, anstatt abzubrechen.
UIA Technologie nicht unterstützt alle Anwendungen, können Sie versuchen, zu verwenden MSAA in einigen Fällen (wie FF, Chrome, etc.) aber Sie haben noch viele Probleme.
Der beste Weg ist, speichert den aktuellen text in der Zwischenablage, senden Sie "STRG + C" drücken, Nachricht via SendMessage WinAPI-Funktion, text in der Zwischenablage, und Wiederherstellung der text aus der Zwischenablage als Rick sagte.
Ist es möglich, mit Blick auf die Zwischenablage und machen Sie Ihre hotkey: STRG+C ?
Werden Sie nicht in der Lage zu Lesen, ausgewählten text aus jeder Anwendung. Zum Beispiel einige PDF-Dateien geschützte Inhalte, die verbietet Kopien.