PDA

Ver la Versión Completa : Capturar texto de otras ventanas


NeWsP
26-02-2004, 11:13:44
Buenos dias :)

tengo un pregunta un poco rara ... ( en mi linea jejejjee )

no se si se puede hacer, supongo q si.

Imaginaos una ventana de otro programa q tiene de titulo "manue" y el contenido de la ventana , es una linea de texto q pone "hola"

Hay alguna forma de capturar ese "hola" ???

lo unico q consigo es capturar el titulo de la ventana ("manue") con el GetWindowText

Espero q me podais ayudar

Muchas gracias por adelantado

Gydba
26-02-2004, 13:13:32
En teoría conociendo el handle del control y mediante la función GetWindowText podés obtener lo que buscas.
Fijate en Planet-Source-Code.com que hay ejemplos en VB que pueden ser adaptados y que tratan de inspectores de ventanas.

roman
26-02-2004, 16:14:35
Hay alguna forma de capturar ese "hola" ???

lo unico q consigo es capturar el titulo de la ventana ("manue") con el GetWindowText


Como te indica Gydba debes obtener el "handle" del control que contiene el texto. Esto lo puedes hacer utilizando la función FindWindowEx de la API de Windows que te permite recorrer los controles que haya en la ventana principal.

// Saludos

seoane
27-02-2004, 00:47:37
El unico problema es que la funcion GetWindowText no devuelve el texto de otras aplicaciones que no sean la tuya. Para hacer eso se puede usar el mensage WM_GETTEXT que permite obtener el texto de otras ventanas.

Aqui te dejo un ejemplo que obtiene el texto de todas las ventanas que encuentra y lo escribe en un memo.


function EnumChildProc(handle: Thandle; Param: lParam): boolean; stdcall;
var
Buffer: PChar;
l: integer;
begin
result:= TRUE;
l:= sendmessage(handle,WM_GETTEXTLENGTH,0,0);
if l > 0 then
begin
GetMem(Buffer, l+1);
try
sendmessage(handle,WM_GETTEXT,l+1,lParam(buffer));
form1.Memo1.Lines.Add(string(buffer));
finally
FreeMem(Buffer);
end;
end;
end;

function EnumWindowsProc(handle: Thandle; Param: lParam): boolean; stdcall;
begin
result:= TRUE;
EnumChildWindows(handle,@EnumChildProc,0);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
EnumWindows(@EnumWindowsProc,0);
end;