Answers:
您可以通过处理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);
}
}
}
编辑:
每当我在XP上关闭计算机时,如果程序很忙,它都会显示进度条和“立即结束”或“取消”选项。
单击“取消”将停止关闭过程。但是,无论已关闭的设备都不会恢复。
但这确实让我有时间在重新尝试关闭之前保存正在处理的内容。