Hola a Todos:
Estoy trabajando con Delphi5 y tengo una aplicación que permite la ejecución de solo una instancia a la vez. Esto está logrado creando Mutex y cuando se ejecuta la segunda instancia de la aplicación, se envía un mensaje a la primera instancia para que ésta se venga al primer plano y la segunda instancia deja de ejecutarse.
Hasta aquí todo bien, el problema que tengo ahora es que quiero mandar otro mensaje a la primera instancia de la aplicación antes de hacer todo lo explicado en el párrafo anterior y lo hago, pero la primera instancia no me responde, por lo visto no recibe el mensaje.
Os pongo la parte del código fuento que previene que se ejecute más de una instancia de la aplicación a la vez:
Código Delphi
[-]
CreateMutex( nil, False, PChar( 'Main' ) );
if GetLastError = ERROR_ALREADY_EXISTS then
begin
EnviarMensaje;
SendMessage( HWND_BROADCAST, RegisterWindowMessage( 'Main' ), 0, 0 );
Halt(0);
end;
El problema viene en el Procedimiento EnviarMensaje;
Código Delphi
[-]
procedure EnviarMensaje;
var
nHwnd : HWND;
Estructura: TGdbMantEstruc;
nModo : TModoEjecucion;
nResult : Integer;
begin
nHwnd := FindWindow( PChar( 'TMain' ), CAPT_VENTANA_PPAL_GDBMANT );
if nHwnd <> 0 then
begin
ClearGdbMantEstruc( Estructura ); try
nModo := DetectarModoEjecucion();
case nModo of
tEjecutarAhora :
if ParamCount = 2 then
Estructura.szDescTareaOld := ParamStr( 2 );
end;
nResult := SendMessage( nHwnd,
ModoEjecucionToCodigoMessage( nModo ),
longint( @Estructura ),
0 );
finally
ClearGdbMantEstruc( Estructura, True );
end;
end;
end;
Por ultimo en el procedimiento DefaultHandler del formulario principal de la aplicación se pone lo siguiente para tratar el mensaje que se supone que debe llegar a ella, pero que no está llegando.
Código Delphi
[-]
procedure TMain.DefaultHandler(var Message);
begin
inherited DefaultHandler(Message);
if TMessage( Message ).Msg = fUserMessage then
begin
ReplyMessage( 0 );
CargarFicheroLog;
end
else if TMessage( Message ).Msg >= WM_USER + 1000 then
begin
case TMessage( Message ).Msg of
WM_USER + 1000 + 0 : ;
WM_USER + 1000 + 1 : ;
WM_USER + 1000 + 2 : ;
WM_USER + 1000 + 3 : ;
WM_USER + 1000 + 4 : ;
WM_USER + 1000 + 5 : ;
WM_USER + 1000 + 6 : ;
WM_USER + 1000 + 7 : ;
WM_USER + 1000 + 8 : ;
WM_USER + 1000 + 9 : ;
WM_USER + 1000 + 10 : ;
WM_USER + 1000 + 11 : ;
WM_USER + 1000 + 12 : ;
WM_USER + 1000 + 13 : ;
WM_USER + 1000 + 14 :
EjecutarTarea( PGdbMantEstruc( TMessage( Message ).WParam )^.szDescTareaOld );
end;
end;
end;
No sé si lo que quiero hacer es factible o no y si es afirmativo, entonces ¿ En que me puedo estar equivocando ?.
Les agradezco el tiempo prestado y sus posibles respuestas de antemano