Отключить автоматическое завершение работы приложений при завершении работы

есть ли альтернатива Windows XP процессу завершения работы Windows Vista, которая предлагает пользователю продолжить или отменить завершение работы в случае, если некоторые программы содержат несохраненные данные?

28
задан Lawand
15.03.2023 2:22 Количество просмотров материала 2765
Распечатать страницу

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:

загружаемый источник и exe.

10
отвечен Scott Weinstein 2023-03-16 10:10

Если вы готовы сделать небольшое редактирование реестра... Пуск -> Выполнить -> regedit

HKEY_CURRENT_USER\Control Panel\Desktop

убедитесь, что значение AutoEndTasks равно 0, и установите WaitToKillAppTimeout равным 20000 (значение по умолчанию-2 секунды). Вы можете установить значение выше, если хотите. Существует также HungAppTimeout (дефальт 5000), но это применяется больше для приложений, которые не отвечают.

2
отвечен Breakthrough 2023-03-16 12:27

всякий раз, когда я делаю выключение на XP, если программа занята, это дает мне индикатор выполнения и возможность "завершить сейчас" или "отмена".

нажатие кнопки "Отмена" останавливает процесс выключения. Тем не менее, что она уже shutdown не вернуться.

но это дает мне время, чтобы сохранить то, что я работал над перед повторной попыткой выключения.

0
отвечен warren 2023-03-16 14:44

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх