Відповіді:
Ви можете зробити це за допомогою деякого коду, передавши подію SystemEvents.SessionEnding . Це покаже діалогове вікно, коли ви намагаєтеся вийти з системи або вимкнути його, і запитаєте, чи хочете ви скасувати вихід із системи або закриття.
Код можна скласти безкоштовно або з Visual C # 2008 Express Edition, або з Windows SDK .
За допомогою sdk використовуйте таку команду:
csc.exe /out:StopShutdown.exe /target:winexe StopShutdown.cs
Ось код:
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);
}
}
}
Редагувати:
Якщо ви готові зробити невелике редагування реєстру ... Пуск -> Виконати -> regedit
HKEY_CURRENT_USER \ Панель управління \ Робочий стіл
Переконайтесь, що AutoEndTasks дорівнює 0, і встановіть для WaitToKillAppTimeout значення 20000 (значення за замовчуванням 2 секунди). Ви можете встановити значення вище, якщо бажаєте. Існує також HungAppTimeout (дефальт - 5000), але це більше стосується програм, які не відповідають.
Щоразу, коли я вимикаю XP, якщо програма зайнята, це дає мені смугу прогресу та опцію "Закінчити зараз" або "Скасувати".
Клацання "Скасувати" зупиняє процес вимкнення. Однак те, що вже було відключене, не повертається.
Але це дає мені час зберегти те, над чим я працював, перш ніж спробувати відключити роботу.