使用Python 3阻止Windows 10关闭

时间:2019-02-22 16:04:08

标签: python windows

有什么方法可以防止Windows使用Python关闭我的系统。所以我无法在运行Python脚本时关闭系统?

1 个答案:

答案 0 :(得分:0)

是的。

从Windows文档

  

关闭通知

     

带有窗口和消息队列的应用程序   通过WM_QUERYENDSESSION接收关闭通知,并   WM_ENDSESSION消息。这些应用程序应将TRUE返回   表示可以终止。应用程序不应阻止   除非绝对必要,否则请关闭系统。申请应   在处理WM_ENDSESSION时执行所有必需的清除操作。   具有未保存数据的应用程序可以将数据保存到临时文件   位置,并在下次应用程序启动时将其还原。它是   建议应用程序经常保存其数据和状态;   例如,在启动保存操作之间自动保存数据   由用户减少关机时要保存的数据量。   控制台应用程序在其处理程序中收到关闭通知   例行程序。要注册控制台处理程序,请使用SetConsoleCtrlHandler   功能。服务应用程序在其接收到关闭通知   处理程序例程。要注册服务控制处理程序,请使用   RegisterServiceCtrlHandlerEx函数。

     

阻止关闭

     

如果应用程序必须阻止潜在的系统关闭,则可以调用   ShutdownBlockReasonCreate函数。来电者提供原因   将显示给用户的字符串。原因字符串应为   简短明了,为用户提供必要的信息   决定是否继续关闭系统。

所以您必须拦截WM_QUERYENDSESSION消息并返回False。

进行一些网络搜索后,我发现了关于如何在python中拦截WM_QUERYENDSESSION的讨论:

  

如果您构建了带有消息循环的应用程序,则可以收到   WM_QUERYENDSESSION消息。如果要使用GUI,大多数GUI   图书馆可能会用自己的方式来包装它。如果你不这样做   需要一个GUI,最简单的解决方案可能是使用PyWin32。   在文档的某个地方,有一个有关创建隐藏窗口的教程   并编写一个简单的消息循环。只需在主线程上执行此操作,   并在后台线程上进行实际工作,并向您发出信号   WM_QUERYENDSESSION消息进入时后台线程。

     

或者,更简单地说,只需使用SetConsoleCtrlHandler(再次   PyWin32)。这也可以捕获^ C,^ BREAK,并且用户关闭您的   控制台,以及注销和关闭消息   WM_QUERYENDSESSION捕获。更重要的是,它不需要   消息循环,所以如果您不需要其他任何消息,那么很多   更简单。

我无法使用代码段,因为我无法访问Windows pc,并且我也不想在未经测试的情况下共享代码,但是我希望我指出了您应该寻找的内容。