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
[-]
procedure TForm1.CerrarProceso;
var
IdVentana: HWnd;
begin
IdVentana := FindWindow(nil, 'Lanzador');
SendMessage(IdVentana, WM_CLOSE, 0, 0);
end;
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;
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.