1

在 Win7 下,打开Control Panel -> Power Options -> Advanced Settings->Processor power management.

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

我怎样才能做到这一点?

4

2 回答 2

1

您需要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是电池)
            }
        }

埃德加·罗查·卡瓦略

于 2012-11-16T22:33:55.460 回答
0

利用

PowerReadACValueIndex()/PowerReadDCValueIndex()
  1. 第一个参数是NULL
  2. 第二个参数——GUID用于所需的电源方案(GUID_MAX_POWER_SAVINGS// GUID_MIN_POWER_SAVINGSGUID_TYPICAL_POWER_SAVINGS
  3. 第三个参数——GUID_PROCESSOR_SETTINGS_SUBGROUP
  4. 第四个参数——GUID_PROCESSOR_THROTTLE_MAXIMUMGUID_PROCESSOR_THROTTLE_MINIMUM
  5. 第 5 个参数是值接收器。

所有GUID描述都可以在winnt.h中找到

于 2014-05-12T05:42:23.583 回答