2014-02-27 46 views
1

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

回答

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