Ver Mensaje Individual
  #17  
Antiguo 25-11-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Hola,

Me da la impresión de que aquí hay una confusión sobre el objetivo a realizar.

La primera pregunta sería: ¿para qué quieres manejar los mensajes WM_QUERYENDSESSION y WM_ENDSESSION?

Al parecer, la respuesta la das desde el primer mensaje:

Cita:
Empezado por MDSato
Lo que me gustaría conseguir es que cuando apaguen el sistema (esto es, CERRAR SESION, APAGAR EL SISTEMA o REINICIAR) mi aplicación se cerrara automáticamente.
Pero, sin ánimo de ofender, esto no tiene sentido. Cuando el sistema se apague, tu aplicación seguramente se cerrará, hagas lo que hagas (o no hagas).

Normalmente estos mensajes sólo los requieres para asegurarte que tu aplicación haga las rutinas de limpieza necesarias antes de terminar. Pero la más de las veces bastará con usar los eventos OnCloseQuery y OnClose del formulario principal.

De las pocas situaciones en que es necesario usar directamente los mensajes de Windows, es cuando necesitamos distinguir si el evento OnCloseQuery se genera bien porque simplemente alguien cierre la aplicación o bien porque se cierre la sesión de Windows. Y es así porque la VCL no considera esta situación.

Pero si como dijiste:

Cita:
Empezado por MDSato
no tengo onCloseQuery en el formulario principal... Tampoco OnClose
entonces no necesitas ninguna rutina de limpieza final, y por tanto, es innecesario pienso, el uso de WM_QUERYENDSESSION y WM_ENDSESSION.

Además, estos mensajes son para avisarte que tu aplicación se va a cerrar, mas no para avisarte que cierres tu aplicación. ¿Ves la diferencia? Así que usar Close, Halt o ExitWindowsEx no tendría porque ser necesario.

Dado que no haces rutinas de limpieza en el evento OnClose ni requieres el uso de OnCloseQuery, me da la impresión de que todo este hilo se originó porque por alguna razón tu aplicación estaba impidiendo que se cerrara la sesión de Windows.

La razón habría que buscarla, en lugar de andar "cuchareando" a ver con qué comando se arregla.

Si la razón está en el RxTrayIcon entonces quizá baste con desactivarlo en el evento OnClose.

// Saludos
Responder Con Cita