我在试着检测电脑何时进入省电模式。问题是,这个程序必须同时运行在Windows和7上。RegisterPowerSettingNotification只适用于Vista和更新版本,所以这不是一种选择。我也尝试过在SystemParametersInfo中使用SPI_GETSCREENSAVERRUNNING,但这并不适用于节电模式,而这正是计算机的实际设置。还有其他建议吗?
发布于 2014-03-04 14:34:20
要回答我自己的问题,获取屏幕保护程序超时和最后一次用户输入,并将两者进行比较,似乎是最好的方法:
int screenTimeout;
SystemParametersInfo(SPI_GETSCREENSAVETIMEOUT, NULL, &screenTimeout, SPIF_UPDATEINIFILE);
LASTINPUTINFO lastInput;
lastInput.cbSize = sizeof(LASTINPUTINFO);
GetLastInputInfo(&lastInput);
DWORD ticks = GetTickCount();
int lastInputTime = (ticks-lastInput.dwTime)/1000;GetLastInputInfo返回自上次用户输入以来的滴答数。根据MSDN的说法,滴答发生在10-16毫秒之间,所以这不是一种精确的测量时间的方法,但对我来说已经足够了。
https://stackoverflow.com/questions/22069789
复制相似问题