2009-02-26 24 views
9

Quiero ser capaz de detectar 1. (y, si es necesario 2. aborto) el apagado del sistema operativo de mi solicitud, preferentemente mediante el uso de la API de Windows.¿Cómo abortar el apagado en Windows (XP | Vista) programáticamente?

Sé que es posible abortar el apagado manualmente con el comando shutdown -a En el peor de los casos, podría ejecutar ShellExecute esto, pero me preguntaba si habría una forma mejor de evitar el apagado programáticamente.

Tal vez sería suficiente para ser notificado mediante programación que el sistema operativo está a punto de apagarse - cómo hacer esto?

Respuesta

6

De MSDN:

El mensaje WM_QUERYENDSESSION se envía cuando el usuario elige para finalizar la sesión o cuando una aplicación llama a una de las funciones de apagado del sistema. Si alguna aplicación devuelve cero, la sesión no finaliza. El sistema deja de enviar mensajes WM_QUERYENDSESSION tan pronto como una aplicación devuelve cero.

Así, WindowProc de mi aplicación ahora procesa el mensaje y devuelve WM_QUERYENDSESSION0.

No esperaba que fuera tan sencillo; Como beneficio adicional, sino que también funciona en Windows 2000.

+0

Niza, esto no tiene por qué ser la comunidad wiki por el camino. :) – BobbyShaftoe

+0

Bueno, es correcto * suficiente * para mí. Puede haber algunos caprichos u operaciones avanzadas para este mensaje, y CW permite que más personas editen. – Piskvor

1

En lo que respecta a 'simplemente' devolver 0 para bloquear el cierre, no es tan simple como que si quiere hacerlo de la manera adecuada. Especialmente en Vista. Por ejemplo lea también http://msdn.microsoft.com/en-us/library/ms700677(VS.85).aspx

+0

El artículo parece decir "es mucho más complicado en Vista: Las aplicaciones que deben bloquear el apagado debe utilizar la nueva API razón de apagado". Nunca en todo el artículo menciona una forma "más adecuada" de manejar esto en XP. ¿Me he perdido algo? – Piskvor

Cuestiones relacionadas