1
我试图检测计算机何时进入省电模式。问题是,这个程序必须在Windows XP和7上运行。RegisterPowerSettingNotification只适用于Vista和更新的版本,所以这不是一个选项。我也尝试使用SPI_GETSCREENSAVERRUNNING使用SystemParametersInfo,但这对于节电模式不起作用,这是电脑实际设置的功能。还有其他建议吗?检测何时处于省电模式
我试图检测计算机何时进入省电模式。问题是,这个程序必须在Windows XP和7上运行。RegisterPowerSettingNotification只适用于Vista和更新的版本,所以这不是一个选项。我也尝试使用SPI_GETSCREENSAVERRUNNING使用SystemParametersInfo,但这对于节电模式不起作用,这是电脑实际设置的功能。还有其他建议吗?检测何时处于省电模式
要回答我的问题,抓住了屏幕超时和最后的用户输入,并比较这两个似乎是最好的办法:
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毫秒之间,所以这不是一种精确的时间测量方式,但对我的目的来说已经足够了。