Wyłącz automatyczne zamykanie aplikacji podczas zamykania


8

Czy istnieje jakaś alternatywa dla systemu Windows XP dla procesu zamykania systemu Windows Vista, która podpowiada użytkownikowi, czy kontynuować, czy anulować zamknięcie w przypadku, gdy niektóre programy zawierają niezapisane dane?

Odpowiedzi:


10

Możesz to zrobić za pomocą kodu, przekazując zdarzenie SystemEvents.SessionEnding . Wyświetli się okno dialogowe, gdy spróbujesz się wylogować lub zamknąć i zapytać, czy chcesz anulować wylogowanie lub zamknięcie.

Kod można skompilować za darmo za pomocą Visual C # 2008 Express Edition lub Windows SDK .

Za pomocą sdk użyj następującego polecenia:

csc.exe   /out:StopShutdown.exe /target:winexe StopShutdown.cs 

Oto kod:

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);
        }

    }
}

Edytować:

Źródło do pobrania i exe .


Czy byłbyś miłą osobą i gdzieś przesłać „StopShutdown.exe” lub wysłać mi e-mailem? (Zrozumiałbym, gdybyś powiedział nie)
Lawand


Dobra robota, bardzo się zbliżyłeś: pozostawiłem otwarty niezapisany plik, następnie wywołałem zamknięcie z menu Start, następnie zapytałem mnie, czy chcę anulować zamknięcie, ale kiedy zaczekałem kilka sekund, Windows zakończył twój program i wykonał proces zamykania ...
Lawand

Tak, jeśli chcesz, aby XP czekał dłużej, musisz zmodyfikować wartości rejestru wymienione w innym poście. Zaktualizuję kod ...
Scott Weinstein,

Właściwie chcę, aby XP zatrzymał proces zamykania na stałe (tak jak Vista). W każdym razie twoja odpowiedź jest jak dotąd najbliższa ...
Lawand

2

Jeśli chcesz przeprowadzić niewielką edycję rejestru ... Start -> Uruchom -> regedit

HKEY_CURRENT_USER \ Control Panel \ Desktop

Upewnij się, że AutoEndTasks ma wartość 0, i ustaw opcję WaitToKillAppTimeout na 20000 (wartość domyślna 2 sekundy). Jeśli chcesz, możesz ustawić wyższą wartość. Istnieje również HungAppTimeout (defalt to 5000), ale dotyczy to w większym stopniu aplikacji, które nie odpowiadają.


Daje to więcej czasu na prawidłowe zamknięcie aplikacji, ale nie zatrzymuje na stałe procesu zamykania ...
Lawand

0

Za każdym razem, gdy zamykam XP, program jest zajęty, daje mi pasek postępu i opcję „Zakończ teraz” lub „Anuluj”.

Kliknięcie „Anuluj” zatrzymuje proces zamykania. Jednak to, co już zostało zamknięte, nie wraca.

Daje mi to jednak czas na zaoszczędzenie tego, nad czym pracowałem przed ponowną próbą zamknięcia.


Ale jeśli program odpowiada (nie jest zajęty), zostanie zmuszony do zamknięcia, nawet jeśli zawiera niezapisane dane
Lawand

to nie to, o co prosiłeś - jeśli nie odpowiada, nie ma znaczenia, czy próbujesz się zamknąć, czy nie, stracisz niezapisane dane
warren

Niestety, nie powinien powiedzieć „zajęty programy”, miałem na myśli programy, które zawierają niezapisane dane i które nie są zajęte ...
Lawand

1
och, więc moja odpowiedź wciąż jest ważna - przynajmniej w przypadku zwykłych instalacji XP: za każdym razem, gdy robiłem zamknięcie, ale miałem na przykład niezapisany dokument w programie Word, miałem okazję anulować zamknięcie, zapisać mój dokument (s), a następnie ponownie uruchom proces zamykania
warren

Kilka dni temu zainstalowałem XP SP3 i teraz system robi to, co mówisz, podczas gdy z SP2 tak nie było ...
Lawand
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.