He dado un giro a mi pregunta inicial y he usado el
RegisterWindowMessage para que las dos instancias de la misma aplicación se entiendan entre si con el mismoi dentificador de mensaje y he cambiado un poco la función que envia elmensaje. Ahora ha quedado así
Código Delphi
[-]
procedure EnviarMensaje;
var
Estructura : TTGebMantEtruct;
nModo : TModoEjecucion;
nResult : Integer;
begin
ClearGdbMantEstruc( Estructura );
try
nModo := DetectarModoEjecucion();
case nModo of
tEjecutarAhora : if ParamCount = 2 then Estructura.szDescTareaOld := PChar( ParamStr( 2 ) );
end;
nResult := SendMessage( HWND_BROADCAST,
RegisterWindowMessage( CAPT_WND_MESSAGE_ACTIVATE_APP ),
Integer( nModo ),
longint( @Estructura ) );
finally
ClearGdbMantEstruc( Estructura, True );
end;
end;
Ahora si se comunican las dos instancias, pero tengo un nuevo problema y es que la primera instancia cuando recibe el mensaje, éste le llega vacío. Os mando la declaración de la estructura para ver si es que hago algo mal
Código Delphi
[-]
TGdbMantEstruc = packed record
szDescTareaOld : WideString;
szDescTareaNew : WideString;
bTareaActiva : Boolean;
clsAcciones : TColeccionAcciones;
clsProgramaciones : TColeccionProgramaciones;
end;
PGdbMantEstruc = ^TGdbMantEstruc;
TTGebMantEtruct = TGdbMantEstruc;
Y la función que procesa el Mensaje cuando llega ha quedado así:
Código Delphi
[-]
procedure TMain.DefaultHandler(var Message);
var
szTareaName: String;
begin
inherited DefaultHandler(Message);
if TMessage( Message ).Msg = RegisterWindowMessage( CAPT_WND_MESSAGE_ACTIVATE_APP ) then
begin
szTareaName := PGdbMantEstruc( @TMessage( Message ).LParam )^.szDescTareaOld;
ShowMessage( 'szTareaName ' + szTareaName );
case TMessage( Message ).WParam of
0 : ;
1 : ;
2 : ;
3 : ;
4 : ;
5 : ;
6 : ;
7 : ;
8 : ;
9 : ;
10 : ;
11 : ;
12 : ;
13 : ;
14 :
EjecutarTarea( PGdbMantEstruc( @TMessage( Message ).LParam )^.szDescTareaOld );
end;
end;
end;
Os sigo agradeciendo el tiempo prestado por tratar de ayudarme