C# 阻止电脑关机
来源:互联网 发布:仙剑奇侠传3mac修改器 编辑:程序博客网 时间:2024/04/29 11:34
根据MSDN的描述,采用如下的代码来实现阻止关机,结果发现在有的机器上能够阻止关机,在有的机器上却不能阻止(虽然能看到弹出的MessageBox,但还来不及反应,马上就关机了)。(都是WinXP SP2的机器)
- LRESULT CPreventShutdownDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
- {
- if (WM_QUERYENDSESSION == message)
- {
- AfxMessageBox(_T("呵呵,不许关机!"));
- return FALSE; // 根据MSDN,WM_QUERYENDSESSION 返回FALSE则取消关机
- }
- return CDialog::WindowProc(message, wParam, lParam);
- }
wpf实现:
app.xaml中
<Application x:Class="_7次方软件盒子.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" StartupUri="MainWindow.xaml" SessionEnding="Application_SessionEnding"> <Application.Resources>
app.xaml.cs中
public partial class App : Application { private void Application_SessionEnding(object sender, SessionEndingCancelEventArgs e) { //Ask the user if they want to allow the session to end string msg = string.Format("{0}. End session?", e.ReasonSessionEnding); MessageBoxResult result = MessageBox.Show(msg, "Session Ending", MessageBoxButton.YesNo); //End session, if specified if (result == MessageBoxResult.No) { e.Cancel = true; } } }
是什么原因在某些机器上无法阻止关机呢?
回忆关机时经常遇到的场景:
1. 如果某个进程失去响应,关机的时候会提示"...没有响应,是否结束"
2. 使用记事本修改了文档,在没有保存的情况下进行关机,普通情况会提示是否进行保存。
1这种情况不好模拟,但是2是很好模拟的。于是在不能阻止关机的机器上这样进行测试,发现虽然也弹出了是否保存的对话框,但是还是马上就关机了。
果然,和程序无关,应该是机器设置的问题。于是想到了一个很流行的词:"快速关机"
到网上google了一下,发现快速关机是通过如下的方式实现的:
HKEY-CURRENT-USER/Control Panel/Desktop/AutoEndTasks 值为1表示快速关机 ,普通情况值为0或这个键值不存在
在HKEY_USERS这里面还有几处都有这个值,经过我的测试需要把这里面所有的AutoEndTasks 删掉才可以阻止关机的:
.DEFAULT
S-1-5-18
S-1-5-19
到不能阻止快速关机的机器上一看,果然这个键值为1.
改为0后再运行程序,就都能阻止关机了。
【结论】阻止关机需要两步才能完美的实现,而不仅仅是MSDN中描述的2)
1) 在程序中先删除这个键值(HKEY-CURRENT-USER/Control Panel/Desktop/AutoEndTasks)
2) 处理 WM_QUERYENDSESSION 时返回FALSE
ps. Vista又有一些变化 Shutdown Changes for Windows Vista
- C# 阻止电脑关机
- C#操作电脑定时关机
- 阻止关机
- C#电脑重启,关机,注销
- C#执行cmd命令实现电脑关机
- 如何阻止windows关机?
- 阻止windows关机
- 让电脑重启,关机和注销的c#源程序
- 获得关机消息;阻止Windows关机
- MFC: 获得关机消息;阻止Windows关机
- 阻止关机的完美实现
- 阻止关机的完美实现
- 桌面程序阻止Windows关机
- vc 阻止电脑休眠
- C#关机
- c#关机
- 电脑不能正常关机
- 电脑不能正常关机
- coding--SSL理解总结
- 内存数据库VoltDB, B轮融资8百万美元,总计近2千万美元
- 如何辨别电源?从整体到部分,图文并貌,详细易懂。
- UNIX---常用命令(软件安装、内核参数、进程分析)
- 网络--抓包工具
- C# 阻止电脑关机
- Java Checked 和 UnChecked Exception 的区别
- Allocation设置大小对磁盘读取速度的影响
- C++笔记:面向对象编程基础
- Note pour C# in a nutshell Ch 7
- SQL 各种锁等待类型 wait type
- SQL 各种锁等待类型 wait type--sys.dm_os_wait_stats 表
- android 中动态创建控件
- JS 跳转页面 刷新页面大全