PDA

Ver la Versión Completa : Tamaño de Ventana de Windows


pai_delpher
30-03-2008, 20:52:54
Saludos a todos en la comunidad.

Quiero saber la posición de una ventana de windows (la ventana del Windows Live Messenger), investigando supe de varias funciones de la API:

GetWindowPlacement y GetWindowRect

Ya probé con este código y variaciones en los Left, Right, Top y Bottom, pero no me muesta las coordenadas reales, no entiendo en que se basan las posiciones que recibo, por favor ayudenme a enterder como funcionan estas funciones.


Var
VMess : HWND;
Tam : TRect;
H, W : Integer;
Lugar : WindowPlacement;

begin
VMess := FindWindow(nil, 'Windows Live Messenger');
GetWindowRect(VMess, Tam);
//W := Tam.Right - Tam.Left;
//H := Tam.Bottom - Tam.Top;
//Lugar.length := sizeof(Lugar);
GetWindowPlacement(VMess, @Lugar);
W := Lugar.rcNormalPosition.Right - Lugar.rcNormalPosition.Bottom;
H := Lugar.rcNormalPosition.Left - Lugar.rcNormalPosition.Top;
Button1.Caption := IntToStr(W) + ' ; '+ IntToStr(H);
//Form1.Caption :=


Como verán lo intente de varias formas, pero no logro sacarlo. Mi objetivo es obtener la posición al iniciar y actualizala al moverla.

Desde ya Muchas Gracias.

PeterPunk
31-03-2008, 12:07:43
var
VMess : HWND;
procedure TForm1.FormCreate(Sender: TObject);
begin
VMess := FindWindow(nil, 'Windows Live Messenger');
Timer1.Interval := 50;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
Tam: TRect;
begin
if vMess <> 0 then
begin
GetWindowRect(VMess, Tam);
Form1.Caption := 'Posición: ' + InttoStr(Tam.Left) + ' ; ' + IntToStr(Tam.Top) + ' - '
+'Tamaño: ' + IntToStr(Tam.Right - Tam.Left) + 'x' + IntToStr(Tam.Bottom - Tam.Top);
end
end;

Saqué el FindWindow del timer para que no lo ejecutase case 50 milisegundos, pero si se cierra y abre el Windows Live Messenger mientras tu programa esté activo será mejor que lo vuelvas a meter.

pai_delpher
31-03-2008, 12:20:11
Muchas gracias, de todas formas, ya me había dado cuenta del Left y Top. Me funcionó correctamente.

En relación al Timer mi idea era usar un evento de la API que me indique cuando la ventana es movida, más que nada por la lentitud y perdida de memoria innecesaria.

Desde ya muchas gracias por responder.

Saludos.