如何通过控制台应用程序在Windows中延迟系统关机?

问题描述:

我有一个正在运行的应用程序,并且用户已经给出了关闭系统的命令,但是我想推迟关闭,直到我的应用程序正在运行。完成应用程序的工作后,系统应该关闭。如何通过控制台应用程序在Windows中延迟系统关机?

+0

所以你想在不修改应用程序代码的情况下完成这项工作? – mihai 2012-04-27 11:37:34

+1

使用SetConsoleCtrlHandler在关机时获取回调。延迟关机的选项非常有限,您必须快速。 – 2012-04-27 12:48:01

+0

不,我想只在我的应用程序中添加此代码,,,, – shilpisingh 2012-04-30 05:42:59

当Windows正在关闭时发送WM_QUERYENDSESSION和应用程序sendback TRUE或FALSE取决于当前状态。 关于这个消息,我发现它: http://msdn.microsoft.com/en-us/library/ms700677(v=vs.85).aspx

也许它可以帮助你

+0

这对于Windows应用程序很有用,但不适用于控制台应用程序。 – 2012-04-27 16:27:20

+1

没有什么能够阻止控制台应用程序为此目的在另一个线程上创建隐藏窗口。 – ChrisV 2012-04-27 17:15:19

这取决于你在谈论的Windows版本。在Windows XP中,有类似WM_QUERYENDSESSION的消息可以响应以阻止关闭。 (由于您是一个控制台应用程序,您可能需要在控制台应用程序仍在运行时产生一个小窗口应用程序来执行此操作。)

但Vista让应用程序难以阻止关机。 (微软声称根本无法做到这一点,但我确实已经看到Visual Studio 2010能够做到这一点)。您可以将关机延迟约五秒钟(但请记住,可能有许多其他应用程序试图做一堆在相同的五秒钟内)。此时,用户将获得一个UI,显示所有未正确关闭的应用程序。使用Vista +,您可以拨打ShutdownBlockReasonCreate让用户知道为什么打断您的应用程序是一个坏主意,但这并不会阻止用户这样做。

下面是MSDN入门点,了解如何应对shutdown