есть ли альтернатива Windows XP процессу завершения работы Windows Vista, которая предлагает пользователю продолжить или отменить завершение работы в случае, если некоторые программы содержат несохраненные данные?
Отключить автоматическое завершение работы приложений при завершении работы
3 ответа
Вы можете сделать это с помощью некоторого кода, передав SystemEvents.SessionEnding событие. Это покажет диалоговое окно при попытке выхода из системы или завершения работы и спросит, хотите ли вы отменить выход из системы или завершение работы.
код может быть скомпилирован бесплатно с помощью Visual C# 2008 Express Edition или SDK для Windows.
С помощью 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);
}
}
}
Edit:
Если вы готовы сделать небольшое редактирование реестра... Пуск -> Выполнить -> regedit
HKEY_CURRENT_USER\Control Panel\Desktop
убедитесь, что значение AutoEndTasks равно 0, и установите WaitToKillAppTimeout равным 20000 (значение по умолчанию-2 секунды). Вы можете установить значение выше, если хотите. Существует также HungAppTimeout (дефальт 5000), но это применяется больше для приложений, которые не отвечают.
всякий раз, когда я делаю выключение на XP, если программа занята, это дает мне индикатор выполнения и возможность "завершить сейчас" или "отмена".
нажатие кнопки "Отмена" останавливает процесс выключения. Тем не менее, что она уже shutdown не вернуться.
но это дает мне время, чтобы сохранить то, что я работал над перед повторной попыткой выключения.
Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]