如何禁用Windows屏保和电源管理

原创 2004年08月30日 20:30:00

编写诸如监控、多媒体、大规模数据处理之类程序的时候,我们常常需要禁用屏幕保护和电源管理,以确保程序的正常运行。一般来说,可以使用模拟鼠标键盘动作的办法禁用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 上面的代码仅仅为了说明调用序列,实际应用时还要加上相当多的错误处理代码,这里忽略。

禁止、启用windows屏幕保护程序 VC源代码

  • 2010年04月07日 19:23
  • 23KB
  • 下载

VC如何禁止自动屏保,休眠等节电模式

VC如何禁止自动屏保,休眠等节电模式
  • rainharder
  • rainharder
  • 2010年12月27日 20:27
  • 4538

常用Windows API

1.窗口信息MS为我们提供了打开特定桌面和枚举桌面窗口的函数。hDesk = OpenDesktop(lpszDesktop, 0, FALSE, DESKTOP_ENUMERATE);// 打开我们...
  • pizi0475
  • pizi0475
  • 2010年03月10日 10:04
  • 623

windows下API集合

Windows API函数大全 1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一个网络资源的连接 ...
  • llping2010
  • llping2010
  • 2011年12月03日 13:26
  • 574

vc禁用屏保, 关机, 以及切屏

  • 2011年11月10日 15:28
  • 28KB
  • 下载

如何禁用Windows屏保和电源管理

如何禁用Windows屏保和电源管理 编写诸如监控、多媒体、大规模数据处理之类程序的时候,我们常常需要禁用屏幕保护和电源管理,以确保程序的正常运行。一般来说,可以使用模拟鼠标键盘动作的办法禁用95下的...
  • m372897500
  • m372897500
  • 2012年01月05日 12:36
  • 542

Windows API函数速查

1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一个网络资源的连接 WNetAddConnection3 ...
  • ghevinn
  • ghevinn
  • 2012年11月22日 18:14
  • 4164

PowerManagerService电源管理和Wacklock锁申请与释放机制

一. 电源管理概述     电源管理(PowerManager)在任何设备中都是最重要的组成部分之一,良好的电源管理方案可以达到节能、延长电池寿命、降低辐射、降温等目的。 移动设备...
  • MENGHUANBEIKE
  • MENGHUANBEIKE
  • 2017年10月08日 18:03
  • 113
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何禁用Windows屏保和电源管理
举报原因:
原因补充:

(最多只允许输入30个字)