我正在尝试检测计算机何时进入省电模式。问题是,这个程序必须在Windows XP和7上运行.RegisterPowerSettingNotification仅适用于Vista和更新版本,所以这不是一个选项。我还尝试将SystemParametersInfo与SPI_GETSCREENSAVERRUNNING一起使用,但这不适用于省电模式,这是计算机实际设置的模式。还有其他建议吗?
答案 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毫秒之间,因此这不是测量时间的精确方法,但它对我的目的来说已经足够了。