【问题标题】: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 毫秒之间,因此这不是一种精确的时间测量方式,但对于我的目的来说已经足够了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-29
      • 2017-06-03
      • 1970-01-01
      • 2014-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多