2012-04-27 77 views
1

我有一個正在運行的應用程序,並且用戶已經給出了關閉系統的命令,但是我想推遲關閉,直到我的應用程序正在運行。完成應用程序的工作後,系統應該關閉。如何通過控制檯應用程序在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

回答

0

當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

2

這取決於你在談論的Windows版本。在Windows XP中,有類似WM_QUERYENDSESSION的消息可以響應以阻止關閉。 (由於您是一個控制檯應用程序,您可能需要在控制檯應用程序仍在運行時產生一個小窗口應用程序來執行此操作。)

但Vista讓應用程序難以阻止關機。 (微軟聲稱根本無法做到這一點,但我確實已經看到Visual Studio 2010能夠做到這一點)。您可以將關機延遲約五秒鐘(但請記住,可能有許多其他應用程序試圖做一堆在相同的五秒鐘內)。此時,用戶將獲得一個UI,顯示所有未正確關閉的應用程序。使用Vista +,您可以撥打ShutdownBlockReasonCreate讓用戶知道爲什麼打斷您的應用程序是一個壞主意,但這並不會阻止用戶這樣做。

下面是MSDN入門點,瞭解如何應對shutdown

相關問題