1

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

4

1 回答 1

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 毫秒之间,所以这不是一种精确的时间测量方法,但对于我的目的来说已经足够了。

于 2014-03-04T14:34:20.737 回答