![]() |
fremdes RichEdit auslesen?
moin,
Möchte eine fremdes RichEdit auslesen mit allen Formatierungen. Wie stelle ich das an?? Bitte keine WM_GETTEXT Antworten. |
Re: fremdes RichEdit auslesen?
Hallo!
Suche mal nach: ![]() |
Re: fremdes RichEdit auslesen?
Ich habe jetzt genau die selbe Frage und wollte deswegen nochmal den Thread beleben.
Weiß jemand definitiv ob es mit EM_Streamout möglich ist ein RichEdit eines anderen Programmes auszulesen. Oder is dafür ein Hook erforderlich. Wäre für jede Hilfe dankbar! |
Re: fremdes RichEdit auslesen?
Bei diesen Ansätzen hast du immer das Problem, dass die andere Anwendung einen anderen Adressraum hat als deine. Für EM_STREAMOUT brauchst du ein Callback, den Code dafür müsstest du irgendwie in den fremden Adressraum injezieren.
Vielleicht reicht dir ja ein Ansatz über die Zwischenablage. Deren alter Inhalt wird dabei allerdings zerstört. Außerdem funktioniert's nicht bei Texten > 65535 Zeichen Länge.
Delphi-Quellcode:
SendMessage(rh, WM_SETREDRAW, 0, 0);
try sel := SendMessage(rh, EM_GETSEL, 0, 0); SendMessage(rh, EM_SETSEL, 0, -1); SendMessage(rh, WM_COPY, 0, 0); SendMessage(rh, EM_SETSEL, LOWORD(sel), HIWORD(sel)); finally SendMessage(rh, WM_SETREDRAW, 1, 0); end; // Jetzt den Inhalt der Zwischenablage auswerten |
Re: fremdes RichEdit auslesen?
hmm...es kann vorkommen das ich mehrere RichEdit's auslesen muss (meine Anwendung mehrmals starte)
Dadurch ist ja ein in die quere kommen von 2 Auslesungen in der zwischenablage nicht zu verhinden, kann man das irgendwie managen ( also den daten ne ID geben um sie zuzuorden oder so) oder steh ich da wieder vor einem unlösbaren problem? |
Re: fremdes RichEdit auslesen?
Wenn die Anwendungen alle von dir sind, dann hast du doch alle Möglichkeiten der Interprozesskommunikation: MMF, Pipes, WM_COPYDATA, Dateien, Registry, ...
|
Re: fremdes RichEdit auslesen?
Ok, um die ganze Sache mal klarer zu gestalten.
Ich habe _ein_ Programm, das mehrere fremde Programme, die alle ein RichEdit besitzen, auslesen soll. Jedoch bearbeitet mein Programm jedes RichEdit individuell, also müssen die ausgelesen Daten eindeutig zuordbar sein. Ich habe über google eine Hook Tutorial als pdf gefunden wo die Themen die Luckie ansprach alle kurz angerissen sind. Da als neuer nun zu wissen welche wohl die für mich passende Anwendung ist ist schwer. Könnt ihr mir da viell. noch ein bissl weiter helfen? |
Re: fremdes RichEdit auslesen?
Zitat:
Kurz: praktisch machbar, aber sehr aufwändig - und je nach Anforderungen nicht ausschließlich mit Delphi für Win32 lösbar. |
Re: fremdes RichEdit auslesen?
Wenn du die Formatinformationen nicht brauchst, dann geht's auch noch recht einfach:
Delphi-Quellcode:
function GetForeignWindowText(wnd: HWND): string;
var len: Integer; begin len := SendMessage(wnd, WM_GETTEXTLENGTH, 0, 0); SetLength(Result, len); SendMessage(wnd, WM_GETTEXT, len + 1, Integer(@Result[1])); end; |
Re: fremdes RichEdit auslesen?
Ok, ich greife jetzt wie von Flocke vorgeschlagen auf das RichEdit zu.
Nun ist das auszulesende RichEdit eine Art Log-Fenster. Wenn ich aller 500ms die Funktion zum auslesen des Textes aufrufe reicht das schon. Aber dies ist keine so guter Weg wenn es dann mal bis zu 12 verschiedene RichEdits sind die ich alle auslese. Gibts da ne möglichkeit das Eventabhängig zu machen und nicht immer nur starr aller 500ms zu checken? (Wie gesagt, das RichEdit gehört einer fremden Anwendung) Robert |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz