Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Acoplar mi form a una aplicacion externa (https://www.clubdelphi.com/foros/showthread.php?t=69909)

jandro 17-09-2010 14:34:17

Acoplar mi form a una aplicacion externa
 
Hola a todos!!

Necesito que la aplicación que estoy desarrollando vaya pegada a otra aplicación externa. Por ejemplo imaginemos que quiero que mi aplicación vaya siempre acoplada a la calculadora de windows, como podría hacer eso?? Se detectar si la aplicación esta abierta o no, pero no se como puedo averiguar que tamaño tiene y en que posición esta. Alguien me puede echar una mano?

Muchas gracias.

Saludos.
Jandro.

bosster_018 17-09-2010 16:35:34

Hola
 
Acoplar tu aplicación a otra, no se me ocurre como hacerlo...
Pero en la FTP del Foro Clubdelphi hay un ejemplo de como "poner" Una aplicación EXTERNA dentro de tu formulario. Por ejemplo el "Bloc de notas" o "notepad.exe" dentro del formulario:

Aquí el ejemplo:

Ejemplo26_notepad_window

Suerte!

bosster_018 17-09-2010 16:39:37

Se me olvidaba
 
Puedes cambiar el nombre "notepad.exe" por el nombre de la calculadora de Windows.... (No me acuerdo cual es el nombre y no tengo Windows a mano :D)
Puedes ir probando con varias aplicaciones que posee Windows Xp

Neftali [Germán.Estévez] 17-09-2010 16:40:51

Cita:

Empezado por jandro (Mensaje 376710)
Se detectar si la aplicación esta abierta o no, pero no se como puedo averiguar que tamaño tiene y en que posición esta. Alguien me puede echar una mano?

Utilizando FindWindows, supongo que puedes acceder a la ventana que pertenece a la aplicación que buscas. Una vez que tengas el Handle de la ventana, puedes probar con otras funciones de la PAI del mismo grupo tipo, GetWindwPlacement, GetWindowRect,... para obtener las coordenadas.

ecfisa 17-09-2010 20:31:32

Cita:

Empezado por Neftali (Mensaje 376716)
Utilizando FindWindows, supongo que puedes acceder a la ventana que pertenece a la aplicación que buscas. Una vez que tengas el Handle de la ventana, puedes probar con otras funciones de la PAI del mismo grupo tipo, GetWindwPlacement, GetWindowRect,... para obtener las coordenadas.

Totalmente de acuerdo con Neftali, usando FindWindow y GetWindowPlacement ;) se pueden obtener esos valores en pocas líneas y de forma sencilla:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
 Handle: THandle;
 wpPtr: TWindowPlacement;
 R: TRect;
begin
   Handle:= FindWindow(PChar('notepad'),nil);
   if Handle <> 0 then
   begin
     GetWindowPlacement(Handle, @wpPtr);
     R:= wpPtr.rcNormalPosition;
     ShowMessage('Left: '+IntToStr(R.Left)+#10#13+
                 'Top: '+IntToSTr(R.Top)+#10#13+
                 'Right: '+IntToStr(R.Right)+#10#13+
                 'Bottom: '+IntToStr(R.Bottom))
   end
end;

Saludos. :)

jandro 17-09-2010 20:40:39

Genial!! Muy buenas respuestas!!

Lo del ejemplo de meter el notepad dentro de tu apli, es genial saberlo, aunque no me vale para lo que quiero hacer.

El codigo que me da ecfisa si es a lo que yo me referia. En realidad es voy a hacer dos aplicaciones independientes, pero que si en algun ordenador se instalan las dos, quiero que si se mueve una la otra vaya pegada y tambien se mueva como si fueran una.

ecfisa, necesitaria saber tambien en tamaño que tiene la ventana (ancho y alto) hay algun parametro que me lo pueda dar??

Muchisimas gracias a todo!! Me ha ayudado mucho.

Saludos.
Jandro.

jandro 17-09-2010 20:45:18

Cita:

Empezado por jandro (Mensaje 376729)
Genial!! Muy buenas respuestas!!

