最小(最大)处理器状态的 API,C++

Posted

技术标签:

【中文标题】最小(最大)处理器状态的 API,C++【英文标题】:API for Minimum(Maximum) Processor State , C++ 【发布时间】:2014-03-20 04:48:04 【问题描述】:

我对 windows 中以下可用设置选项的问题: 在 windows 和 Power 选项下 ==> 高级电源设置 ==> 处理器电源管理 ==> 最低处理器状态(可以设置为百分比)

这个值对应的API结构是什么,我想写一个程序可以控制最小和最大处理器状态的百分比。我试过了,SYSTEM_POWER_INFO,SYSTEM_POWER_CAPABILITY,..,没有具体提到这个值。

请指教。

问候,

【问题讨论】:

【参考方案1】:

显然有一个名为WriteProcessorPwrScheme的Windows函数:

BOOLEAN WINAPI WriteProcessorPwrScheme(
  _In_  UINT ID,
  _In_  PMACHINE_PROCESSOR_POWER_POLICY pMachineProcessorPowerPolicy
);

资料来源:this SO question 中的 C# 答案告诉我。按照文档查看 PMACHINE_PROCESSOR_POWER_POLICY 结构中的所有内容。

不过,根据文档,该功能不会影响当前的系统电源策略。您需要拨打SetActivePwrScheme:

BOOLEAN WINAPI SetActivePwrScheme(
  _In_      UINT uiID,
  _In_opt_  PGLOBAL_POWER_POLICY lpGlobalPowerPolicy,
  _In_opt_  PPOWER_POLICY lpPowerPolicy
);

如果SetActivePwrScheme 不起作用或您的Windows 版本不支持,您可以致电PowerSetActiveScheme:

DWORD WINAPI PowerSetActiveScheme(
  _In_opt_  HKEY UserRootPowerKey,
  _In_      const GUID *SchemeGuid
);

因此看来您必须首先使用WriteProcessorPwrScheme 创建一个电源方案,它将一个索引更改为一组电源方案,然后您必须使用该索引调用SetActivePwrScheme 来激活它。

【讨论】:

感谢 AndyG,我可以设置方案,但是如果有人可以帮助我直接调整百分比,那将会很有用。 @Yasz:如果你深入了解PPOWER_POLICY 结构,你最终会遇到ForcedThrottleAc:当计算机在AC 上运行时系统施加的处理器节流级别(实用程序) 功率,以百分比表示。和ForcedThrottleDc:当计算机依靠电池供电运行时系统将施加的处理器节流级别,以百分比表示。 感谢您的帮助:)【参考方案2】:

您可以使用修改任何电源方案

PowerWriteACValueIndex()/PowerWriteDCValueIndex()

第一个参数为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 中找到

【讨论】:

太棒了!根据您发布的内容,我已经能够编写一个完整的程序来更改最低处理器状态,然后通过复制当前电源方案,编辑副本,使副本处于活动状态,然后恢复原始状态,将其更改回来计划积极。代码在这里:dreamincode.net/forums/topic/…

以上是关于最小(最大)处理器状态的 API,C++的主要内容,如果未能解决你的问题,请参考以下文章

更改最小化,关闭和最大化窗口的图标

vc 当对话框最大化时怎么处理状态条

在c++中窗口最大化、最小化、关闭的程序代码是啥?

进程线程及其状态

我如何使用最小和最大 CSS 函数来处理 auto

平流式沉砂池设计 最大(最小)设计流量的确定