如何禁止或暂停Windows的自动屏保、休眠等节电模式
2014-01-24 22:45
375 查看
当我们的软件运行在某一状态时,此时在做一些重要的、我们关心的事情,我们不希望受到自动屏保和休眠的打扰,需要暂时将自动屏保和休眠禁止掉。就比如暴风影音,在播放视频时是禁止自动屏保和休眠的。那我们怎样将自动屏保、休眠等节电模式暂时禁止掉呢?
Windows在启动屏幕保护程序前会向当前激活的应用程序发WM_SYSCOMMAND消息,其中wParam参数指定了即将执行的系统命令类型,值SC_SCREENSAVE表明这个消息为屏幕保护启动,拦截这个消息并return即可阻止启动屏幕保护,而值SC_MONITORPOWER为显示器节电自动关闭的消息,同理可return。下面为程序开启后,阻止系统这两个动作的代码。
Windows在启动屏幕保护程序前会向当前激活的应用程序发WM_SYSCOMMAND消息,其中wParam参数指定了即将执行的系统命令类型,值SC_SCREENSAVE表明这个消息为屏幕保护启动,拦截这个消息并return即可阻止启动屏幕保护,而值SC_MONITORPOWER为显示器节电自动关闭的消息,同理可return。下面为程序开启后,阻止系统这两个动作的代码。
// 为相关窗口类添加WM_SYSCOMMAND消息的响应函数 void CXXXXWnd::OnSysCommand(UINT nID, LPARAM lParam) { if (nID == SC_SCREENSAVE || nID == SC_MONITORPOWER) { return; } CWnd::OnSysCommand(nID, lParam); }Windows在执行电源相关设置的事务时,会发送WM_POWERBROADCAST消息,我们可以截获到该消息,相关代码如下所示。其中wParam参数指定了即将执行的系统命令类型。值PBT_APMQUERYSUSPEND表明此时执行的是待机,休眠的请求,过滤掉这个消息,就可以阻止系统进入待机或休眠等模式。截获到该通知消息,直接返回BROADCAST_QUERY_DENY即可,
//为相关窗口类添加虚函数WindowProc LRESULT CXXXXWnd::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { if (message == WM_POWERBROADCAST && wParam == PBT_APMQUERYSUSPEND)= { return BROADCAST_QUERY_DENY; } return CWnd::WindowProc(message, wParam, lParam); }但是对于WM_POWERBROADCAST消息,在Win7/Win8中是不会在UAC控制下的程序中广播的,要收到该消息可以关闭UAC,或者manifest文件来提权。并且在Win7/Win8中,如果按上述方法收到WM_POWERBROADCAST消息,是截不到PBT_APMQUERYSUSPEND wParam值的,目前的办法是截获到WM_POWERBROADCAST消息就处理,不比对wParam参数值。
相关文章推荐
- VC如何禁止自动屏保,休眠等节电模式
- VC 禁止自动屏保,休眠等节电模式
- iPhone/iPad程序 如何 禁止自动休眠
- 如何在Windows 2000开机时按下F8无效(禁止进入安全模式)
- 如何禁止Windows系统自动安装驱动
- Linux如何禁止系统内核Kernel自动升级避免不必要的麻烦
- ubuntu12.04如何自动挂载文件夹和windows共享文件
- [乐意黎原创]如何让有用户密码的Windows系统自动登录
- C#自动切换Windows窗口程序,如何才能调出主窗口?
- 如何進入“強制禁止驅動簽章”模式
- caffe在windows下如何在vs2013新建工程开发自己的应用cpu模式
- 【Windows 7系统睡眠恢复时如何自动登陆】
- iOS tableView 如何禁止滑动手势删除,只允许在编辑模式下进行删除Cell
- WPS常用操作02——如何禁止单词首写自动大写
- 如何在Windows 2000的域环境中自动分发软件
- Windows 7 中如何自动播放更换喜欢的墙纸
- 加入了windows Domain域的Windows 2008如何自动登录
- ubuntu 开机后接着自动重启 //单用户模式如何进入//解决错误配置的方法
- 如何禁止Mathtype在公式后面自动添加一个空格
- Windows 2000如何打开自动补齐功能