检测何时处于省电模式

时间:2014-02-27 13:20:19

标签: visual-c++ windows-7 windows-xp windows-screensaver

我正在尝试检测计算机何时进入省电模式。问题是,这个程序必须在Windows XP和7上运行.RegisterPowerSettingNotification仅适用于Vista和更新版本,所以这不是一个选项。我还尝试将SystemParametersInfo与SPI_GETSCREENSAVERRUNNING一起使用,但这不适用于省电模式,这是计算机实际设置的模式。还有其他建议吗?

1 个答案:

答案 0 :(得分:1)

要回答我自己的问题,抓住屏幕保护程序超时和最后一个用户输入,并比较两者似乎是最好的方法:

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返回自上次用户输入以来的刻度数。根据{{​​3}},滴答声发生在10到16毫秒之间,因此这不是测量时间的精确方法,但它对我的目的来说已经足够了。