Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi fremdes RichEdit auslesen? (https://www.delphipraxis.net/44419-fremdes-richedit-auslesen.html)

API 19. Apr 2005 10:22


fremdes RichEdit auslesen?
 
moin,

Möchte eine fremdes RichEdit auslesen mit allen Formatierungen.

Wie stelle ich das an??

Bitte keine WM_GETTEXT Antworten.

toms 19. Apr 2005 11:00

Re: fremdes RichEdit auslesen?
 
Hallo!

Suche mal nach: Hier im Forum suchenEM_STREAMOUT. Wobei das fuer ein RichEdit in einem anderen Prozess nicht einfach sein wird.

robert23 18. Aug 2006 11:09

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!

Flocke 18. Aug 2006 11:20

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

robert23 18. Aug 2006 12:56

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?

Luckie 18. Aug 2006 12:59

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, ...

robert23 18. Aug 2006 13:14

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?

NicoDE 18. Aug 2006 13:38

Re: fremdes RichEdit auslesen?
 
Zitat:

Zitat von robert23
Da als neuer nun zu wissen welche wohl die für mich passende Anwendung ist ist schwer.

Wie bereits erwähnt, ist das eigentliche Problem, dass man in den Zielprozessen Code benötigt (EditStreamCallback) der mit deiner Anwendung kommuniziert. Hooks werden oft missbraucht um Code in den Zielprozess zu laden. Es stellen sich aber noch weitere Fragen. Müssen zum Beispiel anderen Prozessorarchitekturen unterstützt werden (eine x86-Hook-DLL wird nicht in native x64/IA64/Alpha-Prozesse geladen), und so weiter. Alles in allem ist das eine größere Aufgabe, die auch nicht von Profis (und schon gar nicht 'Neulingen' auf diesem Gebiet) 'mal eben' entwickelt wird.

Kurz: praktisch machbar, aber sehr aufwändig - und je nach Anforderungen nicht ausschließlich mit Delphi für Win32 lösbar.

Flocke 18. Aug 2006 14:40

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;

robert23 9. Sep 2006 18:20

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.
Seite 1 von 2  1 2      

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