c++;在Windows上设置监视器超时 我想知道,是否有办法在全球范围内启用或禁用C++程序中的监视器/屏幕超时?(不过我有一个缺点,它必须与Windows XP SP3向后兼容。)
我说的是全球环境: 这是XP的一个示例: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
对于感兴趣的人,以下是解决方法: 调用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。然后你应该将其作为答案发布并接受,否则问题看起来没有答案,将来也不会有同样问题的人受益。