Hola foreros, me gustaria poder leer las lineas escritas (y poder escribir) de un campo, creo que es richtext de otra aplicacion.
El motivo es que dicha aplicacion guarda los datos en formato binario y me parece que va a ser dificil interpretar esa informacion.

Y parece ser que tienen una aplicacion (que solo funciona en win95) que ya hace eso que ahora me piden a mi (para modernizarlo, jejeje)
Hasta ahora lo que he conseguido es:
1) Localizo las aplicaciones en ejecucion.
Código Delphi
[-]
function EnumWinProc(Wnd: HWND; Param: pointer): boolean; stdcall; export;
var
WinText: array[0..255] of char;
pID: longword;
begin
Result := True;
GetWindowText(Wnd, WinText, 255);
if (WinText <> '')
and (IsWindowVisible(Wnd))
and (GetWindow(Wnd, gw_Owner) = 0)
then
begin
GetWindowThreadProcessId(Wnd, pID);
FormMain.Memo1.Lines.Add(IntToStr(pID) + ' ' + WinText);
FormMain.Memo1.Lines.Add(StringOfChar('-', 80));
ListWinInfoFromPId(pID, FormMain.Memo1.Lines); end;
end;
2) Localizo las ventanas de cada aplicacion.
Código Delphi
[-]
procedure ListWinInfoFromPId(PId: DWORD; strings: TStrings);
type
TWinParam = record
PId: DWORD;
S: TStrings;
end;
PWinParam = ^TWinParam;
var
WinParam: TWinParam;
function EnumWindowsProc(Handle: Thandle; lParam: LPARAM): boolean; stdcall;
var
PId: DWORD;
buffer: array [1..255] of char;
begin
Result := true;
PId := 0;
GetWindowThreadProcessId(Handle, PId);
if PWinParam(lParam).PId = PId then
begin
PWinParam(lParam).S.Add('hWnd: ' + IntToHex(Handle, 8)+'h');
GetWindowText(Handle, @buffer, 255);
PWinParam(lParam).S.Add('Caption: ' + buffer);
GetClassName(Handle, @buffer, 255);
PWinParam(lParam).S.Add('Clase: ' + buffer);
PWinParam(lParam).S.Add('--------------------');
Result := true;
end;
end;
begin
WinParam.PId:= PId;
WinParam.S:= strings;
EnumWindows(@EnumWindowsProc, LPARAM(@WinParam));
end;
3) Localizar los controles de cada ventana, aqui es donde necesito ayuda

Para obtener los controles de nuestra aplicacion uso
Código Delphi
[-]
for i := 0 to (ComponentCount - 1) do
begin
if Components[i] is TWinControl then
begin
if (Components[i] is TEdit)
or (Components[i] is TMaskEdit)
or (Components[i] is TCheckBox) then
begin
Memo1.Lines.Add(Components[i].Name);
TFormMain(Components[i]).OnEnter := nil;
TFormMain(Components[i]).OnExit := nil;
end;
end;
end;
¿Como podria obtener los controles de cada ventana? he buscado por todas parte y no encuentro la funcion, y se que deberia existir.
El cuarto paso seria crear una thread que vigile dicho control y cuando entren nuevas lineas, las capturo e interpreto.
El quinto paso serie escribir en ese mismo control ciertas lineas que son necesarias.
Alguna ayudita, please.
