Vô hiệu hóa tự động chấm dứt các ứng dụng khi tắt máy


8

Có bất kỳ Windows XP nào thay thế cho quá trình tắt máy của Windows Vista nhắc người dùng có nên tiếp tục hoặc hủy tắt máy trong trường hợp một số chương trình có chứa dữ liệu chưa được lưu không?

Câu trả lời:


10

Bạn có thể làm điều này với một số mã bằng cách trao sự kiện SystemEvents.SessionEinating . Điều này sẽ hiển thị một hộp thoại khi bạn cố gắng đăng xuất hoặc tắt máy và hỏi xem bạn có muốn hủy đăng xuất hoặc tắt máy không.

Mã này có thể được biên dịch miễn phí với Visual C # 2008 Express Edition hoặc với SDK Windows .

Với sdk, sử dụng lệnh sau:

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

Đây là mã:

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

    }
}

Biên tập:

Tải về nguồn và exe .


bạn sẽ là một người tốt và tải lên "StopShutdown.exe" ở đâu đó hoặc gửi email cho tôi chứ? (Tôi sẽ hiểu nếu bạn nói không)
Lawand


Làm tốt lắm, bạn đã thực sự gần gũi: Tôi đã mở một tệp chưa được lưu sau đó tôi gọi tắt máy từ menu bắt đầu, tiếp theo một câu hỏi hỏi tôi có muốn hủy tắt máy không nhưng khi tôi đợi vài giây, Windows đã chấm dứt chương trình của bạn và tiến hành quá trình tắt máy ...
Lawand

Có, nếu bạn muốn XP chờ lâu hơn, bạn sẽ cần sửa đổi các giá trị đăng ký được đề cập trong bài đăng khác. Tôi sẽ cập nhật mã ...
Scott Weinstein

Trên thực tế tôi muốn XP tạm dừng quá trình tắt máy vĩnh viễn (giống như Vista). Dù sao câu trả lời của bạn là gần nhất cho đến nay ...
Lawand

2

Nếu bạn sẵn sàng thực hiện một chút chỉnh sửa sổ đăng ký ... Bắt đầu -> Chạy -> regedit

HKEY_CURRENT_USER \ Bảng điều khiển \ Máy tính để bàn

Đảm bảo AutoEndT task là 0 và đặt WaitToKillAppTimeout thành 20000 (giá trị mặc định là 2 giây). Bạn có thể đặt giá trị cao hơn nếu bạn muốn. Ngoài ra còn có HungAppTimeout (mức hoãn là 5000), nhưng áp dụng nhiều hơn cho các ứng dụng không đáp ứng.


Điều này mang lại nhiều thời gian hơn cho các ứng dụng được đóng đúng cách, nhưng nó không dừng quá trình tắt máy vĩnh viễn ...
Lawand

0

Bất cứ khi nào tôi thực hiện tắt máy trên XP, nếu chương trình bận rộn, nó sẽ cung cấp cho tôi thanh tiến trình và tùy chọn 'Kết thúc ngay bây giờ' hoặc 'Hủy'.

Nhấp vào 'Hủy' sẽ dừng quá trình tắt máy. Tuy nhiên, bất cứ điều gì nó đã tắt máy không quay trở lại.

Nhưng nó cho tôi thời gian để lưu lại những gì tôi đang làm trước khi thử lại việc tắt máy.


Nhưng nếu một chương trình đang phản hồi (không bận), nó sẽ buộc phải đóng ngay cả khi nó chứa dữ liệu chưa được lưu
Lawand

đó không phải là những gì bạn đã hỏi - nếu nó không trả lời, không quan trọng bạn có cố tắt máy hay không, bạn sẽ mất dữ liệu chưa được lưu
warren

Xin lỗi, tôi không nên nói "các chương trình bận rộn", ý tôi là các chương trình chứa dữ liệu chưa được lưu và không bận ...
Lawand

1
ồ, vậy thì câu trả lời của tôi vẫn đứng vững - ít nhất là trên các bản cài đặt XP-vanilla đơn giản: bất cứ khi nào tôi thực hiện tắt máy, nhưng, ví dụ, một tài liệu chưa được lưu trong Word, tôi có cơ hội hủy bỏ việc tắt máy, lưu tài liệu của tôi (s), và sau đó khởi động lại quá trình tắt máy
warren

Vài ngày trước tôi đã cài đặt XP SP3 và bây giờ hệ thống thực hiện những gì bạn nói, trong khi với SP2 thì không ...
Lawand
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.