Ver Mensaje Individual
  #3  
Antiguo 22-05-2006
Aldo Aldo is offline
Miembro
 
Registrado: ene 2004
Posts: 46
Reputación: 0
Aldo Va por buen camino
Traspaso de Estructura como parámetros entre 2 aplicaciones

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 ); 
        // El ShowMessage lo pongo para ver que me trae en el campo szDescTareaOld de la estructura 
        case TMessage( Message ).WParam of
              0  : { tNormal };
              1  : { tTaskBar };
              2  : { tInstalar };
              3  : { tDesinstalar };
              4  : { tCrearAccion };
              5  : { tCrearProgramacion };
              6  : { tEditarAccion };
              7  : { tEditarProgramacion };
              8  : { tEliminarTarea };
              9  : { tEliminarAccion };
              10 : { tEliminarProgramacion };
              11 : { tDetenerServicio };
              12 : { tIniciarServicio };
              13 : { tRefrescar };
              14 : { tEjecutarAhora }
                 EjecutarTarea( PGdbMantEstruc( @TMessage( Message ).LParam )^.szDescTareaOld );
        end;
     end;
end;

Os sigo agradeciendo el tiempo prestado por tratar de ayudarme
Responder Con Cita