【问题标题】:Detecting when in power-save mode检测何时处于省电模式
【发布时间】:2014-03-30 22:58:52
【问题描述】:
我正在尝试检测计算机何时进入省电模式。问题是,这个程序必须在 Windows XP 和 7 上运行。RegisterPowerSettingNotification 只适用于 Vista 和更新版本,所以这不是一个选项。我还尝试将 SystemParametersInfo 与 SPI_GETSCREENSAVERRUNNING 一起使用,但这不适用于省电模式,这是计算机实际设置的模式。还有其他建议吗?
【问题讨论】:
标签:
visual-c++
windows-7
windows-xp
windows-screensaver
【解决方案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 返回自上次用户输入以来的刻度数。根据MSDN 的说法,滴答声发生在 10 到 16 毫秒之间,因此这不是一种精确的时间测量方式,但对于我的目的来说已经足够了。