禁用关机时自动终止应用程序

禁用关机时自动终止应用程序

Windows XP 是否有任何可替代 Windows Vista 关机过程的程序,当某些程序包含未保存的数据时,它会提示用户是否继续或取消关机?

答案1

你可以通过以下代码来实现这一点:系统事件.会话结束事件。当您尝试注销或关机时,将显示一个对话框并询问您是否要取消注销或关机。

代码可以免费使用以下任一方式编译:Visual C# 2008 快速版或使用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

答案2

如果您愿意做一些注册表编辑...开始 -> 运行 -> regedit

HKEY_CURRENT_USER\控制面板\桌面

确保 AutoEndTasks 为 0,并将 WaitToKillAppTimeout 设置为 20000(默认值为 2 秒)。您可以根据需要将值设置得更高。还有 HungAppTimeout(默认值为 5000),但这更适用于没有响应的应用程序。

答案3

每当我在 XP 上关机时,如果某个程序很忙,它就会给我一个进度条和一个“立即结束”或“取消”的选项。

单击“取消”可停止关机过程。但是,已关闭的任何程序都不会重新启动。

但它确实给了我时间在重新尝试关机之前保存我正在处理的工作。

相关内容