我想在 Windows 上创建一个简单的 C++ 应用程序来检查显示器关闭时间。
经过一些搜索,我发现这个函数使用 windows.h
int time;
bool check;
check = SystemParametersInfo(SPI_GETSCREENSAVETIMEOUT, 0, &time, 0);
if (check) {
cout << "The Screen Saver time is : " << time << endl;
}
else {
cout << "Sorry dude the windows api can't do it" << endl;
}
但是当我使用此代码时,时间始终为零,在我的窗口设置中,我将窗口设置为在 5 分钟后关闭显示
我自己尝试了一些解决方案,我将时间类型更改为 long long,我得到了一个非常大的垃圾数字,所以我错误地设置了屏幕关闭时间。
操作系统:Windows 10
编译器:Mingw32 和我用 MSVC 2015 测试
最佳答案
屏保超时和显示关机超时是两个不同的东西。
SPI_GETSCREENSAVETIMEOUT
返回屏幕保护程序超时 - Screen Saver 之后的时间被激活。如果从未配置屏幕保护程序,则值为 0。
显示关机超时 是屏幕电源被切断之前的时间,并且是电源配置文件的一部分(并且可以不同,例如电池与交流电源)。
使用CallNtPowerInformation
获取显示器关机超时时间:
#include <iostream>
#include <windows.h>
#include <powerbase.h>
#pragma comment(lib, "PowrProf.lib")
int main() {
SYSTEM_POWER_POLICY powerPolicy;
DWORD ret;
ret = CallNtPowerInformation(SystemPowerPolicyCurrent, nullptr, 0, &powerPolicy, sizeof(powerPolicy));
if (ret == ERROR_SUCCESS) {
std::cout << "Display power-off timeout : " << powerPolicy.VideoTimeout << "s \n";
}
else {
std::cerr << "Error 0x" << std::hex << ret << std::endl;
}
}
示例输出:
Display power-off timeout : 600 s
关于c++ - 使用 Win32 API 获取 Windows 屏幕保护程序超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51878637/