Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

QueryEndSession

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: QueryEndSession Responder citando

usanso bcb6 y windows xp sp2
El problema es que cuando se cierra o reinicia windows la aplicacion no se cierra , entonces he probado con varias cosas , una fue en el closequery
application->Terminate() , se cierra la aplicacion pero tengo que volver a
decirle a windows que reincie o se apaque ,
y luego he estado probando con QUeryEndSession y EndSession , con uno y los dos a la vez , la aplicacion se cierra pero tengo que volver a darle otra vez a windows que se apague , entonces lo he solucionado en plan cutrillo
abro un dialogo y le digo que debe cerrar la aplicacion antes de cerrar windows , entocen cierra la aplicacion y luego hay que volver a darle cerrar ,y asi queda un poco mas transparente para el usuario ,
ahora viene la pregunta--->hay alguna forma de poder capturar el tipo de message(creo que con end session no se puede, pero a saber)
me refiero a si windows quiere apagarse , reiniciarse o hibernar por ejemplo
y asi poder lanzar una aplicacion para hacerlo despues de cerrar la otra
espero haberme explicado
gracias anticipadas
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Podrías mostrar como estas usando WM_QUERYENDSESSION y WM_ENDSESSION ? Ya que son los mensajes correctos para detectar que se está cerrando la sesión.

https://cppbuilder.es/viewtopic.php?t=8574
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

// al final lo he dejado todo en el query end session
Este es el ultimo que estoy usando , ya que si le doy a Msg.Result = true;
la aplicacion se cierra pero no se cierra windows , ,y tengo que volver a darle cerrar

if(!copiando){

Msg.Result = false; // si cambio a true se cierra la aplicacion pero no windows
ShowMessage("La aplicación debe cerrarse antes de Apagar el equipo \n"
" Ahora puede volver a apagar el sistema.");

Application->Terminate();
}
else if(copiando){
Msg.Result = false;/7 lo mismo que antes
ShowMessage("Se esta llevando a cabo una copia de seguridad.");
Application->Restore();
}

en estos momentos no hay codigo en el end session (todo esta en el query session)

el problema es que no puedo capturar que tipo de logoff se esta sucediendo segun esto por lo menos , por lo que veo el lparam es que dice si la aplicacion se apaga o reinicia , pero no captura si apagado o reinicio,
cogi un codigo en los foros que apaga el sistema , reincia etc , si la ejecuto con la aplicacion corriendo , termina la aplicacion y el sistema se reinia o se apaga correctamente (se ve que fuerza el apagado) , pero no me sirve ya que no puedo capturar cual es el evento exactamente

lParam

If this parameter is zero, the system is shutting down or restarting (it is not possible to determine which event is occurring).


de entrada antes del codigo que he puesto arriba usaba algo sencillo como esto ,lo proben tanto en endsession como en quey session

Msg.Result = true;
Close();
o tambien
Msg.Result = true;
Application->Terminate();
o simplemente
Msg.Result = true;

pero en ningun caso se reiniciaba el sistema , aunque la aplicacion se cerrara,
tengo que decir que estoy usandola en un trayicon
cuando el trayicon minimiza hay una variable que se llama trayicon de tipo bool que si es false dejo cerrar y si es true no , la utilizo en el closeQuery , pero aun eliminando todo el codigo del closequery tampoco funciona el reinicio de windows correctamente( con lo cual opte por poner el codigo de arriba , asi por lo menos saben que es lo que esta pasando y puede reiniciar el sistema aunque tengan que darle otra vez), no me gusta mucho la solucion , pero bueno , aunque en teoria la aplicacion correra en una maquina se usa como servidor y estara en marcha practicamente las 24 horas
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

esto se esta poniendo peor por momentos
ahora cada vez que cierro la aplicacion , a partir de la segunda vez
me sale un abnormal application terminate
tanto si cierro la aplicacion normalmente como si reinicio el sistema
pfffff , imagino que debe quedar algo en memoria.............
no se pk pero me veo empezando de 0
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

bueno pfff
ahora ya no me da el abnormal termination
creo que demasiadas variables
voy a mirar de optimizar esto un poco a ver si asi es posible reinciar el sistema correctamente con la aplicacion en marcha.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Podrías probar el código del enlace que he puesto más arriba en una aplicación nueva vacía ? porque no creo que el problema este en eso. También asegúrate de que tu programa no esté dentro de algún bucle en el momento que se llama a estos mensajes.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Si , funciona perfecto en una aplicacion vacia , incluso puse un trayicon para probar a ver y va todo perfecto , se reinicia a la primera sin problemas
ahora me queda ver porque pasa lo que pasa en la otra aplicacion
mirare de optimizar todo a ver que pasa.
Si encuentro el error lo pondre por supuesto
muchas gracias , aqui haceis todos un trabajo que no tiene precio
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

bueno , al final tengo que decir que no encontre el fallo ni de coña , me harte de buscar y al final , ya hasta arriba y con dolor de cabeza
me puse a rehacerlo todo de nuevo , como tenia hecho casi todo el codigo
solo tuve que implementarlo en la otra aplicacion , de paso fui optimizando todo lo que pude y ahora funciona todo bien , o eso parece por lo menos
ahora ya me puedo poner con el cliente a ver que pasa.......
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

hola,

a mi me pasaba lo mismo y llevo ya dos dias buscando por internet, un lio, la única forma de que funcione con seguridad (y la verdad es que no sabría explicar muy bién por que), es utilizando exit(1), ya que según cuentan, el exit(0) detiene el cierre de windows (al menos en XP), y puede ser que tanto application->Terminate() como Close(), utilicen ese exit(0) por algún lado. Es lo único que puedo decir. Seguro que alguien puede explicarlo mejor.
Este es el codigo con el cual me funciona perfecto:
(basándome en un mensaje de _Leo)
Código:

//en el .h
void __fastcall WMQueryEndSession(TWMQueryEndSession& msg);
        void __fastcall WMEndSession(TWMEndSession& msg);
        BEGIN_MESSAGE_MAP
          MESSAGE_HANDLER(WM_QUERYENDSESSION, TWMQueryEndSession, WMQueryEndSession)
          MESSAGE_HANDLER(WM_ENDSESSION, TWMEndSession, WMEndSession)
        END_MESSAGE_MAP(TForm)



//en el .cpp
void __fastcall TForm1::WMQueryEndSession(TWMQueryEndSession& msg)
{
forceclose=true; //bool para el OnCloseQuery y salte a canclose=true
msg.Result= TRUE;
exit(1);
}


void __fastcall TForm1::WMEndSession(TWMEndSession& msg)
{
// Aquí ponemos lo que queramos que se ejecute antes de cerrar la sesión
msg.Result= TRUE;
exit(1);
}



Un saludo!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.