zoukankan      html  css  js  c++  java
  • 如何禁用Windows屏保和电源管理

    编写诸如监控、多媒体、大规模数据处理之类程序的时候,我们常常需要禁用屏幕保护和电源管理,以确保程序的正常运行。一般来说,可以使用模拟鼠标键盘动作的办法禁用95下的屏幕保护和电源管理,但是同样的方法应用到2000/NT,却常常会无效,这和系统的设置有关系。
    运用Windows平台SDK的界面API可以轻松的做到禁用屏幕保护和电源管理,唯一的缺陷是这种方法无法应用到Windows95下的Win32应用程序中。以下,我将介绍具体方法。

    使用SystemParametersInfo这个API来实现对系统的一些参数进行设置(包括屏幕保护和电源管理等):
    BOOL SystemParametersInfo(
      UINT uiAction,  // system parameter to retrieve or set
      UINT uiParam,   // depends on action to be taken
      PVOID pvParam,  // depends on action to be taken
      UINT fWinIni    // user profile update option
    );

    以下是禁用屏幕保护的代码:
    void DisableScrSaver()
    {
     BOOL bScrActive;
     SystemParametersInfo(SPI_GETSCREENSAVEACTIVE, 0, &bScrActive, 0);
     if (bScrActive)
     {
      SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, FALSE, NULL, 0);
     } 
    }
    以下是启用屏幕保护的代码:
    void CNetRGCltDlg::EnableScrSaver()
    {
     SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, TRUE, NULL, 0);
    }

    由于禁用电源保护不可以在Win95下被Win32应用程序使用,所以要事先判断当前操作系统是不是Win95,这里假设已经用函数BOOL IsWin95()实现。
    以下是禁用电源保护的代码:
    void DisablePmmSaver()
    {
     //
     // 由于电源管理的特殊性,不能直接用SPI_SETLOWPOWERACTIVE命令字实现,而是要设置延时。
     //

     SystemParametersInfo(SPI_GETLOWPOWERTIMEOUT, 0, &m_nLowpowerTimeout, 0);
     SystemParametersInfo(SPI_GETPOWEROFFTIMEOUT, 0, &m_nPoweroffTimeout, 0);
     SystemParametersInfo(SPI_SETLOWPOWERTIMEOUT, 0, NULL, 0);
     SystemParametersInfo(SPI_SETPOWEROFFTIMEOUT, 0, NULL, 0);
    }

    以下是启用电源保护的代码
    void EnablePmmSaver()
    {
     SystemParametersInfo(SPI_SETLOWPOWERTIMEOUT, m_nLowpowerTimeout, NULL, 0);
     SystemParametersInfo(SPI_SETPOWEROFFTIMEOUT, m_nPoweroffTimeout, NULL, 0);
     
     m_nLowpowerTimeout = 0;
     m_nPoweroffTimeout = 0;
    }

    说明:
    1 m_nLowpowerTimeout和m_nPoweroffTimeout是用来存储原先延时的变量,当恢复电源保护时要把电源保护延时设置回原来的值;
    2 上面的代码仅仅为了说明调用序列,实际应用时还要加上相当多的错误处理代码,这里忽略。

  • 相关阅读:
    Android sdk + PhoneGap 配置
    一个解析url参数方法
    开始写笔记了~~
    Codevs 3305 水果姐逛水果街Ⅱ 倍增LCA
    Codevs 3304 水果姐逛水果街Ⅰ 线段树
    Cogs 1070. [焦作一中2012] 玻璃球游戏 带权并查集,逆序处理
    Bzoj 1901: Zju2112 Dynamic Rankings 主席树,可持久,树状数组,离散化
    Bzoj 2453: 维护队列 && Bzoj 2120: 数颜色 分块,bitset
    Uoj #131. 【NOI2015】品酒大会 后缀数组,并查集
    Tyvj P1463 智商问题 分块
  • 原文地址:https://www.cnblogs.com/ganmk/p/1601795.html
Copyright © 2011-2022 走看看