Visual c++ 在省电模式下检测

Visual c++ 在省电模式下检测,visual-c++,windows-7,windows-xp,windows-screensaver,Visual C++,Windows 7,Windows Xp,Windows Screensaver,我正在尝试检测计算机何时进入省电模式。问题是,这个程序必须同时在WindowsXP和Windows7上运行。RegisterPowerSettingNotification仅适用于Vista和更高版本,因此这不是一个选项。我还尝试将SystemParametersInfo与SPI_GETSCREENSAVERRUNNING一起使用,但在省电模式下不起作用,这是计算机实际设置的模式。还有其他建议吗?要回答我自己的问题,抓取屏幕保护程序超时和最后一次用户输入,并比较两者似乎是最好的方法: int s

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

要回答我自己的问题,抓取屏幕保护程序超时和最后一次用户输入,并比较两者似乎是最好的方法:

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;
返回自上次用户输入以来的刻度数。据我所知,滴答声发生在10到16毫秒之间,所以这不是一种精确的测量时间的方法,但对于我来说已经足够好了