Lo del ejemplo de meter el notepad dentro de tu apli, es genial saberlo, aunque no me vale para lo que quiero hacer.

El codigo que me da ecfisa si es a lo que yo me referia. En realidad es voy a hacer dos aplicaciones independientes, pero que si en algun ordenador se instalan las dos, quiero que si se mueve una la otra vaya pegada y tambien se mueva como si fueran una.

ecfisa, necesitaria saber tambien en tamaño que tiene la ventana (ancho y alto) hay algun parametro que me lo pueda dar??

Muchisimas gracias a todo!! Me ha ayudado mucho.

Saludos.
Jandro.

Me autocontesto. Acabo de darme cuenta que se puede calcular restando Right-Left y Top-bottom. Perdon.

Saludos.
Jandro.

ecfisa 17-09-2010 21:51:30

Correcto jandro.

Y parametrizando un poco queda:
Código Delphi [-]
function GetWndCoord(WndName: string): Trect;
var
 Handle: THandle;
 wpPtr: TWindowPlacement;
begin
  Handle:= FindWindow(PChar(WndName),nil);
  if Handle <> 0 then
  begin
    GetWindowPlacement(Handle, @wpPtr);
    Result:= wpPtr.rcNormalPosition;
  end
  else
    raise Exception.Create('Aplicación no encontrada');
end;

Ejemplo llamadas:
Código Delphi [-]
var
  R: TRect;
begin
    R:= GetWndCoord('notepad');
   // ó 
   ShowMessage(IntToStr(GetWndData('notepad').Top));
end;

Saludos. :)

Caral 17-09-2010 22:09:55

Hola
Cita:

Empezado por ecfisa (Mensaje 376732)
Ejemplo llamadas:
Código Delphi [-]
var
  R: TRect;
begin
    R:= GetWndCoord('notepad');
   // ó 
   ShowMessage(IntToStr(GetWndData('notepad').Top));
end;

No sera asi:
Código Delphi [-]
var
  R: TRect;
begin
    R:= GetWndCoord('notepad');
   // ó
   ShowMessage(IntToStr(GetWndCoord('notepad').Top));
end;
Lo digo por que de la otra forma a mi me da error.:)
Saludos
PD: Muy interesante amigo.

ecfisa 18-09-2010 01:41:28

Cita:

Empezado por Caral (Mensaje 376734)
Lo digo por que de la otra forma a mi me da error.:)
Saludos
PD: Muy interesante amigo.

Así es amigo. :D
Primero nombré a la función GetWndData (por Get Windows Data) pero luego me pareció más adecuado GetWndCoord (por Get Windows Coordenates). Hice el cambio en la cabecera de función, pero olvidé hacerlo en uno de los ejemplos de llamada ...

Saludos. :)

Caral 18-09-2010 01:44:10

Hola
Bueno, por esta vez te perdono, la proxima te envio a leer la guia de estilo tres veces como penitencia....:D:D:D
Saludos

Casimiro Notevi 18-09-2010 12:11:38

Cita:

Empezado por Caral (Mensaje 376761)
[..] la proxima te envio a leer la guia de estilo tres veces como penitencia....:D:D:D
Saludos

¡¡¡ Qué malvado :D !!!

jandro 19-09-2010 19:11:20

Hola de nuevo.

Ahora me surge otra pregunta.
Despues de probar este codigo con el notepad y la calculadora todo funciona, ahora necesito saber cual es el nombre de la clase de mi programa al que quiero acoplarlo... no tengo ni idea como averiguarlo. Me echais una manita?? :)

Gracias.
JAndro.

jandro 19-09-2010 19:32:31

Cita:

Empezado por jandro (Mensaje 376834)
Hola de nuevo.

Ahora me surge otra pregunta.
Despues de probar este codigo con el notepad y la calculadora todo funciona, ahora necesito saber cual es el nombre de la clase de mi programa al que quiero acoplarlo... no tengo ni idea como averiguarlo. Me echais una manita?? :)

Gracias.
JAndro.


Resuelto también con Spy&Capture!!

Saludos.


La franja horaria es GMT +2. Ahora son las 14:01:27.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi