如何禁用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 上面的代码仅仅为了说明调用序列,实际应用时还要加上相当多的错误处理代码,这里忽略。

win7 设置电源管理方案

DWORD DisableDisplayPowerWin7(bool bDisable)     {         DWORD dwRet = 0;         static const ...
  • kaizi318
  • kaizi318
  • 2017-05-04 09:41:23
  • 2701

终止正在运行的屏幕保护程序

获取当前是否进入屏幕保护程序SystemParametersInfo(SPI_GETSCREENSAVERRUNNING, 0, &isActive, 0); Sometimes applicati...
  • zhoujiaxq
  • zhoujiaxq
  • 2013-10-14 09:23:55
  • 1461

阻止屏保运行、显示器和系统待机

     暴风影音在播放的时候会阻止屏幕保护程序的运行,并会防止系统关闭显示器和进入待机状态。以下就是用C#来实现这个功能。1、阻止屏幕保护程序的运行    基本原理是播放时调用Windows API...
  • zjerryj
  • zjerryj
  • 2009-09-29 20:27:00
  • 5869

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

编写诸如监控、多媒体、大规模数据处理之类程序的时候,我们常常需要禁用屏幕保护和电源管理,以确保程序的正常运行。一般来说,可以使用模拟鼠标键盘动作的办法禁用95下的屏幕保护和电源管理,但是同样的方法应用...
  • fzd999
  • fzd999
  • 2004-08-30 20:30:00
  • 3044

禁止/启用屏幕保护及系统热键等

 禁止/启用屏幕保护及系统热键等作者:徐景周 1.         禁止/启用屏幕保护及电源管理static UINT dss_GetList[] = {SPI_GETLOWPOWERTIMEOUT,...
  • jz_x
  • jz_x
  • 2002-08-29 17:13:00
  • 939

禁用屏保和电源管理

[推荐]关于禁用屏幕保护和电源管理 编写诸如监控、多媒体、大规模数据处理之类程序的时候,我们常常需要禁用屏幕保护和电源管理,以确保程序的正常运行。一般来说,可以使用模拟鼠标键盘动作的办法禁用95下的屏...
  • liguocheng
  • liguocheng
  • 2011-03-21 09:14:00
  • 1221

c# 阻止屏幕保护启动

千千静听的全屏播放不阻止屏幕保护的启动 这让人很郁闷 而且从5.1.0版本到现在的5.2beta都没有解决 所以想自己写个程序来阻止屏保启动发现只需要拦截消息就可以了 重写WndProc方法 prot...
  • qthai
  • qthai
  • 2008-06-11 15:45:00
  • 785

Linux关闭休眠和屏保模式

本人因为特殊需求,想让某台Linux主机始终显示某个程序,显示器不能关机或者休眠或进入屏保模式。 环境:Ubuntu 11.10 最小化模式安装并安装有轻量级桌面openbox(非gnome)。...
  • lingxiu0613
  • lingxiu0613
  • 2017-03-20 14:16:00
  • 1713

关机、重启、休眠、注销、待机、锁定、屏保的区别

  • 2010年08月27日 16:07
  • 32KB
  • 下载

windows 电源管理之禁用睡眠脚本

最近一个项目要写一个脚本对windows中睡眠功能禁用掉,对这个内容网上资料不多,所以做个分享。休眠还是睡眠首先要明确两个概念,休眠(hibernate)、睡眠(stand by)和混合睡眠三种概念。...
  • zdavb
  • zdavb
  • 2016-12-19 14:53:06
  • 1449
收藏助手
不良信息举报
您举报文章:如何禁用Windows屏保和电源管理
举报原因:
原因补充:

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