Вимкнути автоматичне припинення програм при відключенні


8

Чи існує альтернатива Windows XP для відключення Windows Vista, яка підкаже користувачеві продовжувати або скасовувати відключення у випадку, якщо деякі програми містять незбережені дані?

Відповіді:


10

Ви можете зробити це за допомогою деякого коду, передавши подію 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);
        }

    }
}

Редагувати:

Завантажувані джерела та EXE .


ти будеш приємною людиною і завантажиш кудись "StopShutdown.exe" або надішлеш мені електронну пошту? (Я зрозумів би, якщо ви сказали «ні»)
Лаванд,


Хороша робота, ви насправді закрили: я залишив збережений файл відкритим, тоді я посилався на закриття з меню "Пуск", наступне підказка запитало мене, чи хочу я скасувати відключення, але коли я зачекав пару секунд, Windows припинила вашу програму і виконала процес відключення ...
Лаванд,

Так, якщо ви хочете, щоб XP зачекав довше, вам потрібно буде змінити значення реєстру, згадані в іншій публікації. Я оновлю код ...
Скотт Вайнштейн,

Насправді я хочу, щоб XP постійно зупиняв процес відключення (як це робить Vista). У будь-якому випадку ваша відповідь найближча до цих пір ...
Лаванд,

2

Якщо ви готові зробити невелике редагування реєстру ... Пуск -> Виконати -> regedit

HKEY_CURRENT_USER \ Панель управління \ Робочий стіл

Переконайтесь, що AutoEndTasks дорівнює 0, і встановіть для WaitToKillAppTimeout значення 20000 (значення за замовчуванням 2 секунди). Ви можете встановити значення вище, якщо бажаєте. Існує також HungAppTimeout (дефальт - 5000), але це більше стосується програм, які не відповідають.


Це дає більше часу для належного закриття програм, але це не припиняє остаточно процес вимкнення ...
Lawand

0

Щоразу, коли я вимикаю XP, якщо програма зайнята, це дає мені смугу прогресу та опцію "Закінчити зараз" або "Скасувати".

Клацання "Скасувати" зупиняє процес вимкнення. Однак те, що вже було відключене, не повертається.

Але це дає мені час зберегти те, над чим я працював, перш ніж спробувати відключити роботу.


Але якщо програма реагує (не зайнята), вона буде змушена закрити, навіть якщо вона містить збережені дані
Lawand

це не те, про що ви запитували - якщо він не відповідає, не має значення, намагаєтесь ви відключити чи ні, ви втратите не збережені дані
warren

Вибачте, я не повинен був говорити "зайняті програми", я мав на увазі програми, які містять збережені дані та не зайняті ...
Lawand

1
о, тоді моя відповідь все ще стоїть - принаймні, на звичайних ванільних установках XP: будь-коли я робив вимкнення, але мав, наприклад, незбережений документ у Word, я мав можливість скасувати відключення, зберегти мій документ (ів), а потім перезапустіть процес вимкнення
warren

Пару днів тому я встановив XP SP3, і тепер система робить те, що ти кажеш, тоді як з SP2 цього не сталося ...
Lawand
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.