Windows 系统下,软件在运行时通知阻止关机
官方相关文档:https://learn.microsoft.com/zh-cn/windows/win32/shutdown/shutdown-changes-for-windows-vista
https://learn.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-shutdownblockreasoncreate
首先引入 Vanara.User32 的 Nuget 包,提供 Windows API 调用(也可自行根据方法签名进行声明调用)
以 WPF 程序为例,首先在程序运行时,需要将本程序在关机时关闭的优先级提到最高()
public MainWindow()
{
InitializeComponent();
// 首先设置为系统最优先关闭的程序,第一时间拦截系统会话结束事件(注销&关机)
// 避免在关机过程中,其它程序已关闭,就剩下自己这个程序未关闭,以此产生的依赖问题
Kernel32.SetProcessShutdownParameters(0x4FF, 0);
// 监听会话结束事件,进行阻止(注销&关机)
App.Current.SessionEnding += (s, e) =>
{
// 中止程序关闭
e.Cancel = true;
// 阻止关机并说明原因(用户仍可通过“仍要关闭”继续)
User32.ShutdownBlockReasonCreate(new WindowInteropHelper(this).Handle, "你还有事情没完成,不要关机啊~~~");
// 尝试取消关机,但貌似没什么用
Process.Start("shutdown", "/a");
};
}
Vanara 参考:https://github.com/dahall/Vanara
输了你,赢了世界又如何...