2016-01-17 50 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强制媒体应用程序在后台运行,以便您可以通过语音呼叫应用程序。

相关问题