2012-11-16 51 views
1

在Win7下,打开Control Panel -> Power Options -> Advanced Settings->Processor power management我可以获得最小(最大)处理器状态的值

你可以看到最小处理器状态,最大处理器状态。
我想通过C#获取处理器状态的值,例如5%,100%。 我在c#中使用命令“powercfg”,我可以得到“monitor-timeout-ac”的值,依此类推。
我无法获得处理器
状态的值。

我该如何做到这一点?

回答

1

您需要的DllImport powrprof.dll,并使用ReadProcessorPwrScheme API,然后访问processorPolicyInfoAc.DemotePercent和ProcessorPolicyInfoAc.PromotePercent

看到代码波纹管。未经测试,但它会告诉你方式(我使用此代码来获得DynamicThrottle信息,它的工作原理)。

 

    struct PROCESSOR_POWER_POLICY_INFO 
     { 
      public uint TimeCheck; 
      public uint DemoteLimit; 
      public uint PromoteLimit; 
      public byte DemotePercent; 
      public byte PromotePercent; 
      [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] 
      public byte[] Spare; 
      public uint AllowBits; 
     } 

     struct PROCESSOR_POWER_POLICY 
     { 
      public uint Revision; 
      public byte DynamicThrottle; 
      [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] 
      public byte[] Spare; 
      public uint Reserved; 
      public uint PolicyCount; 
      [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] 
      public PROCESSOR_POWER_POLICY_INFO[] Policy; 
     } 

     struct MACHINE_PROCESSOR_POWER_POLICY 
     { 
      public uint Revision;     // ULONG 
      public PROCESSOR_POWER_POLICY ProcessorPolicyAc; 
      public PROCESSOR_POWER_POLICY ProcessorPolicyDc; 
     } 


     [DllImport("powrprof.dll", SetLastError = true)] 
     static extern bool ReadProcessorPwrScheme(uint uiID, out MACHINE_PROCESSOR_POWER_POLICY pMachineProcessorPowerPolicy); 
     public void ReadProcessorPowerScheme() 
     { 
      MACHINE_PROCESSOR_POWER_POLICY machinep = new MACHINE_PROCESSOR_POWER_POLICY(); 
      uint scheme = 0; 

      if (ReadProcessorPwrScheme(scheme, out machinep)) 
      { 

       //Then loop through machinep.ProcessorPolicyAc.Policy[]; array 
       //Use: PROCESSOR_POWER_POLICY_INFO processorPolicyInfoAc = mppp.ProcessorPolicyAc.Policy[i]; 
       //Use: processorPolicyInfoAc.DemotePercent; 
       //Use: processorPolicyInfoAc.PromotePercent; 

       //And don't forget to do the same for Dc (Dc is battery) 
      } 
     } 

埃德加罗沙Carvalho的

+0

谢谢您的帮助下找到。 –

+0

我已经通过powercfg命令解决了它。 –

0

使用

PowerReadACValueIndex()/PowerReadDCValueIndex() 
  1. 第一参数是NULL
  2. 第二参数 - GUID为期望功率方案(GUID_MAX_POWER_SAVINGS/GUID_MIN_POWER_SAVINGS/GUID_TYPICAL_POWER_SAVINGS
  3. 第3个参数 - GUID_PROCESSOR_SETTINGS_SUBGROUP
  4. 第4个参数 - GUID_PROCESSOR_THROTTLE_MAXIMUMGUID_PROCESSOR_THROTTLE_MINIMUM
  5. 第5个参数是值接收器。

所有GUID描述可以在WINNT.H

相关问题