Puede leer todo sobre los cambios introducidos en Vista here. Deberías leer ese artículo muy cuidadosamente.
Las API que está buscando son ShutdownBlockReasonCreate
, ShutdownBlockReasonDestroy
y ShutdownBlockReasonQuery
. Recuerde que estas API solo están disponibles en el servidor Vista/2008. Tendrás que implementar un comportamiento de repliegue en 2000/XP.
Si necesita bloquear el apagado, llame al ShutdownBlockReasonCreate
pasando el controlador a la ventana principal y el motivo como una cadena. Esta cadena es lo que se muestra en el diálogo de bloqueo bloqueado, es decir, "1 máquina virtual está en uso" en su captura de pantalla.
Si la operación que bloquea el apagado se completa, llame al ShutdownBlockReasonDestroy
.
Tenga en cuenta que todavía debe implementar WM_QUERYENDSESSION
para hacer que todas las piezas encajen juntas. Esta es la parte que realmente bloquea el cierre.
En XP también debe responder a WM_ENDSESSION
y si su aplicación bloqueó el apagado, es educado mostrar un mensaje que indique por qué. Si no lo hace, entonces el usuario se rasca la cabeza de por qué la computadora está ignorando las instrucciones para apagar.
Sé que al usar el comando shutdown en la línea de comandos, se pueden especificar mensajes de apagado personalizados para mostrar, ¿quizás esto está relacionado? – stijn