Ver Mensaje Individual
  #17  
Antiguo 26-04-2006
Avatar de PoZi
PoZi PoZi is offline
Miembro
 
Registrado: abr 2006
Posts: 11
Reputación: 0
PoZi Va por buen camino
Smile Por fin

Muy Buenas a todos¡¡¡
Por fin ha funcionado. Ha costado sudor y lágrimas, pero bueno todavía no quiero echar las campanas al vuelo porque no lo he probado profundamente.
Me ha funcionado de dos formas:
1ª.- Mandando el mensaje WM_CLOSE al lanzador para que al recibirlo cierre windows:
Código Delphi [-]
{ Esto va en la aplicación principal }
procedure TForm1.CerrarProceso;
var
  IdVentana: HWnd;
begin
  IdVentana := FindWindow(nil, 'Lanzador');
  SendMessage(IdVentana, WM_CLOSE, 0, 0);
end;
 
{ Y esto en el lanzador }
procedure TForm1.WMQueryEndSession(var Msg: TWMQueryEndSession);
begin
  WinSesionFin := true;
  inherited;
end;
procedure TForm1.WMEndSession(var Msg: TWMEndSession);
begin
  WinSesionFin := Msg.EndSession;
  inherited;
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if WinSesionFin then
    begin
      EnvioMensaje; { Envia HotKey a Aplicación principal para que guarde los datos de salida }
      WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
      CanClose := true;
    end
  else
    begin
      ExitWindowsEx(EWX_FORCE,0);
      Application.Terminate;
    end;
end;
Initialization
  Application.Title:='Lanzador';
  Application.ShowMainForm:=False;

No me funcionaba porque tenía puesto Application.Title:=''; y además yo pensaba que como no tenía ventana activa, pues usaba Application.ShowMainForm:=False; ), no le podía enviar el mensaje.

2ª.- Igual que antes pero enviando un HotKey al lanzador (como indica arriba seoane), en lugar de WM_CLOSE. Cuando el lanzador lo detecta Cierra Windows y se cierra él.

Muchas Gracias a todos, sobretodo a Lepe que le he estado dando la tabarra durante bastante tiempo.
Saludos.

Última edición por PoZi fecha: 03-05-2006 a las 20:49:13.
Responder Con Cita