在 Win7 下,打开Control Panel -> Power Options -> Advanced Settings->Processor power management
.
你可以看到最小处理器状态,最大处理器状态。
我想通过 C# 获取处理器状态的值。例如 5%,100%。我在c#中使用命令“powercfg”,我不能得到“monitor-timeout-ac”的值等等。
我无法获得处理器
状态的值。
我怎样才能做到这一点?
您需要dllimport powrprof.dll,并使用ReadProcessorPwrScheme API,然后访问processorPolicyInfoAc.DemotePercent 和ProcessorPolicyInfoAc.PromotePercent
请参阅下面的代码。未经测试,但它会向您展示方式(我使用此代码获取 DynamicThrottle 信息并且它有效)。
结构 PROCESSOR_POWER_POLICY_INFO { 公共单位时间检查; 公共单位 DemoteLimit; 公共单位PromoteLimit; 公共字节降级百分比; 公共字节PromotePercent; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] 公共字节[] 备用; 公共单位 AllowBits; } 结构 PROCESSOR_POWER_POLICY { 公共单位修订; 公共字节DynamicThrottle; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] 公共字节[] 备用; 公共 uint 保留; 公共单位政策计数; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] 公共 PROCESSOR_POWER_POLICY_INFO[] 政策; } 结构 MACHINE_PROCESSOR_POWER_POLICY { 公共单位修订;// 超长 公共 PROCESSOR_POWER_POLICY ProcessorPolicyAc; 公共 PROCESSOR_POWER_POLICY ProcessorPolicyDc; } [DllImport("powrprof.dll", SetLastError = true)] static extern bool ReadProcessorPwrScheme(uint uiID, out MACHINE_PROCESSOR_POWER_POLICY pMachineProcessorPowerPolicy); 公共无效ReadProcessorPowerScheme() { MACHINE_PROCESSOR_POWER_POLICY machinep = new MACHINE_PROCESSOR_POWER_POLICY(); uint 方案 = 0; if (ReadProcessorPwrScheme(scheme, out machinep)) { //然后循环遍历 machinep.ProcessorPolicyAc.Policy[]; 大批 //使用:PROCESSOR_POWER_POLICY_INFO processorPolicyInfoAc = mppp.ProcessorPolicyAc.Policy[i]; //使用:processorPolicyInfoAc.DemotePercent; //使用:processorPolicyInfoAc.PromotePercent; //并且不要忘记对Dc做同样的事情(Dc是电池) } }
埃德加·罗查·卡瓦略
利用
PowerReadACValueIndex()/PowerReadDCValueIndex()
NULL
GUID
用于所需的电源方案(GUID_MAX_POWER_SAVINGS
// GUID_MIN_POWER_SAVINGS
)GUID_TYPICAL_POWER_SAVINGS
GUID_PROCESSOR_SETTINGS_SUBGROUP
GUID_PROCESSOR_THROTTLE_MAXIMUM
或GUID_PROCESSOR_THROTTLE_MINIMUM
所有GUID
描述都可以在winnt.h中找到