我想在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测试
答案 0 :(得分:5)
SPI_GETSCREENSAVETIMEOUT是过时的API(可惜Microsoft从未提及过)。屏幕保护程序超时现在是电源配置文件的一部分,并且可能会有所不同,例如电池还是交流电。
使用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(SYSTEM_POWER_POLICY));
if (ret == ERROR_SUCCESS) {
std::cout << "The Screen Saver time is : " << powerPolicy.VideoTimeout << std::endl;
}
else {
std::cerr << "Error 0x" << std::hex << ret << std::endl;
}
}
输出:
The Screen Saver time is : 600