阻止关机的完美实现

【写在开头】这是N久以前的笔记了,当时还没有写blog的习惯...今天在坛子上发现有人问这个问题,终于从某个旮旯中把它翻了出来。

 


 

根据MSDN的描述,采用如下的代码来实现阻止关机,结果发现在有的机器上能够阻止关机,在有的机器上却不能阻止(虽然能看到弹出的MessageBox,但还来不及反应,马上就关机了)。(都是WinXP SP2的机器)

 

是什么原因在某些机器上无法阻止关机呢?

回忆关机时经常遇到的场景:

1. 如果某个进程失去响应,关机的时候会提示"...没有响应,是否结束"

2. 使用记事本修改了文档,在没有保存的情况下进行关机,普通情况会提示是否进行保存。

 

1这种情况不好模拟,但是2是很好模拟的。于是在不能阻止关机的机器上这样进行测试,发现虽然也弹出了是否保存的对话框,但是还是马上就关机了。

 

果然,和程序无关,应该是机器设置的问题。于是想到了一个很流行的词:"快速关机"

 

到网上google了一下,发现快速关机是通过如下的方式实现的:

HKEY-CURRENT-USER/Control Panel/Desktop/AutoEndTasks  值为1表示快速关机

                                                                                        普通情况值为0或这个键值不存在

 

到不能阻止快速关机的机器上一看,果然这个键值为1.

改为0后再运行程序,就都能阻止关机了。

 

【结论】阻止关机需要两步才能完美的实现,而不仅仅是MSDN中描述的2)

            1) 在程序中先删除这个键值(HKEY-CURRENT-USER/Control Panel/Desktop/AutoEndTasks)

            2) 处理 WM_QUERYENDSESSION 时返回FALSE


 

ps. Vista又有一些变化 Shutdown Changes for Windows Vista

 

转载请保持文章的完整性并注明出处: http://blog.csdn.net/skyxie/archive/2009/06/09/4255767.aspx 谢谢!

 

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在 Python 中,可以使用 `subprocess` 模块调用 Windows 命令 `shutdown` 来实现阻止电脑关机的功能。具体步骤如下: 1. 导入 `subprocess` 模块: ```python import subprocess ``` 2. 使用 `subprocess.call()` 函数调用 Windows 命令 `shutdown /a`,这将取消计划中的关机操作: ```python subprocess.call(['shutdown', '/a']) ``` 3. 如果计划中没有关机操作,则以上命令将不起作用。为了防止程序报错,可以使用 `try-except` 语句来捕获异常: ```python try: subprocess.call(['shutdown', '/a']) except: pass ``` 将以上代码保存为 .py 文件并运行,即可在 Python 中实现阻止电脑关机的功能。需要注意的是,该程序需要使用管理员权限运行才能生效。 ### 回答2: 要想实现阻止电脑关机,可以使用Python编写一个程序来监测关机信号,并通过循环延迟来避免关机。下面是一个简单的示例代码: ```python import ctypes import time def block_shutdown(): # 获取用户32.dll模块 user32 = ctypes.WinDLL('user32') # 移除关机事件 user32.SetProcessShutdownParameters(0x3FF, 0) while True: # 每隔1秒打印一次阻止关机提示 print("正在阻止关机...") time.sleep(1) if __name__ == "__main__": block_shutdown() ``` 上述代码通过调用`SetProcessShutdownParameters`函数来移除关机事件,使电脑无法正常关机。然后通过使用循环和延迟来打印阻止关机的提示,以阻止电脑关机。当你想要关闭程序时,可以通过终止程序来恢复电脑的关机功能。请注意,这种阻止关机功能可能不被一些操作系统或安全软件所支持或允许使用,因此使用前请确保理解潜在的风险并获得适当的权限。 ### 回答3: Python实现阻止电脑关机可以使用内置的subprocess模块执行一条命令来取消关机。以下是一个简单的示例代码: ```python import subprocess def block_shutdown(): # 使用subprocess模块执行"shutdown /a"命令来取消关机 subprocess.call('shutdown /a', shell=True) # 调用block_shutdown函数来阻止电脑关机 block_shutdown() ``` 在上面的代码中,我们定义了一个名为block_shutdown的函数,它使用subprocess模块来执行"shutdown /a"命令。这条命令的作用是取消当前正在进行的关机操作。然后我们调用了block_shutdown函数,从而阻止了电脑的关机。 需要注意的是,该代码只能在Windows操作系统上使用,因为"shutdown /a"命令是针对Windows的。如果你在其他操作系统上使用Python,可以考虑使用相应操作系统的命令来取消关机

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值