在 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()
NULLGUID用于所需的电源方案(GUID_MAX_POWER_SAVINGS// GUID_MIN_POWER_SAVINGS)GUID_TYPICAL_POWER_SAVINGSGUID_PROCESSOR_SETTINGS_SUBGROUPGUID_PROCESSOR_THROTTLE_MAXIMUM或GUID_PROCESSOR_THROTTLE_MINIMUM所有GUID描述都可以在winnt.h中找到