【问题标题】:How to prevent windows from going to sleep when my c++ application is running? [duplicate]当我的 C++ 应用程序运行时,如何防止 Windows 进入睡眠状态? [复制]
【发布时间】:2016-04-22 13:01:18
【问题描述】:

我使用 Qt 和 Visual Studio 2015 用 C++ 开发了一个应用程序。

我想知道如何在我的应用程序运行时防止应用程序表单进入休眠状态。我的应用程序应该始终在后台运行并响应用户的语音命令。

当我的应用程序运行时,是否有任何方法可以防止 Windows 进入睡眠状态?

【问题讨论】:

  • 我在问这个问题之前看到了这个。我没有找到我想要的。
  • 它在哪些方面没有回答您的问题?
  • 我不知道在我的代码中调用函数SetThreadExecutionState 的位置。在 main() 函数的开头还是在无限处理循环中?
  • @ProEns08:在主函数中(使其在整个应用程序中持续存在),或者在您想要开始阻止睡眠时的消息句柄中。
  • @ProEns08:忽略我。请参阅下面的 Alex Halls 评论。

标签: c++ windows visual-studio qt


【解决方案1】:

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);

【讨论】:

  • 我不知道在我的代码、main() 还是无限处理循环中调用这个函数?
  • 程序中任何会重复调用函数的地方,间隔比窗口进入睡眠的间隔更短,应该可以工作。你也可以有一个被调用一次的函数,它是一个无限循环,它调用 SetThreadExecutionState,然后等待 45 秒,重新开始循环(并再次调用 SetThread~ 函数),直到应用程序退出。
  • @AlexHall:谢谢你的信息,这就是我想要的。
  • @ddcot:谢谢你的信息,+1:
  • @ProEns08 我添加了一个例子,看看吧。
【解决方案2】:

Martin Bonner 和 ddacot 推荐的 API SetThreadExecutionState 的文档解释得很清楚。

根据你的描述,你应该把下面的函数放在main()中。

SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_AWAYMODE_REQUIRED);

根据文件,

  • ES_CONTINUOUS 通知系统正在设置的状态应保持有效,直到下一次使用 ES_CONTINUOUS 的调用和其他状态标志之一被清除。

  • ES_SYSTEM_REQUIRED 通过重置系统空闲计时器强制系统处于工作状态。

  • ES_AWAYMODE_REQUIRED 强制媒体应用程序在后台运行,以便您可以通过语音呼叫您的应用程序。

【讨论】:

    猜你喜欢
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-14
    • 2016-03-14
    • 2011-05-04
    • 1970-01-01
    相关资源
    最近更新 更多