c++;在Windows上设置监视器超时 我想知道,是否有办法在全球范围内启用或禁用C++程序中的监视器/屏幕超时?(不过我有一个缺点,它必须与Windows XP SP3向后兼容。)

c++;在Windows上设置监视器超时 我想知道,是否有办法在全球范围内启用或禁用C++程序中的监视器/屏幕超时?(不过我有一个缺点,它必须与Windows XP SP3向后兼容。),c++,winapi,screen,power-management,C++,Winapi,Screen,Power Management,我说的是全球环境: 这是XP的一个示例: 对于感兴趣的人,以下是解决方法: 调用CallNtPowerInformation(SystemPowerPolicyAc)API获取或设置显示超时值,并使用SYSTEM\u POWER\u POLICY::VideoTimeout成员。完整示例: bool applyVideoTimeout(DWORD newtimeOut) { SYSTEM_POWER_POLICY powerPolicy; DWORD ret; DWOR

我说的是全球环境:

这是XP的一个示例:


对于感兴趣的人,以下是解决方法:

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

完整示例:

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

如果您想通过编程更改该设置。。。你真的不应该那样做。这对用户非常不友好。如果您只想在程序运行时阻止显示器休眠,这里有一个类似的问题:。是的,我听说过,不幸的是,大多数API(如SetThreadExecutionState)都非常挑剔。根据我的经验,指定ES_DISPLAY_REQUIRED绝对没有效果。我想我已经知道了:CallNtPowerInformation(SystemPowerPolicyAc),并使用SYSTEM_POWER_POLICY::VideoTimeout。然后你应该将其作为答案发布并接受,否则问题看起来没有答案,将来也不会有同样问题的人受益。