Réponses:
Vous pouvez le faire avec du code en distribuant l' événement SystemEvents.SessionEnding . Cela affichera une boîte de dialogue lorsque vous essayez de vous déconnecter ou de vous arrêter et vous demandera si vous souhaitez annuler la fermeture de session ou l'arrêt.
Le code peut être compilé gratuitement avec Visual C # 2008 Express Edition ou avec le SDK Windows .
Avec le sdk, utilisez la commande suivante:
csc.exe /out:StopShutdown.exe /target:winexe StopShutdown.cs
Voici le code:
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);
}
}
}
Éditer:
Si vous êtes prêt à faire une petite modification du registre ... Démarrer -> Exécuter -> regedit
HKEY_CURRENT_USER \ Control Panel \ Desktop
Assurez-vous que AutoEndTasks est 0 et définissez WaitToKillAppTimeout sur 20000 (la valeur par défaut de 2 secondes). Vous pouvez définir une valeur plus élevée si vous le souhaitez. Il existe également HungAppTimeout (la valeur par défaut est 5000), mais cela s'applique davantage aux applications qui ne répondent pas.
Chaque fois que je fais un arrêt sur XP, si un programme est occupé, il me donne une barre de progression et une option pour «Fin maintenant» ou «Annuler».
Cliquez sur «Annuler» pour arrêter le processus d'arrêt. Cependant, tout ce qu'il a déjà arrêté ne revient pas.
Mais cela me donne le temps de sauvegarder ce sur quoi je travaillais avant de réessayer l'arrêt.