windows xp,windows 7电源管理总结

2019-07-14 01:08发布

windows xp,windows 7电源管理总结

最近因为项目原因,需要控制操作系统的电源,也就是令操作系统何时关闭显示器、何时关闭硬盘、何时待机、何时休眠等。   这个可以使用API控制,我这里采用的是控制操作系统的电源方案,可以通过命令行中的powercfg去控制。控制操作系统的电源方案,还是调用API函数。 下面我就分别说一下windows xp和windows 7下电源操作的方法,这里以控制操作系统的电源方案为例。 我在项目中是先创建一个C的DLL,需引用PowrProf.lib静态库。 详细API操作请参见:http://msdn.microsoft.com/en-us/library/aa372711(v=VS.85).aspx    1、Windows Xp电源方案控制 XP下的电源方案,如下图:   上图中的“家用”、“便携" 、”演示“、”一直开碰上“、”最少电源管理“、”最大电模式“是系统自带的五种方案,其索引值分别以0--4表示,其相应信息存储在注册表中。 创建电源方案,先使用"ReadPwrScheme"读取一个原有方案,然后在获取到的对象中设置自己的设置值,再使用 "WritePwrScheme”添加该方案,最后使用"SetActivePwrScheme“激活该电源方案,使我们自己填加的电源方案为正在使用的电源方案。 我正在使用的源码如下: 代码  1 /*电源操作 for windows xp*/
 2 /*设置方案值与名称*/
 3 extern "C" __declspec(dllexport) BOOLEAN WriteSchemeForXP(LPCWSTR lpszSchemeName,LPCWSTR lpszSchemeDescription,ULONG a,ULONG b,ULONG c,ULONG d,ULONG e,ULONG f,ULONG g,ULONG h)
 4 {
 5     UINT id=100;
 6     //create
 7     PPOWER_POLICY policy = new POWER_POLICY();    
 8     //read
 9     ReadPwrScheme(0,policy);
10     //write
11     policy->user.IdleTimeoutAc = e; //待机
12     policy->user.IdleTimeoutDc = f;
13     policy->user.SpindownTimeoutAc = c; //关闭硬盘
14     policy->user.SpindownTimeoutDc = d;
15     policy->user.VideoTimeoutAc = a; //关闭显示器
16     policy->user.VideoTimeoutDc = b;
17     policy->mach.DozeS4TimeoutAc=g; //休眠
18     policy->mach.DozeS4TimeoutDc=h;
19 
20     BOOLEAN result= WritePwrScheme(&id,lpszSchemeName,lpszSchemeDescription,policy);
21     SetActivePwrScheme(100,0,0);
22     return result;
23 }
24 
25 /*删除电源方案*/
26 extern "C" __declspec(dllexport) BOOLEAN DelSchemeForXP()
27 {        
28     //delete
29     BOOLEAN result = DeletePwrScheme(100);
30     //active
31     SetActivePwrScheme(0,0,0);
32     return result;
33     return 0;
34 }     2、Windows 7下的电源方案 Windows7与XP不同,它使用GUID值来唯一标识电源方案及电源方案下的各个详细信息,并且Windows7可以设置更加详细的电源控制,可以从powercfg /query中查看。 原理与XP相同,源码如下: 代码 static const GUID GLOBAL_GUID = 
0x3b662acb0x0e270x40cd, { 0x870x1d0xd10xb50xc10xac0x3e0xfe } };

static GUID *MAKE_GUID = new GUID(GLOBAL_GUID);

//电源方案"平衡"的GUID值 for WIN7
static const GUID POWER_SAVER_GUID = {
    
0x381b4222,0xf694,0x41f0,{0x96,0x85,0xff,0x5b,