Respuestas:
Puede hacer esto con algún código entregando el evento SystemEvents.SessionEnding . Esto mostrará un cuadro de diálogo cuando intente cerrar la sesión o cerrar y preguntar si desea cancelar el cierre de sesión o el cierre.
El código se puede compilar de forma gratuita con Visual C # 2008 Express Edition o con el SDK de Windows .
Con el SDK, use el siguiente comando:
csc.exe /out:StopShutdown.exe /target:winexe StopShutdown.cs
Aquí está el código:
using System;
using System.Windows.Forms;
using Microsoft.Win32;
namespace StopShutdown
{
static class Program
{
[STAThread]
static void Main()
{
string desktopRegKey = @"HKEY_CURRENT_USER\Control Panel\Desktop";
Registry.SetValue(desktopRegKey, "AutoEndTasks", 0);
Registry.SetValue(desktopRegKey, "WaitToKillAppTimeout", 20000);
Registry.SetValue(desktopRegKey, "HungAppTimeout", 20000);
Form AppForm = new Form()
{
ClientSize = new System.Drawing.Size(0, 0),
ControlBox = false,
FormBorderStyle = FormBorderStyle.None,
Opacity = 0,
ShowIcon = false,
ShowInTaskbar = false,
SizeGripStyle = SizeGripStyle.Hide,
};
SystemEvents.SessionEnding += (_e, e) =>
{
DialogResult dr = MessageBox.Show(
"Cancel shutdown?"
, "Shutdown",
MessageBoxButtons.YesNo,
MessageBoxIcon.Question,
MessageBoxDefaultButton.Button1);
e.Cancel = (dr == DialogResult.Yes);
};
Application.Run(AppForm);
}
}
}
Editar:
Si está dispuesto a hacer una pequeña edición del registro ... Inicio -> Ejecutar -> regedit
HKEY_CURRENT_USER \ Panel de control \ Escritorio
Asegúrese de que AutoEndTasks sea 0 y configure WaitToKillAppTimeout en 20000 (el valor predeterminado de 2 segundos). Puede establecer el valor más alto si lo desea. También hay HungAppTimeout (la defalt es 5000), pero eso se aplica más a las aplicaciones que no responden.
Cada vez que hago un apagado en XP, si un programa está ocupado, me da una barra de progreso y una opción para 'Finalizar ahora' o 'Cancelar'.
Al hacer clic en 'Cancelar' se detiene el proceso de apagado. Sin embargo, lo que sea que ya se haya apagado no vuelve a aparecer.
Pero sí me da tiempo para guardar lo que estaba trabajando antes de volver a intentar el cierre.