| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1136 人关注过本帖
标题:转[推荐]关于禁用屏幕保护和电源管理C代码为VB语言
只看楼主 加入收藏
weiyi75
Rank: 1
等 级:新手上路
威 望:1
帖 子:43
专家分:0
注 册:2006-9-7
收藏
 问题点数:0 回复次数:1 
转[推荐]关于禁用屏幕保护和电源管理C代码为VB语言

原文

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


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

运用Windows平台SDK的界面API可以轻松的做到禁用屏幕保护和电源管理,唯一的缺陷是这种方法无法应用到Windows95下的Win32应用程序中。以下,我将介绍具体方法。

转为VB如下

窗体中加入两个按钮

然后写代码

Option Explicit

Dim m_nLowpowerTimeout As Long
Dim M_nPoweroffTimeout As Long

Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, ByRef lpvParam As Any, ByVal fuWinIni As Long) As Long

Private Const SPI_GETLOWPOWERTIMEOUT = 79
Private Const SPI_SETPOWEROFFTIMEOUT = 82
Private Const SPI_GETPOWEROFFTIMEOUT = 80
Private Const SPI_SETLOWPOWERTIMEOUT = 81

Private Sub Command1_Click()

Call SystemParametersInfo(SPI_GETLOWPOWERTIMEOUT, 0, m_nLowpowerTimeout, 0)

Call SystemParametersInfo(SPI_GETPOWEROFFTIMEOUT, 0, M_nPoweroffTimeout, 0)

Call SystemParametersInfo(SPI_SETLOWPOWERTIMEOUT, 0, Null, 0)

Call SystemParametersInfo(SPI_SETPOWEROFFTIMEOUT, 0, Null, 0)

End Sub

Private Sub Command2_Click()

Call SystemParametersInfo(SPI_SETLOWPOWERTIMEOUT, m_nLowpowerTimeout, Null, 0)

Call SystemParametersInfo(SPI_SETPOWEROFFTIMEOUT, M_nPoweroffTimeout, Null, 0)

m_nLowpowerTimeout = 0
M_nPoweroffTimeout = 0

End Sub

[此贴子已经被作者于2006-9-25 22:14:35编辑过]

搜索更多相关主题的帖子: 电源 语言 屏幕 代码 管理 
2006-09-25 22:13
weiyi75
Rank: 1
等 级:新手上路
威 望:1
帖 子:43
专家分:0
注 册:2006-9-7
收藏
得分:0 

方法2

这个不同上面一个,添加一个窗体,加入一个Timer控件,调用时间设置10秒左右都可

Option Explicit

Const ES_SYSTEM_REQUIRED = &H1
Const ES_DISPLAY_REQUIRED = &H2

Private Declare Function SetThreadExecutionState Lib "Kernel32" (ByVal esFlag As Long) As Long

Private Sub Timer1_Timer() '必须定时调用

Call SetThreadExecutionState(ES_DISPLAY_REQUIRED) '显示器节能

Call SetThreadExecutionState(ES_SYSTEM_REQUIRED) '系统硬盘等节能

Label1 = "已开启"

End Sub

2006-09-25 22:13
快速回复:转[推荐]关于禁用屏幕保护和电源管理C代码为VB语言
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018983 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved