开机自启动,自动识别游戏进程并切换 Windows 电源计划,通过限制CPU频率控制温度
- 仅适用于 Windows 系统
- 每 5 秒 扫描一次当前运行的进程
- 检测到游戏进程 → 自动切换电源计划为 "3.1Ghz"
- 游戏退出后 60 秒 无游戏 → 自动切回 "平衡"
- 完全静默运行,无窗口,不打扰
- 开机自动启动
原版 Windows 默认隐藏"最大处理器频率"选项,先解锁它:
- 以管理员身份右键运行
unlock-max-frequency.bat,如果你新创建的电源计划也叫3.1Ghz,那么你可以直接跳过所有步骤,直接在game_list.json里面添加你的游戏进程即可,一般来说,游戏的进程名是游戏安装目录里面启动游戏的那个exe文件名去掉exe后缀,例如"cs2.exe"应在game_list.json文件中添加"cs2" - 打开 控制面板 → 电源选项 → 创建电源计划,命名为 "3.1Ghz"(也可以命名为任何你想要的名字)
- 进入该计划的 更改高级电源设置 → 处理器电源管理 → 最大处理器频率,设为 3100 MHz 下方是修改电源计划配置文件中的名称的方法,修改之后要编译才能顺利启动哦
验证:在命令行运行
powercfg /LIST,确认同时存在"(平衡)"和"(3.1Ghz)":电源方案 GUID: 381b4222-... (平衡) 电源方案 GUID: 3f594812-... (3.1Ghz)如果你的电源计划叫其他名字(比如"高性能"),编辑
appsettings.json改为对应名称即可(程序会自动将名称解析为 GUID,无需你手动查找):{ "PowerPlanBalanced": "平衡", // ← 改成你的默认计划名 "PowerPlanPerformance": "3.1Ghz" // ← 改成你的游戏计划名 }
编辑项目根目录下的 game_list.json,加入你的游戏进程名:
{
"GameProcesses": [
"cs2",
"Expedition33_Steam"
]
}
⚠️ 进程名必须和任务管理器里看到的一模一样!如何确认进程名:
- 打开游戏
- 按
Ctrl+Shift+Esc打开任务管理器 → "详细信息" 选项卡- 找到游戏进程的"名称"列,比如
Expedition33_Steam.exe- 填这个名字(带不带
.exe都可以)
双击运行 build.bat,或在终端执行:
build.bat需要 .NET 8.0 SDK。如未安装:
winget install Microsoft.DotNet.SDK.8
编译成功后,publish 目录下会出现 AutoSwitchBattrayPlan.exe 和两个配置文件的副本。
双击 publish\AutoSwitchBattrayPlan.exe,它会在后台静默启动。
验证方式:
- 打开任务管理器 → "详细信息",搜索
AutoSwitchBattrayPlan,看到进程说明正在运行 - 打开你的游戏 → 等 5 秒 → 去"控制面板 → 电源选项"确认计划变成了"3.1Ghz"
- 关闭游戏 → 等 60 秒 → 确认计划自动切回"平衡"
💡 测试时可以在
game_list.json里临时加上notepad.exe,打开记事本来验证。
以管理员身份打开 PowerShell,运行:
$regPath = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run"
$exePath = "d:\Zht20241287\AutoSwitchBattrayPlan\publish\AutoSwitchBattrayPlan.exe"
Set-ItemProperty -Path $regPath -Name "AutoSwitchBattrayPlan" -Value $exePath
⚠️ 注意:如果你的项目放在其他路径,请把$exePath改成对应的绝对路径。
重启电脑后程序会自动运行。
Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "AutoSwitchBattrayPlan"| 配置项 | 默认值 | 说明 |
|---|---|---|
PowerPlanBalanced |
"平衡" |
默认电源计划名称 |
PowerPlanPerformance |
"3.1Ghz" |
游戏时切换到的电源计划名称 |
PollIntervalSeconds |
5 |
进程扫描间隔(秒) |
SwitchBackDelaySeconds |
60 |
游戏退出后延迟切回的秒数 |
| 配置项 | 说明 |
|---|---|
GameProcesses |
字符串数组,每个元素是一个游戏进程名 |
Q: 改了游戏列表后需要重新编译吗?
A: 如果程序没有在运行,直接把 game_list.json 复制到 publish\ 目录覆盖即可。如果程序正在运行,改完后重启它就行。
Q: 切换失败?
A: 运行 powercfg /LIST 确认电源计划名称拼写是否和 appsettings.json 里完全一致。
Q: 怎么确认程序在正常运行?
A: 任务管理器里搜索 AutoSwitchBattrayPlan,看到进程就说明在运行。
Q: 想要日志文件?
A: 用命令行启动可以重定向日志:
Start-Process ".\publish\AutoSwitchBattrayPlan.exe" -RedirectStandardOutput "stdout.log"AutoSwitchBattrayPlan/
├── Program.cs # 入口,Host 构建
├── Config.cs # 配置模型
├── ProcessScanner.cs # 进程扫描(忽略大小写匹配)
├── PowerPlanSwitcher.cs # 电源计划切换(名称→GUID 解析)
├── PowerPlanWorker.cs # 核心逻辑(扫描→判断→切换→等待→切回)
├── appsettings.json # 主配置
├── game_list.json # 🎮 游戏进程名单(编辑这个!)
├── build.bat # 一键编译
├── README.md # 本文件
└── publish/ # 编译输出(运行 exe 的目录)