2016-01-17 86 views
6

我使用Qt和Visual Studio 2015在C++中開發應用程序。如何防止Windows在我的C++應用程序運行時進入睡眠狀態?

我想知道如何防止應用程序在我的應用程序運行時進入睡眠狀態。我的應用程序應該始終在後臺運行,並響應用戶的聲音指示。

當我的應用程序運行時,有沒有什麼可以防止Windows進入睡眠狀態?

+1

我在問這個問題之前看到了這個。我沒有找到我想要的東西。 – ProEns08

+1

它以什麼方式回答你的問題? –

+0

我不知道在哪裏把代碼中的函數'SetThreadExecutionState'調用。在main()函數的開頭還是在無限處理循環中? – ProEns08

回答

6

SetThreadExecutionState功能

允許應用程序通知系統,它是在使用中,從而防止系統進入睡眠或應用程序正在運行時,關閉顯示器。

瞭解更多關於這裏的API:SetThreadExecutionState

例子:

// The following sets the appropriate flags to prevent system to go into sleep mode. 
SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_AWAYMODE_REQUIRED); 

// This clears the flags and allows the system to sleep normally. 
SetThreadExecutionState(ES_CONTINUOUS); 
+0

我不知道在我的代碼中,在main()還是在無限處理循環中,將此函數的調用放在哪裏? – ProEns08

+1

程序中的任何地方都可以重複調用該函數,間隔時間應小於窗口進入睡眠的時間間隔。 你也可以有一個被調用一次的函數,它是一個調用SetThreadExecutionState的無限循環,然後等待45秒,啓動循環(並再次調用SetThread_函數),直到應用程序退出。 –

+0

@AlexHall:謝謝你的信息,這是我想要的。 – ProEns08

5

API SetThreadExecutionState由馬丁·邦納和ddacot推薦文檔說明它非常清楚。

根據你的描述,你應該把下面的函數放在main()中。

SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_AWAYMODE_REQUIRED); 

根據該文件,

  • ES_CONTINUOUS通知的狀態設置應繼續有效,直到使用ES_CONTINUOUS和其他國家標誌之一被清除下一個呼叫系統。

  • ES_SYSTEM_REQUIRED通過重置系統空閒計時器強制系統處於工作狀態。

  • ES_AWAYMODE_REQUIRED強制媒體應用程序在後臺運行,以便您可以通過語音呼叫應用程序。

相關問題