Ver la Versión Completa : Lamar una aplicación y ejecutar acciones
Waldo
28-11-2012, 03:40:39
Hola Buen día/Noche, tengo una pregunta que nos e si la pueda expresar, existen dos aplicaciones independientes llamese A Y B, mi deseo es que desde B llamar a A, hasta a qui no hay problema, el asunto es como decirle a A que ejecute cierto menu y abra la ventana que yo desee desde la Aplicacion B.
EJEMPLO.
Desde la aplicación B decirle a A que abra la ventana de captura de factura.
Considérese que las dos son aplicaciones delphi y que conozco de la estructura de las dos
ecfisa
28-11-2012, 07:02:10
Hola Waldo.
Una opción es usar la estructura de windows COPYDATASTRUCT (http://msdn.microsoft.com/en-us/library/windows/desktop/ms649010%28v=vs.85%29.aspx), enviando y capturando el mensaje WM_COPYDATA (http://msdn.microsoft.com/en-us/library/windows/desktop/ms649011%28v=vs.85%29.aspx).
Te pongo un ejemplo bién simple que despliega y pliega un ComboBox situado en el receptor, de acuerdo a dos botones ubicados en el emisor:
Aplicación A (emisor)
...
type
TfrSender = class(TForm)
btnAbrir: TButton;
btnCerrar: TButton;
procedure btnAbrirClick(Sender: TObject);
procedure btnCerrarClick(Sender: TObject);
private
procedure SendMsgToReceiver(WndTitle: PChar; Msg: String);
public
end;
...
implementation
procedure TfrSender.SendMsgToReceiver(WndTitle: PChar; Msg: string);
var
HW : HWND;
cds : TCopyDataStruct;
begin
HW := FindWindow(nil, PChar(WndTitle));
try
cds.dwData := 0;
cds.cbData := Length(Msg)+1;
cds.lpData := PChar(Msg);
SendMessage(HW, WM_COPYDATA, Integer(Handle), Integer(@cds));
finally
CloseHandle(HW)
end;
end;
procedure TfrSender.btnAbrirClick(Sender: TObject);
begin
SendMsgToReceiver('frReceiver','Abrir');
end;
procedure TfrSender.btnCerrarClick(Sender: TObject);
begin
SendMsgToReceiver('frReceiver','Cerrar');
end;
Aplicacion B (receptor)
...
type
TfrReciber = class(TForm)
ComboBox1: TComboBox;
private
procedure WMGetData(var Msg: TWMCopyData); message WM_COPYDATA;
public
end;
...
implementation
procedure TfrReciber.WMGetData(var Msg: TWMCopyData);
var
RE: string;
begin
RE:= Pchar(Msg.CopyDataStruct.lpData);
if RE = 'Abrir' then
ComboBox1.Perform(CB_SHOWDROPDOWN, 1, 0);
if RE = 'Cerrar' then
ComboBox1.Perform(CB_SHOWDROPDOWN, 0, 0);
end;
También te adjunto los fuentes de ambos para que puedas probarlo.
Saludos.
Eduardo Mendoza
05-03-2013, 23:52:06
Eliminado por repetido.
No cumple las normas.
Casimiro Notevi
06-03-2013, 00:09:14
..
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php)?, gracias por tu colaboración :)
Ya has abierto un hilo con tu pregunta y se te ha contestado, si necesitas más aclaraciones entonces sigue en aquel hilo, no repitas la misma pregunta en distintos hilos, gracias.
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.