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?

Lawand
źródło

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 .

Scott Weinstein
źródło
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ą.

Przełom
źródło
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.

królikarnia
źródło
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