PDA

Ver la Versión Completa : tipo Hwnd y string


delphos1942
05-11-2013, 18:21:56
Hola!

a ver si me guiais un poco:

Tengo un string con un numero hexadecimal, como este : 0002025A
Este numero corresponde a un handle de una ventana,

necesito convertir ese string en una variable tipo hwnd para poder llamar a la funcion getwindowtext, pasarle el hwnd y que me devuelva el titulo de esa ventana.

He intentado con un typecast, pasarlo a traves de longint, y nada me ha funcionado.

Ideas?

gracias.

delphos1942
05-11-2013, 18:51:52
Ok, ya lo he conseguido, el tipo hwnd es en realidad un entero sin signo por lo que

var
handle: longword;
ventana:hwnd

begin
handle:=strtoint('$'+stringdondeestaelhexadecimal);
ventana:= HWND(handle);
end


ya tengo un handle a esa ventana.

PEROOO

no logro que me lea el titulo de la ventana.

getwindowtext(ventana,titulo,10)

siendo ventana un hwnd y titulo un pchar.

delphos1942
05-11-2013, 19:19:32
ACTUALIZO solucionado
************

Bueno pues parece que el getwindowtext no funciona, hay que hacer otro metodo:

var
buffer:string;
i:integer;
ventana:hwnd; // valor que tenemos del anterior ejemplo

begin
i:=sendmessage(ventana,WM_GETTEXTLENGTH,0,0); // obtengo la longitud del titulo de ventana
setlength(buffer,i); // la defino
i:=sendmessage(ventana,wm_gettext,i+1,Lparam(pchar(buffer))); // obtengo el titulo en buffer
setlength(buffer,i); // otra vez defino
showmessage(buffer); // muestro texto
end;


Gracias a todos los que me han leido.

saludos.

ecfisa
05-11-2013, 21:14:11
Hola delphos1942.

Recién leo este hilo y primero que nada, te agradezco por publicar la solución que encontraste (cosa que no todos hacen). ^\||/

Por otro lado me extraña la dificultad que te presenta el uso de la función GetWindowText (http://msdn.microsoft.com/en-us/library/windows/desktop/ms633520(v=vs.85).aspx), en mi caso funciona correctamente.

Ejemplo:

...
var
H: HWND;
Title: array[0..254] of Char;
begin
H := FindWindow(nil, 'Sin título: Bloc de notas');
GetWindowText(H, Title, GetWindowTextLength(H)+1);
ShowMessage(Title);
end;


Aprovecho también para pedirte que cuando agregues código a tu mensaje utilices las etiquetas correspondientes para hacerlo mas legible, el uso es:

http://img403.imageshack.us/img403/3461/75416396.jpg

Saludos :)