【问题标题】:c++ set monitor timeout on Windowsc++ 在 Windows 上设置监视器超时
【发布时间】:2012-08-20 11:02:42
【问题描述】:

我想知道是否有办法在全球范围内从 C++ 程序启用或禁用监视器/屏幕超时? (不过我有一个问题,它必须向后兼容 Windows XP SP3。)

我说的是这个全局设置:

这一款适用于 XP:

【问题讨论】:

  • 如果您想以编程方式更改该设置...您真的不应该这样做。这对用户非常不友好。如果您只想在程序运行时停止显示器休眠,这里有一个类似的问题:stackoverflow.com/questions/463813/….
  • 是的,我听说了,不幸的是,大多数像 SetThreadExecutionState 这样的 API 都非常挑剔。根据我的经验,指定 ES_DISPLAY_REQUIRED 绝对没有效果。
  • 我想我明白了:CallNtPowerInformation(SystemPowerPolicyAc),并使用 SYSTEM_POWER_POLICY::VideoTimeout
  • 那么您应该将其发布为答案并接受它,否则该问题似乎没有答案,并且不会使将来有相同问题的人受益。

标签: c++ winapi screen power-management


【解决方案1】:

完整示例:

bool applyVideoTimeout(DWORD newtimeOut)
{
    SYSTEM_POWER_POLICY powerPolicy;
    DWORD ret;
    DWORD size = sizeof(SYSTEM_POWER_POLICY);

    ret = CallNtPowerInformation(SystemPowerPolicyAc, nullptr, 0, &powerPolicy, size);

    if ((ret != ERROR_SUCCESS) || (size != sizeof(SYSTEM_POWER_POLICY)))
    {
        return false;
    }

    powerPolicy.VideoTimeout = newtimeOut
    ret = CallNtPowerInformation(SystemPowerPolicyAc, &powerPolicy, size, nullptr, 0);

    if ((ret != ERROR_SUCCESS))
    {
        return false;
    }

    return true;
}

【讨论】:

    【解决方案2】:

    对于那些感兴趣的人,这里是解决此问题的方法:

    调用 CallNtPowerInformation(SystemPowerPolicyAc) API 获取或设置显示超时值,并使用 SYSTEM_POWER_POLICY::VideoTimeout 成员。

    【讨论】:

      猜你喜欢
      • 2011-12-04
      • 1970-01-01
      • 2019-10-14
      • 1970-01-01
      • 2012-10-07
      • 2015-11-09
      • 2016-07-15
      • 2022-06-10
      • 1970-01-01
      相关资源
      最近更新 更多