Win32 C++ 电源计划操作
CPowerCfgUtils.h
#pragma once#include <Windows.h>
#include <powrprof.h>// https://learn.microsoft.com/zh-cn/windows/win32/api/powrprof/?source=recommendations//节能
//DEFINE_GUID(GUID_MAX_POWER_SAVINGS, 0xA1841308, 0x3541, 0x4FAB, 0xBC, 0x81, 0xF7, 0x15, 0x56, 0xF2, 0x0B, 0x4A);
//
//高性能
//DEFINE_GUID(GUID_MIN_POWER_SAVINGS, 0x8C5E7FDA, 0xE8BF, 0x4A96, 0x9A, 0x85, 0xA6, 0xE2, 0x3A, 0x8C, 0x63, 0x5C);
//
//平衡
//DEFINE_GUID(GUID_TYPICAL_POWER_SAVINGS, 0x381B4222, 0xF694, 0x41F0, 0x96, 0x85, 0xFF, 0x5B, 0xB2, 0x60, 0xDF, 0x2E);
//
//所有电源计划
//DEFINE_GUID(ALL_POWERSCHEMES_GUID, 0x68A1E95E, 0x13EA, 0x41E1, 0x80, 0x11, 0x0C, 0x49, 0x6C, 0xA4, 0x90, 0xB0);namespace CPowerCfgUtils
{// @brief: 获取交流电设置的默认值// @param: SubGroup 电源设置的子组// @param: Setting 电源设置的标识符// @param: OutValue 输出缓冲// @ret: DWORD 操作结果DWORD GetACDefaultValue(LPCGUID Scheme, LPCGUID SubGroup, LPCGUID Setting, LPDWORD Value);// @brief: 获取直流电设置的默认值// @param: SubGroup 电源设置的子组// @param: Setting 电源设置的标识符// @param: OutValue 输出缓冲// @ret: DWORD 操作结果DWORD GetDCDefaultValue(LPCGUID Scheme, LPCGUID SubGroup, LPCGUID Setting, LPDWORD Value);// @brief: 获取电源设置的最小值// @param: SubGroup 电源设置的子组// @param: Setting 电源设置的标识符// @param: OutValue 输出缓冲// @ret: DWORD 操作结果DWORD GeValueMin(LPCGUID SubGroup, LPCGUID Setting, LPDWORD OutValue);// @brief: 获取电源设置的最大值// @param: SubGroup 电源设置的子组// @param: Setting 电源设置的标识符// @param: OutValue 输出缓冲// @ret: DWORD 操作结果DWORD GeValueMax(LPCGUID SubGroup, LPCGUID Setting, LPDWORD OutValue);// @brief: 获取电源设置的最大值// @param: SubGroup 电源设置的子组// @param: Setting 电源设置的标识符// @ret: DWORD 操作结果DWORD GetAttributes(LPCGUID SubGroup, LPCGUID Setting);// @brief: 设置电源键的电源属性// @param: SubGroup 电源设置的子组// @param: Setting 电源设置的标识符// @param: Attributes 属性( POWER_ATTRIBUTE_HIDE: 隐藏 POWER_ATTRIBUTE_SHOW_AOAC: 显示)// @ret: DWORD 操作结果DWORD SetAttributes(LPCGUID SubGroup, LPCGUID Setting, DWORD Attributes);// @brief: 设置当前活动电源计划// @param: Scheme 指定修改的电源计划, 为空则指定当前活动的电源计划// @ret: bool 操作结果DWORD SetActiveScheme(LPCGUID Scheme = nullptr);// @brief: 关闭显示器超时时间// @param: Scheme 指定修改的电源计划, 为空则指定当前活动的电源计划// @param: value 超时时间(秒)// @ret: bool 操作结果DWORD SetVideoPowerdownTimeout(LPCGUID Scheme, DWORD ACValue, DWORD DCValue);// @brief: 显示器亮度// @param: Scheme 指定修改的电源计划, 为空则指定当前活动的电源计划// @param: value 亮度(0 - 100)// @ret: bool 操作结果DWORD SetVideoBrightness(LPCGUID Scheme, DWORD ACValue, DWORD DCValue);// @brief: 指定在交互式控制台锁定超时时间// @param: Scheme 指定修改的电源计划, 为空则指定当前活动的电源计划// @param: value 超时时间(秒)// @ret: bool 操作结果DWORD SetVideoConsoleLockTimeout(LPCGUID Scheme, DWORD ACValue, DWORD DCValue);// @brief: 启用自适应亮度// @param: Scheme 指定修改的电源计划, 为空则指定当前活动的电源计划// @param: value 状态(0: 关闭 1: 启用)// @ret: bool 操作结果DWORD SetVideoAdaptiveBrightness(LPCGUID Scheme, DWORD ACValue, DWORD DCValue);// @brief: 无人值守唤醒后重新进入睡眠状态的等待时间(以秒为单位)。// @param: Scheme 指定修改的电源计划, 为空则指定当前活动的电源计划// @param: value 超时时间(秒)// @ret: bool 操作结果DWORD SetUnattendSleepTimeout(LPCGUID Scheme, DWORD ACValue, DWORD DCValue);// @brief: 指定系统被认为处于“空闲”状态后,等待多长时间(以秒为单位)才进入休眠状态(S4)// @param: Scheme 指定修改的电源计划, 为空则指定当前活动的电源计划// @param: value 超时时间(秒)// @ret: bool 操作结果DWORD SetSleepHibernateTimeout(LPCGUID Scheme, DWORD ACValue, DWORD DCValue);// @brief: 使计算机进入睡眠状态// @param: Scheme 指定修改的电源计划, 为空则指定当前活动的电源计划// @param: value 超时时间(秒)// @ret: bool 操作结果DWORD SetSleepStandbyTimeout(LPCGUID Scheme, DWORD ACValue, DWORD DCValue);// @brief: 生效的异类策略// @param: Scheme 指定修改的电源计划, 为空则指定当前活动的电源计划// @param: value 异类策略(0 - 4)// @ret: DWORD 操作结果DWORD SetProcessorHeterogeneousPolicy(LPCGUID Scheme, DWORD ACValue, DWORD DCValue);// @brief: 异类线程调度策列// @param: Scheme 指定修改的电源计划, 为空则指定当前活动的电源计划// @param: value 0: 所有处理器, 1: 高性能处理器, 2: 首选高性能处理器// 3: 高效处理器, 4: 首选高效处理器, 5: 自动// @ret: DWORD 操作结果DWORD SetProcessorThreadSchedulingPolicy(LPCGUID Scheme, DWORD ACValue, DWORD DCValue);// @brief: 异类短运行线程调度策列// @param: Scheme 指定修改的电源计划, 为空则指定当前活动的电源计划// @param: value 0: 所有处理器, 1: 高性能处理器, 2: 首选高性能处理器// 3: 高效处理器, 4: 首选高效处理器, 5: 自动// @ret: DWORD 操作结果DWORD SetProcessorShortThreadSchedulingPolicy(LPCGUID Scheme, DWORD ACValue, DWORD DCValue);// @brief: 处理器最大频率// @param: Scheme 指定修改的电源计划, 为空则指定当前活动的电源计划// @param: value 处理器频率(MHz)// @ret: DWORD 操作结果DWORD SetProcessorFrequencyLimit(LPCGUID Scheme, DWORD ACValue, DWORD DCValue);// @brief: 第 1 类处理器电源效率的处理器最大频率// @param: Scheme 指定修改的电源计划, 为空则指定当前活动的电源计划// @param: value 处理器频率(MHz)// @ret: DWORD 操作结果DWORD SetProcessorFrequencyLimit1(LPCGUID Scheme, DWORD ACValue, DWORD DCValue);// @brief: 最小处理器状态// @param: Scheme 指定修改的电源计划, 为空则指定当前活动的电源计划// @param: value 百分比(0 - 100)// @ret: DWORD 操作结果DWORD SetProcessorThrottleMin(LPCGUID Scheme, DWORD ACValue, DWORD DCValue);// @brief: 第 1 类处理器电源效率的最小处理器状态// @param: Scheme 指定修改的电源计划, 为空则指定当前活动的电源计划// @param: value 百分比 (0 - 100)// @ret: DWORD 操作结果DWORD SetProcessorThrottleMin1(LPCGUID Scheme, DWORD ACValue, DWORD DCValue);// @brief: 最大处理器状态// @param: Scheme 指定修改的电源计划, 为空则指定当前活动的电源计划// @param: value 百分比(0 - 100)// @ret: DWORD 操作结果DWORD SetProcessorThrottleMax(LPCGUID Scheme, DWORD ACValue, DWORD DCValue);// @brief: 第 1 类处理器电源效率的最大处理器状态// @param: Scheme 指定修改的电源计划, 为空则指定当前活动的电源计划// @param: value 百分比(0 - 100)// @ret: DWORD 操作结果DWORD SetProcessorThrottleMax1(LPCGUID Scheme, DWORD ACValue, DWORD DCValue);// @brief: 允许节流状态// @param: Scheme 指定修改的电源计划, 为空则指定当前活动的电源计划// @param: value 节流状态(0: 关闭 1: 启动 2: 自动)// @ret: DWORD 操作结果DWORD SetProcessorAllowThrottling(LPCGUID Scheme, DWORD ACValue, DWORD DCValue);// @brief: 处理器性能增强策略// @param: Scheme 指定修改的电源计划, 为空则指定当前活动的电源计划// @param: value 百分比(0 - 100)// @ret: DWORD 操作结果DWORD SetProcessorPerfBoostPolicy(LPCGUID Scheme, DWORD ACValue, DWORD DCValue);// @brief: 处理器性能提升模式// @param: Scheme 指定修改的电源计划, 为空则指定当前活动的电源计划// @param: value 0: 已禁用, 1: 已启用, 2: 高性能, 3: 高效率// 4: 高性能高效率, 5: 积极且有保障, 6: 高效, 积极且有保障// @ret: DWORD 操作结果DWORD SetProcessorPerfBoostMode(LPCGUID Scheme, DWORD ACValue, DWORD DCValue);// @brief: 按电源按钮时操作// @param: Scheme 指定修改的电源计划, 为空则指定当前活动的电源计划// @param: value 操作 (0: 无 1: 睡眠 2: 休眠 3: 关机 4: 关闭显示器)// @ret: bool 操作结果DWORD SetPowerButtonAction(LPCGUID Scheme, DWORD ACValue, DWORD DCValue);// @brief: 按睡眠按钮时操作// @param: Scheme 指定修改的电源计划, 为空则指定当前活动的电源计划// @param: value 操作 (0: 无 1: 睡眠 2: 休眠 3: 关机 4: 关闭显示器)// @ret: bool 操作结果DWORD SetSleepButtonAction(LPCGUID Scheme, DWORD ACValue, DWORD DCValue);// @brief: 关闭盖子时操作// @param: Scheme 指定修改的电源计划, 为空则指定当前活动的电源计划// @param: value 操作 (0: 无 1: 睡眠 2: 休眠 3: 关机 4: 关闭显示器)// @ret: bool 操作结果DWORD SetLidCloseAction(LPCGUID Scheme, DWORD ACValue, DWORD DCValue);
};
CPowerCfgUtils.cpp
#include "CPowerCfgUtils.h"
#pragma comment(lib, "powrprof.lib")namespace CPowerCfgUtils
{DWORD GeValueMin(LPCGUID SubGroup, LPCGUID Setting, LPDWORD OutValue){return ::PowerReadValueMin(NULL, SubGroup, Setting, OutValue);}DWORD GeValueMax(LPCGUID SubGroup, LPCGUID Setting, LPDWORD OutValue){return ::PowerReadValueMax(NULL, SubGroup, Setting, OutValue);}DWORD GetACDefaultValue(LPCGUID Scheme, LPCGUID SubGroup, LPCGUID Setting, LPDWORD Value){LPGUID lpActiveScheme = NULL;LPCGUID lpScheme = Scheme;DWORD dwResult = ERROR_SUCCESS;do{if (nullptr == Scheme){//检索当前活动的电源方案dwResult = ::PowerGetActiveScheme(NULL, &lpActiveScheme);if (ERROR_SUCCESS != dwResult){break;}lpScheme = lpActiveScheme;}//读取交流电默认值 (接通电源)dwResult = ::PowerReadACDefaultIndex(NULL, lpScheme, SubGroup, Setting, Value);if (ERROR_SUCCESS != dwResult){break;}} while (FALSE);// 释放内存if (lpScheme){::LocalFree(lpActiveScheme);}return dwResult;}DWORD GetDCDefaultValue(LPCGUID Scheme, LPCGUID SubGroup, LPCGUID Setting, LPDWORD Value){LPGUID lpActiveScheme = NULL;LPCGUID lpScheme = Scheme;DWORD dwResult = ERROR_SUCCESS;do{if (nullptr == Scheme){//检索当前活动的电源方案dwResult = ::PowerGetActiveScheme(NULL, &lpActiveScheme);if (ERROR_SUCCESS != dwResult){break;}lpScheme = lpActiveScheme;}//读取直流电默认值 (使用电池)dwResult = ::PowerReadDCDefaultIndex(NULL, lpScheme, SubGroup, Setting, Value);if (ERROR_SUCCESS != dwResult){break;}} while (FALSE);// 释放内存if (lpScheme){::LocalFree(lpActiveScheme);}return dwResult;}DWORD GetACValue(LPCGUID Scheme, LPCGUID SubGroup, LPCGUID Setting, LPDWORD Value){LPGUID lpActiveScheme = NULL;LPCGUID lpScheme = Scheme;DWORD dwResult = ERROR_SUCCESS;do{if (nullptr == Scheme){//检索当前活动的电源方案dwResult = ::PowerGetActiveScheme(NULL, &lpActiveScheme);if (ERROR_SUCCESS != dwResult){break;}lpScheme = lpActiveScheme;}//读取交流电状态 (接通电源)dwResult = ::PowerReadACValueIndex(NULL, lpScheme, SubGroup, Setting, Value);if (ERROR_SUCCESS != dwResult){break;}} while (FALSE);// 释放内存if (lpScheme){::LocalFree(lpActiveScheme);}return dwResult;}DWORD GetDCValue(LPCGUID Scheme, LPCGUID SubGroup, LPCGUID Setting, LPDWORD Value){LPGUID lpActiveScheme = NULL;LPCGUID lpScheme = Scheme;DWORD dwResult = ERROR_SUCCESS;do{if (nullptr == Scheme){//检索当前活动的电源方案dwResult = ::PowerGetActiveScheme(NULL, &lpActiveScheme);if (ERROR_SUCCESS != dwResult){break;}lpScheme = lpActiveScheme;}//读取直流电状态 (使用电池)dwResult = ::PowerReadDCValueIndex(NULL, lpScheme, SubGroup, Setting, Value);if (ERROR_SUCCESS != dwResult){break;}} while (FALSE);// 释放内存if (lpScheme){::LocalFree(lpActiveScheme);}return dwResult;}DWORD GetValue(LPCGUID Scheme, LPCGUID SubGroup, LPCGUID Setting, LPDWORD AcValue, LPDWORD DcValue){LPGUID lpActiveScheme = NULL;LPCGUID lpScheme = Scheme;DWORD dwResult = ERROR_SUCCESS;do{if (nullptr == Scheme){//检索当前活动的电源方案dwResult = ::PowerGetActiveScheme(NULL, &lpActiveScheme);if (ERROR_SUCCESS != dwResult){break;}lpScheme = lpActiveScheme;}//读取交流电状态 (接通电源)dwResult = ::PowerReadACValueIndex(NULL, lpScheme, SubGroup, Setting, AcValue);if (ERROR_SUCCESS != dwResult){break;}//读取直流电状态 (使用电池)dwResult = ::PowerReadDCValueIndex(NULL, lpScheme, SubGroup, Setting, DcValue);if (ERROR_SUCCESS != dwResult){break;}} while (FALSE);// 释放内存if (lpScheme){::LocalFree(lpActiveScheme);}return dwResult;}DWORD SetACValue(LPCGUID Scheme, LPCGUID SubGroup, LPCGUID Setting, DWORD AcValue){LPGUID lpActiveScheme = NULL;LPCGUID lpScheme = Scheme;DWORD dwResult = ERROR_SUCCESS;do{if (nullptr == Scheme){//检索当前活动的电源方案dwResult = ::PowerGetActiveScheme(NULL, &lpActiveScheme);if (ERROR_SUCCESS != dwResult){break;}lpScheme = lpActiveScheme;}//交流电状态 (接通电源)dwResult = ::PowerWriteACValueIndex(NULL, lpScheme, SubGroup, Setting, AcValue);if (ERROR_SUCCESS != dwResult){break;}} while (FALSE);// 释放内存if (lpScheme){::LocalFree(lpActiveScheme);}return dwResult;}DWORD SetDCValue(LPCGUID Scheme, LPCGUID SubGroup, LPCGUID Setting, DWORD DcValue){LPGUID lpActiveScheme = NULL;LPCGUID lpScheme = Scheme;DWORD dwResult = ERROR_SUCCESS;do{if (nullptr == Scheme){//检索当前活动的电源方案dwResult = ::PowerGetActiveScheme(NULL, &lpActiveScheme);if (ERROR_SUCCESS != dwResult){break;}lpScheme = lpActiveScheme;}//直流电状态 (使用电池)dwResult = ::PowerWriteACValueIndex(NULL, lpScheme, SubGroup, Setting, DcValue);if (ERROR_SUCCESS != dwResult){break;}} while (FALSE);// 释放内存if (lpScheme){::LocalFree(lpActiveScheme);}return dwResult;}DWORD SetValue(LPCGUID Scheme, LPCGUID SubGroup, LPCGUID Setting, DWORD AcValue, DWORD DcValue){LPGUID lpActiveScheme = NULL;LPCGUID lpScheme = Scheme;DWORD dwResult = ERROR_SUCCESS;do{if (nullptr == Scheme){//检索当前活动的电源方案dwResult = ::PowerGetActiveScheme(NULL, &lpActiveScheme);if (ERROR_SUCCESS != dwResult){break;}lpScheme = lpActiveScheme;}//交流电状态 (接通电源)dwResult = ::PowerWriteACValueIndex(NULL, lpScheme, SubGroup, Setting, AcValue);if (ERROR_SUCCESS != dwResult){break;}//直流电状态 (使用电池)dwResult = ::PowerWriteDCValueIndex(NULL, lpScheme, SubGroup, Setting, DcValue);if (ERROR_SUCCESS != dwResult){break;}} while (FALSE);// 释放内存if (lpScheme){::LocalFree(lpActiveScheme);}return dwResult;}DWORD GetAttributes(LPCGUID SubGroup, LPCGUID Setting){return ::PowerReadSettingAttributes(SubGroup, Setting);}DWORD SetAttributes(LPCGUID SubGroup, LPCGUID Setting, DWORD Attributes){return ::PowerWriteSettingAttributes(SubGroup, Setting, Attributes);}DWORD SetActiveScheme(LPCGUID Scheme/* = nullptr*/){LPGUID lpActiveScheme = NULL;LPCGUID lpScheme = Scheme;DWORD dwResult = ERROR_SUCCESS;do{if (nullptr == Scheme){//检索当前活动的电源方案dwResult = ::PowerGetActiveScheme(NULL, &lpActiveScheme);if (ERROR_SUCCESS != dwResult){break;}lpScheme = lpActiveScheme;}//设置电源方案处于活动状态dwResult = ::PowerSetActiveScheme(NULL, lpScheme);if (ERROR_SUCCESS != dwResult){break;}} while (FALSE);if (lpActiveScheme){::LocalFree(lpActiveScheme);}return dwResult;}DWORD SetVideoValue(LPCGUID Scheme, LPCGUID Setting, DWORD AcValue, DWORD DcValue){return SetValue(Scheme, &GUID_VIDEO_SUBGROUP, Setting, AcValue, DcValue);}DWORD SetVideoPowerdownTimeout(LPCGUID Scheme, DWORD ACValue, DWORD DCValue){return SetVideoValue(Scheme, &GUID_VIDEO_POWERDOWN_TIMEOUT, ACValue, DCValue);}DWORD SetVideoBrightness(LPCGUID Scheme, DWORD ACValue, DWORD DCValue){return SetVideoValue(Scheme, &GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS, ACValue, DCValue);}DWORD SetVideoAdaptiveBrightness(LPCGUID Scheme, DWORD ACValue, DWORD DCValue){return SetVideoValue(Scheme, &GUID_VIDEO_ADAPTIVE_DISPLAY_BRIGHTNESS, ACValue, DCValue);}DWORD SetVideoConsoleLockTimeout(LPCGUID Scheme, DWORD ACValue, DWORD DCValue){return SetVideoValue(Scheme, &GUID_VIDEO_CONSOLE_LOCK_TIMEOUT, ACValue, DCValue);}DWORD SetSleepValue(LPCGUID Scheme, LPCGUID Setting, DWORD AcValue, DWORD DcValue){return SetValue(Scheme, &GUID_SLEEP_SUBGROUP, Setting, AcValue, DcValue);}DWORD SetUnattendSleepTimeout(LPCGUID Scheme, DWORD ACValue, DWORD DCValue){return SetSleepValue(Scheme, &GUID_UNATTEND_SLEEP_TIMEOUT, ACValue, DCValue);}DWORD SetSleepHibernateTimeout(LPCGUID Scheme, DWORD ACValue, DWORD DCValue){return SetSleepValue(Scheme, &GUID_HIBERNATE_TIMEOUT, ACValue, DCValue);}DWORD SetSleepStandbyTimeout(LPCGUID Scheme, DWORD ACValue, DWORD DCValue){return SetSleepValue(Scheme, &GUID_STANDBY_TIMEOUT, ACValue, DCValue);}DWORD SetProcessorValue(LPCGUID Scheme, LPCGUID Setting, DWORD AcValue, DWORD DcValue){return SetValue(Scheme, &GUID_PROCESSOR_SETTINGS_SUBGROUP, Setting, AcValue, DcValue);}DWORD SetProcessorHeterogeneousPolicy(LPCGUID Scheme, DWORD ACValue, DWORD DCValue){return SetProcessorValue(Scheme, &GUID_PROCESSOR_HETEROGENEOUS_POLICY, ACValue, DCValue);}DWORD SetProcessorThreadSchedulingPolicy(LPCGUID Scheme, DWORD ACValue, DWORD DCValue){return SetProcessorValue(Scheme, &GUID_PROCESSOR_THREAD_SCHEDULING_POLICY, ACValue, DCValue);}DWORD SetProcessorShortThreadSchedulingPolicy(LPCGUID Scheme, DWORD ACValue, DWORD DCValue){return SetProcessorValue(Scheme, &GUID_PROCESSOR_SHORT_THREAD_SCHEDULING_POLICY, ACValue, DCValue);}DWORD SetProcessorFrequencyLimit(LPCGUID Scheme, DWORD ACValue, DWORD DCValue){return SetProcessorValue(Scheme, &GUID_PROCESSOR_FREQUENCY_LIMIT, ACValue, DCValue);}DWORD SetProcessorFrequencyLimit1(LPCGUID Scheme, DWORD ACValue, DWORD DCValue){return SetProcessorValue(Scheme, &GUID_PROCESSOR_FREQUENCY_LIMIT_1, ACValue, DCValue);}DWORD SetProcessorThrottleMin(LPCGUID Scheme, DWORD ACValue, DWORD DCValue){return SetProcessorValue(Scheme, &GUID_PROCESSOR_THROTTLE_MINIMUM, ACValue, DCValue);}DWORD SetProcessorThrottleMin1(LPCGUID Scheme, DWORD ACValue, DWORD DCValue){return SetProcessorValue(Scheme, &GUID_PROCESSOR_THROTTLE_MINIMUM_1, ACValue, DCValue);}DWORD SetProcessorThrottleMax(LPCGUID Scheme, DWORD ACValue, DWORD DCValue){return SetProcessorValue(Scheme, &GUID_PROCESSOR_THROTTLE_MAXIMUM, ACValue, DCValue);}DWORD SetProcessorThrottleMax1(LPCGUID Scheme, DWORD ACValue, DWORD DCValue){return SetProcessorValue(Scheme, &GUID_PROCESSOR_THROTTLE_MAXIMUM_1, ACValue, DCValue);}DWORD SetProcessorAllowThrottling(LPCGUID Scheme, DWORD ACValue, DWORD DCValue){return SetProcessorValue(Scheme, &GUID_PROCESSOR_ALLOW_THROTTLING, ACValue, DCValue);}DWORD SetProcessorPerfBoostPolicy(LPCGUID Scheme, DWORD ACValue, DWORD DCValue){return SetProcessorValue(Scheme, &GUID_PROCESSOR_PERF_BOOST_POLICY, ACValue, DCValue);}DWORD SetProcessorPerfBoostMode(LPCGUID Scheme, DWORD ACValue, DWORD DCValue){return SetProcessorValue(Scheme, &GUID_PROCESSOR_PERF_BOOST_MODE, ACValue, DCValue);}DWORD SetSystemButtonValue(LPCGUID Scheme, LPCGUID Setting, DWORD AcValue, DWORD DcValue){return SetValue(Scheme, &GUID_SYSTEM_BUTTON_SUBGROUP, Setting, AcValue, DcValue);}DWORD SetPowerButtonAction(LPCGUID Scheme, DWORD ACValue, DWORD DCValue){return SetSystemButtonValue(Scheme, &GUID_POWERBUTTON_ACTION, ACValue, DCValue);}DWORD SetSleepButtonAction(LPCGUID Scheme, DWORD ACValue, DWORD DCValue){return SetSystemButtonValue(Scheme, &GUID_SLEEPBUTTON_ACTION, ACValue, DCValue);}DWORD SetLidCloseAction(LPCGUID Scheme, DWORD ACValue, DWORD DCValue){return SetSystemButtonValue(Scheme, &GUID_LIDCLOSE_ACTION, ACValue, DCValue);}
}
main.cpp
#include <locale.h>
#include <tchar.h>
#include "Win32Utils/CPowerCfgUtils.h"
int _tmain(int argc, LPCTSTR argv[])
{setlocale(LC_ALL, "");// 显示处理器性能提升模式CPowerCfgUtils::SetAttributes(&GUID_PROCESSOR_SETTINGS_SUBGROUP, &GUID_PROCESSOR_PERF_BOOST_MODE, POWER_ATTRIBUTE_SHOW_AOAC);// 处理器性能提升模式 0: 已禁用, 1: 已启用, 2: 高性能, 3: 高效率 4: 高性能高效率, 5: 积极且有保障, 6: 高效, 积极且有保障CPowerCfgUtils::SetProcessorPerfBoostMode(nullptr, 1, 1);// 设置当前活动电源计划CPowerCfgUtils::SetActiveScheme(nullptr);return 0;
}

相关文章:
Win32 C++ 电源计划操作
CPowerCfgUtils.h #pragma once#include <Windows.h> #include <powrprof.h>// https://learn.microsoft.com/zh-cn/windows/win32/api/powrprof/?sourcerecommendations//节能 //DEFINE_GUID(GUID_MAX_POWER_SAVINGS, 0xA1841308, 0x3541, 0x4FAB, 0xBC, 0x81, …...
PH热榜 | 2025-03-01
1. Helix 标语:从想法到原型只需3分钟 介绍:Helix可以在几分钟内将你的创业想法变成一个准备好接受投资的原型。你可以创建功能齐全、可点击的用户界面和用户体验设计,完全不需要任何设计技能。 产品网站: 立即访问 Product H…...
如何管理路由器
一、管理路由器的必要性 1、需要修改拨号上网的密码。 2、需要修改WIFI的SSID名字和密码。 3、设置DHCP协议信息。 4、设置IP地址的过滤规则。 5、给某个设备连接设置网络限速。 二、常见的方式 (一)web网页方式 1、计算机用双绞线或者WIFI的方式连接路由器。 2、在计算机中打开…...
deepseek使用记录17
基于《资本论》方法论的"35岁危机"系统分析 一、劳动力商品化与价值贬值的双重绞索 马克思揭示:“劳动力作为商品,其价值由生产劳动力所需的社会必要劳动时间决定”。在数字资本主义时代,这一规律呈现特殊形态: 技能折…...
【Java】I/O 流篇 —— 打印流与压缩流
目录 打印流概述字节打印流构造方法成员方法代码示例 字符打印流构造方法成员方法代码示例 打印流的应用场景 解压缩/压缩流解压缩流压缩流 Commons-io 工具包概述Commons-io 使用步骤Commons-io 常见方法代码示例 Hutool 工具包 打印流 概述 分类:打印流一般是指…...
Tomcat基础知识及其配置
1.Tomcat简介 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。 Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服…...
【LeetCode】739.每日温度
目录 题目描述输入输出示例及数据范围思路:单调栈C 实现 题目描述 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这…...
测试金蝶云的OpenAPI
如何使用Postman测试K3Cloud的OpenAPI 1. 引言 在本篇博客中,我将带你逐步了解如何使用Postman测试和使用K3Cloud的OpenAPI。内容包括下载所需的SDK文件、配置文件、API调用及测试等步骤。让我们开始吧! 2. 下载所需的SDK文件 2.1 获取SDK 首先&…...
SID History 域维权
SID History 域林攻击:域林攻击详解-CSDN博客 SID History 根据微软的描述,SID History 属性是微软对域内用户进行域迁移的支持而创建的。每当对象从一个域移动到另一个域时,都会创建一个新的 SID,并且该新 SID 将成为 objectSI…...
unittest自动化测试框架详解
一、Unittest简介 Unittest是python内置的一个单元测试框架,主要用于自动化测试用例的开发与执行 简单的使用如下 import unittestclass TestStringMethods(unittest.TestCase):def setUp(self):print("test start")def test_upper(self):self.assertE…...
ORM Bee V2.5.2.x 发布,支持 CQRS; sql 性能分析;更新 MongoDB ORM分片
Bee, 一个具有分片功能的 ORM 框架. Bee Hibernate/MyBatis plus Sharding JDBC Jpa Spring data GraphQL App ORM (Android, 鸿蒙) 小巧玲珑!仅 940K, 还不到 1M, 但却是功能强大! V2.5.2 (2025・LTS 版) 开发中... **2.5.2.1 新年 ** 支持 Mong…...
关于C/C++的输入和输出
目录 一、C语言中的scanf 有关scanf()的例子 二、C语言中的printf 有关printf()的例子 三、C中的cin、cout 四、字符的输入 1、cin.get() 2、cin.get() 3、cin.getline() 4、getline() 5、getchar() 五、string类型字符串长度 1、length() 2、size() 一、C语言中…...
1-kafka单机环境搭建
本文介绍kafka单机环境的搭建及可视化环境配置,虽然没有java代码,但是麻雀虽小五脏俱全,让大家在整体感官上对kafka有个认识。在文章的最后,我介绍了几个重要的配置参数,供大家参考。 0、环境 kafka:2.8.…...
Qt常用控件之旋钮QDial
旋钮QDial QDial 表示一个旋钮控件。 1. QDial属性 属性说明value当前数值。minimum最小值。maximum最大值。singleStep按下方向键时改变的步长。pageStep按下 pageUp/pageDown 的时候改变的步长。sliderPosition界面上旋钮显示的初始位置。tracking外观是否会跟踪数值变化&…...
基于DeepSeek,构建个人本地RAG知识库
经过一段使用DeepSeek后,感觉使用体验和ChatGPT基本差不多,回答问题的质量略有提升,因DeepSeek已开源,它的模型、模型参数权重从网上都可以下载到,所以可以基于开源的模型,在本地构建一个自己的知识库&…...
散户如何实现自动化交易下单——篇1:体系介绍与获取同花顺资金账户和持仓信息
一、为什么要实现自动化交易 在瞬息万变的金融市场中,越来越多的散户投资者开始尝试构建自己的交易策略:有人通过技术指标捕捉趋势突破,有人利用基本面分析挖掘低估标的,还有人设计出复杂的网格交易或均值回归模型。然而&a…...
轻松实现语音生成:GPT-SoVITS V2整合包的远程访问操作详解
文章目录 前言1.GPT-SoVITS V2下载2.本地运行GPT-SoVITS V23.简单使用演示4.安装内网穿透工具4.1 创建远程连接公网地址 5. 固定远程访问公网地址 前言 今天要给大家安利一个绝对能让你大呼过瘾的声音黑科技——GPT-SoVITS!这款由花儿不哭大佬精心打造的语音克隆神…...
【微知】git 如何修改某个tag名字?如何根据某个commit创建一个tag?
背景 某些时候git tag名字搞错了,需要修改,如何处理? 删除某个tag git tag -d oldtagname修改某个tag名字 创建新的,删除老的 git tag newtagname git tag -d oldtagname基于某个老的commit创建一个tag git tag V0.1.0 xxxc…...
Java中使用for和Iterator遍历List集合的区别
在 Java 中,遍历 List 可以使用 for 循环 和 Iterator 两种方式。它们各有优缺点,适用于不同的场景。以下是它们的区别和适用场景: 1. 语法和使用方式 for 循环: 使用索引遍历列表。 示例: List<String> li…...
删除有序链表中重复的元素-II(C++)
目录 问题描述 示例1 示例2 解题思路 代码实现 代码解析 1. 初始化 2. 遍历链表 总结 问题描述 给出一个升序排序的链表,删除链表中的所有重复出现的元素,只保留原链表中只出现一次的元素。 例如: 给出的链表为1→2→3→3→4→4→51…...
SFP(Small Form-factor Pllugable)详解
1. SFP的定义 SFP(Small Form-factor Pluggable)是一种小型化热插拔光模块/电模块,广泛用于网络设备(如交换机、路由器、网卡等)中,作为物理层接口模块。其设计遵循由多源协议(MSA)…...
【0011】HTML其他文本格式化标签详解(em标签、strong标签、b标签、i标签、sup标签、sub标签......)
如果你觉得我的文章写的不错,请关注我哟,请点赞、评论,收藏此文章,谢谢! 本文内容体系结构如下: 本文旨在深入探讨HTML中其他的文本格式化标签,主要有<em> 标签、<strong> 标签、…...
在分布式系统中,解决因锁持有者故障导致锁无法释放的问题
分布式锁的自动释放与容错机制 在分布式系统中,如果锁的持有者因故障无法主动释放锁,可能会导致死锁或业务阻塞。为了提高系统的稳定性和可用性,需要结合自动释放机制和容错设计。以下是几种关键解决方案: 1. 设置锁的自动过期时…...
结构型模式--组合模式
概念 组合人模式是结构型设计模式的一种,主要是用于解决代码中出现类像树一样进行组合而出现的组合结构的相关操作问题。使其树中的任意一个节点(无论是子节点还是父节点)都可以使用同一套接口进行操作。 使用场景 1、如果希望我们对象组合…...
时间复杂度练习题(6道题,C语言)
// 第一道int x 90;int y 100;while (y>0)if(x>100){x x -10;y--;}else x; // 第二道for (int i 0;i<n;i){for (int j 0;j<m;j){a[i][j] 0;}}// 第三道s 0;for(int i 1;i<n;i){for(int j 1;j<n;j){s B[i][j];}}sum s; // 第四道i 1;while (i<…...
第十四届蓝桥杯大赛软件赛国赛C/C++大学C组
A 【跑步计划——日期问题】-CSDN博客 B 【残缺的数字】-CSDN博客 C 题目 代码 #include <bits/stdc.h> using namespace std;void change(int &x) {int sum 0, t x;while(t){sum t % 10;t / 10;}x - sum; } int main() {int n;cin >> n;int ans 0;…...
【WPF】绑定报错:双向绑定需要 Path 或 XPath
背景 最开始使用的是 TextBlock: <ItemsControl ItemsSource"{Binding CameraList}"><ItemsControl.ItemsPanel><ItemsPanelTemplate><StackPanel Orientation"Horizontal"/></ItemsPanelTemplate></ItemsControl.Item…...
谈谈 ES 6.8 到 7.10 的功能变迁(6)- 其他
这是 ES 7.10 相较于 ES 6.8 新增内容的最后一篇,主要涉及算分方法和同义词加载的部分。 自定义算分:script_score 2.0 Elasticsearch 7.0 引入了新一代的函数分数功能,称为 script_score 查询。这一新功能提供了一种更简单、更灵活的方式来…...
huggingface下载模型到本地缓存环境变量配置详解
1.安装huggingface-cli 命令行工具,进行模型文件下载 pip install -U huggingface_hub huggingface-cli --help 帮助命令 2.从huggingface下载模型方法 方法1: git clone 下载模型 方法2:huggingface-cli 工具下载模型 方法3&…...
u-boot的环境变量设置、保存、汇总与说明【同时对u-boot的环境变量`bootcmd`和网络启动(run netboot)方式进行了详细解释】
前言 在 U-Boot 中,环境变量用于配置系统的启动参数和行为。是否能正确理解和设置u-boot中的环境变量是启动Linux系统的关键,所以有必要认真学习了解下各环境变量的意思和作用。 最好的学习材料就是实际的例子,所以本篇博文把我遇到过的各个…...
