最近因为项目原因,需要控制操作系统的电源,也就是令操作系统何时关闭显示器、何时关闭硬盘、何时待机、何时休眠等。

  这个可以使用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下的电源方案,如下图:

windows xp,windows 7电源管理总结 

上图中的“家用”、“便携" 、”演示“、”一直开碰上“、”最少电源管理“、”最大电模式“是系统自带的五种方案,其索引值分别以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 }

相关文章:

  • 2021-08-16
  • 2021-05-31
  • 2021-07-01
  • 2022-12-23
  • 2021-10-16
  • 2021-08-11
  • 2021-08-06
猜你喜欢
  • 2021-05-15
  • 2021-09-22
  • 2021-05-07
  • 2021-04-10
相关资源
相似解决方案