Risposte:
Puoi farlo con un po 'di codice consegnando il SystemEvents.SessionEnding evento. Questo mostrerà una finestra di dialogo quando si tenta di disconnettersi o spegnersi e chiedere se si desidera annullare la disconnessione o l'arresto.
Il codice può essere compilato gratuitamente con il Visual C # 2008 Express Edition o con il Windows SDK .
Con sdk, utilizzare il seguente comando:
csc.exe /out:StopShutdown.exe /target:winexe StopShutdown.cs
Ecco il codice:
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);
}
}
}
Modificare:
Se sei disposto a fare un po 'di modifica del registro ... Inizia - & gt; Esegui - & gt; regedit
HKEY_CURRENT_USER \ Pannello di controllo \ Desktop
Assicurati che AutoEndTasks sia 0 e imposta WaitToKillAppTimeout su 20000 (il valore predefinito di 2 secondi). È possibile impostare il valore più alto se lo si desidera. C'è anche HungAppTimeout (il defalt è 5000), ma questo vale più per le applicazioni che non rispondono.
Ogni volta che faccio un arresto su XP, se un programma è occupato, mi dà una barra di avanzamento e un'opzione per 'Fine ora' o 'Annulla'.
Facendo clic su "Annulla" si arresta il processo di spegnimento. Tuttavia, qualsiasi cosa abbia già chiuso non ritorna.
Ma mi dà il tempo di salvare ciò a cui stavo lavorando prima di riprovare l'arresto.