简介:一份面向Windows 11用户与开发者的可运行源码包,旨在通过注册表定制方式在桌面右键菜单中添加电源模式切换功能。资源包含注册表配置脚本、配套的HTML操作说明以及版本管理辅助文件,读者可根据系统当前电源计划替换对应的代码,实现平衡、高性能、节能、卓越性能等多种模式的一键切换。压缩包内共3个文件,以可执行脚本和网页说明为主,整体仅7KB,轻量便携。目前已有60人学习下载,适合希望提升系统个性化程度、追求操作效率的中级用户参考。借助这份源码,学习者不仅能获得可直接导入运行的注册表方案,还能理解右键菜单扩展与电源计划修改的实现逻辑,并掌握注册表备份、文件编码等关键注意事项,在此基础上进一步定制其他系统功能,享受开源共享带来的便利。
1. Win11 右键添电源模式:把系统设置里三层深的开关,挪到离鼠标最近的位置
如果你和我一样,经常在插电、用电池、跑渲染这几档状态之间来回切换,每次都要点开设置、进系统、进电源,再拖那个滑条,用不了几次就烦了。Win11 的电源模式入口藏得深,但底层逻辑一点都不神秘——它只是把一个电源方案(Power Scheme)的 GUID 写进了系统。我们完全可以往右键菜单里加一个“电源模式”级联菜单,点两下就能在“平衡 / 高性能 / 节能”之间切换。本文给出的是一套可直接照抄的可运行源码,由注册表脚本和powercfg命令组成,不装软件、不常驻后台、不留残余进程。
2. 原理与选型:为什么右键里的“电源模式”能变成可执行的电源计划
2.1 电源模式的底层是 GUID,不是设置应用里的“性能/节能”文字
Win11 设置里的“电源模式”是一个 UI 层概念,它背后仍然沿用 Windows 多年的电源方案(Power Scheme)结构。系统里每个电源方案都有一个唯一 GUID,当前激活的方案会显示在powercfg /list输出里,前面带星号。设置应用只是在几个固定的 GUID 之间切换,并给你一个滑条或单选按钮的视觉反馈。
C:\> powercfg /list 现有电源方案 (* Active) ----------------------------------- 电源方案 GUID: 381b4222-f694-41f0-9685-ff5bb260df2e (平衡) 电源方案 GUID: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c (高性能) 电源方案 GUID: a1841308-3541-4fab-bc81-f71556f20b4a (节能)表格里这 3 个 GUID 是最常见的默认方案,其中“平衡”方案几乎在所有机器上存在,“高性能”在绝大多数台式机和笔记本上也有,“节能”则不一定,部分 OEM 笔记本把它隐藏了。
| 显示名称 | GUID | 常见存在性 |
|---|---|---|
| 平衡 | 381b4222-f694-41f0-9685-ff5bb260df2e | 基本都有 |
| 高性能 | 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c | 台式机常见,部分笔记本被隐藏 |
| 节能 | a1841308-3541-4fab-bc81-f71556f20b4a | 笔记本常见,台式机可能没有 |
| 卓越性能 | e9a42b02-d5df-448d-aa00-03f79dead7bb | 需要命令解锁,初始不可见 |
理解了这层之后,右键菜单要做的就很简单:让一个菜单项去执行powercfg.exe /setactive <GUID>。整个过程不碰 Win11 设置应用,也不修改电源文件。这一点是整套方案的底气,也是我选择脚本而不是写一个托盘工具的原因。
2.2 右键菜单的三层注册表结构:shell 键、command 子键与 ExtendedSubCommandsKey
Windows 的上下文菜单注册表结构其实只有三层:顶层是要挂载的“对象范围”,例如Directory\Background(文件夹空白处)、*(所有文件)、Directory(文件夹本体);中间层是我们要新建的菜单名,例如PowerMode;最里层是shell动词和command子键。
对于“电源模式”这种带子项的菜单,关键参数是ExtendedSubCommandsKey。它的值是一个相对路径,告诉资源管理器去哪个键下找子命令。我用的是当前用户级注册表路径HKCU:\Software\Classes\Directory\Background\shell\PowerMode,子命令则放在同一个键下的shell\平衡模式、shell\高性能模式等位置。这样做的优点是不需要管理员权限,因为HKCU\Software\Classes是当前用户自己的上下文菜单注册区。
菜单项最常用到的值如下表:
| 注册表值 | 作用 | 说明 |
|---|---|---|
MUIVerb | 菜单显示文字 | 支持中文,但要求脚本编码正确 |
Icon | 菜单图标 | 指向 dll 或 exe 的资源 ID,如powercpl.dll,0 |
Position | 菜单位置 | 填Top通常排在较前,但 Win11 对第三方项仍会折叠 |
ExtendedSubCommandsKey | 子菜单来源 | 值为子命令所在键的路径 |
command子键的默认值 | 实际执行命令 | 必须是可执行命令或脚本 |
会踩坑的地方是command。它不是shell\PowerMode里的一个普通名称值,而是shell\PowerMode\shell\高性能模式\command这个子键的默认值。很多老教程写成给顶层键添加一个叫command的字符串值,结果就是右键菜单能显示但点了没反应,我在第 4 章会专门说这个。
2.3 为什么选 PowerShell 与 powercfg,而不是写一个 C# 右键扩展
最“正规”的 Win11 右键菜单扩展是 COM Shell Extension,用 C# 或 C++ 写一个实现了IExplorerCommand接口的 COM 组件。它能直接出现在 Win11 新版菜单的一级位置,也能自定义图标、灰度、多选状态。但代价是:要处理 COM 注册、CLSID、线程模型、资源文件,还有 32 位和 64 位 explorer 的兼容问题。为了一个切换电源模式的功能去维护一个 DLL,风险远大于收益。
常见做法是用注册表加powercfg命令,这是 Windows 系统自己预留的最轻量方案。脚本只在注册时运行一次,之后每次点击菜单只是启动一个隐藏的 PowerShell 进程去执行powercfg,没有常驻进程,也不占内存。卸载时删掉对应注册表分支即可。我用 PowerShell 写注册脚本,是因为它比.reg文件更容易做条件判断、动态读取电源方案列表,也比批处理更容易管理字符串和编码。
3. 可运行源码:把“电源模式”写进 Win11 右键菜单的完整脚本
3.1 注册脚本 Add-PowerModeMenu.ps1:一次执行,自动生成级联菜单
下面这段脚本保存为Add-PowerModeMenu.ps1,然后直接右键使用 PowerShell 运行即可。它只修改当前用户的注册表,不需要管理员权限。
# Add-PowerModeMenu.ps1 # 作用:向 Win11 / Win10 右键菜单添加“电源模式”级联菜单 # 适用:当前用户,不影响其他 Windows 账号 # 提示:保存脚本时请选择“UTF-8 with BOM”,避免中文乱码 $ErrorActionPreference = "Stop" # 顶层菜单键路径 $base = "HKCU:\Software\Classes\Directory\Background\shell\PowerMode" # 安装前先清理旧版本,避免残留子命令 Remove-Item -Path $base -Recurse -Force -ErrorAction SilentlyContinue # 创建顶层菜单 New-Item -Path $base -Force | Out-Null New-ItemProperty -Path $base -Name "MUIVerb" -Value "电源模式" -PropertyType String | Out-Null New-ItemProperty -Path $base -Name "Icon" -Value "powercpl.dll,0" -PropertyType String | Out-Null New-ItemProperty -Path $base -Name "Position" -Value "Top" -PropertyType String | Out-Null New-ItemProperty -Path $base -Name "ExtendedSubCommandsKey" -Value "Directory\Background\shell\PowerMode\shell" -PropertyType String | Out-Null # 定义子菜单项:显示名 + 电源方案 GUID $modes = [ordered]@{ "Balanced" = @{ Label = "平衡模式"; GUID = "381b4222-f694-41f0-9685-ff5bb260df2e" } "HighPerf" = @{ Label = "高性能模式"; GUID = "8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c" } "PowerSaver" = @{ Label = "节能模式"; GUID = "a1841308-3541-4fab-bc81-f71556f20b4a" } } foreach ($name in $modes.Keys) { # 子命令的完整路径:...\PowerMode\shell\Balanced $verbPath = Join-Path $base "shell\$name" $cmdPath = Join-Path $verbPath "command" New-Item -Path $cmdPath -Force | Out-Null New-ItemProperty -Path $verbPath -Name "MUIVerb" -Value $modes[$name].Label -PropertyType String | Out-Null # 用隐藏窗口执行 powercfg 切换,避免右键时弹出黑色控制台 $innerCmd = "powercfg.exe /setactive '$($modes[$name].GUID)'" $cmd = "powershell.exe -NoProfile -WindowStyle Hidden -Command `"$innerCmd`"" # command 子键的默认值才是实际执行命令 Set-Item -Path $cmdPath -Value $cmd } # 重启资源管理器,让菜单立即刷新;不想重启的直接注销再登录也行 Stop-Process -Name explorer -Force -ErrorAction SilentlyContinue Write-Host "[完成] 已添加。右键桌面空白处 -> 显示更多选项 -> 电源模式" -ForegroundColor Green脚本的逻辑分三段:先清理旧菜单,再创建顶层菜单,最后循环创建 3 个子命令。ExtendedSubCommandsKey是关键,它的值指向Directory\Background\shell\PowerMode\shell,也就是说子命令全部放在顶层键自己的shell分支下。这个结构是 Windows 级联菜单的标准写法,在 Win11 和 Win10 上行为一致。
参数说明重点看两个地方。New-ItemProperty写入的是命名值:MUIVerb是菜单文字,Icon是图标资源,Position控制在经典菜单里的排序。Set-Item -Path $cmdPath -Value $cmd写得比较隐蔽,它设置的是command子键的“默认值”。如果你之前在旧教程里看过command作为普通字符串值的写法,那是不完整的,它只会让资源管理器创建一个空壳菜单。
命令字符串里我用了两层引号:外层把powercfg命令传给powershell.exe -Command,内层用单引号包住 GUID。外层双引号在 PowerShell 里需要用反引号转义,这是本脚本少数容易写错的地方。
3.2 卸载脚本 Remove-PowerModeMenu.ps1:改回原样
删菜单比加菜单更简单。只要把顶层键整体删掉,子命令也一并消失。
# Remove-PowerModeMenu.ps1 # 作用:移除右键菜单中的“电源模式”级联菜单 # 适用:当前用户 $base = "HKCU:\Software\Classes\Directory\Background\shell\PowerMode" if (Test-Path $base) { Remove-Item -Path $base -Recurse -Force Write-Host "[完成] 电源模式菜单已移除。" -ForegroundColor Green } else { Write-Host "[提示] 没有找到电源模式菜单,无需卸载。" -ForegroundColor Yellow } # 同样重启资源管理器刷新菜单 Stop-Process -Name explorer -Force -ErrorAction SilentlyContinue这里删除的是HKCU:\Software\Classes\Directory\Background\shell\PowerMode整个分支,包括里面的shell\...\command子键。因为所有子命令都挂在它下面,所以不存在“菜单还在但子命令没了”的状态。卸载脚本不需要逐条清点。
有一点要提醒:如果你之前通过其他工具或手改注册表,把菜单加在了HKLM\SOFTWARE\Classes\Directory\Background\shell\PowerMode,那上述卸载脚本不会删掉它。遇到这种情况,可以在注册表编辑器里用 Ctrl+F 搜索PowerMode,再看它位于 HKCU 还是 HKLM,手动处理。
3.3 执行时机与验证方法:右键“显示更多选项”里找到电源模式
执行脚本后,桌面或文件资源管理器空白处右键,先点 Win11 的“显示更多选项”,再找“电源模式”。如果你看到的是经典版右键菜单,直接就能看到。
验证切换是否真的生效,我用下面这条命令:
powercfg /getactivescheme输出里会显示当前激活的电源方案名称和 GUID。例如切到“高性能模式”后,它应该显示8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c。这个命令不需要管理员权限,也适合写进自己的巡检脚本里。
如果右键菜单没有出现,先别急着怀疑脚本,多半是资源管理器没有刷新。脚本末尾虽然重启了 explorer,但如果你运行脚本的环境比较特殊,例如使用了“在单独的进程中打开文件夹窗口”,个别窗口进程不一定被结束。手动按一下Win + R输入ie4uinit.exe -show,或者注销重登,一般就会出来。
4. 避坑:右键菜单不显示、点击没反应、乱码与 GUID 失效的排查记录
4.1 第一坑:Win11 把第三方菜单藏进“显示更多选项”,不是脚本失败
现象:右键桌面空白处,菜单里看不到“电源模式”,于是怀疑脚本没生效。
原因:Win11 的新版右键菜单默认只显示系统自带的那几个核心项和少数通过 COM Shell Extension 注册的项。像我们用注册表shell键添加的菜单,在 Win11 下默认会被折叠到“显示更多选项”里。这不是脚本失败,而是系统刻意拉高了第三方菜单的展示门槛。
解决:先点右键菜单底部的“显示更多选项”,或者按Shift + F10打开经典菜单,再去找“电源模式”。如果你确实希望这个菜单出现在新版右键第一屏,用注册表方式做不到,只能换成 COM 扩展方案;而那种方式的维护成本明显更高。另一个变通办法是把 Win11 右键菜单整体恢复成经典版,用下面的注册表命令可以让资源管理器跳过新版菜单:
reg.exe add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /ve /t REG_SZ /d "" /f想恢复原状就删掉这个键:
reg.exe delete "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}" /f这个恢复经典菜单的做法系统级生效,会让整台机器的文件右键都回到旧样式,而且后续 Windows 更新可能覆盖该行为,适合个人机器,不建议在公司域控环境里用。
4.2 第二坑:点击后无反馈,也没切换成功
现象:“电源模式”能显示,但选了“高性能模式”之后,电脑没有任何反应,用powercfg /getactivescheme查看发现方案没变。
原因:最常见的是注册表结构写错——把command写成了命名值,而不是command子键的默认值。资源管理器能读到菜单定义,但执行时找不到可变命令。
解决:打开注册表编辑器,定位到:
HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell\PowerMode\shell\HighPerf\command检查这个键的“默认值”是否是powershell.exe -NoProfile -WindowStyle Hidden -Command "powercfg.exe /setactive '8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c'"。如果是空,说明脚本执行那一步出了问题。
另一个容易忽略的原因是:我脚本里用了-WindowStyle Hidden,所以切换失败时你看不到任何报错窗口。排查阶段可以临时把Hidden去掉,改成正常窗口运行:
$cmd = "powershell.exe -NoProfile -Command `"powercfg.exe /setactive '$guid'`""这样点击后会出现一个黑窗口,若powercfg报错,你能直接看到错误文本。排查完再改回隐藏模式。
4.3 第三坑:菜单中文变乱码
现象:右键菜单里出现“電婧模式”“鐢垫簮妯″紡”之类乱码,或者干脆变成空字符串。
原因:PowerShell 5.1 在 Windows 里默认按 ANSI 编码读取脚本文件。如果你把.ps1保存成 UTF-8 无 BOM,中文字符串在内存里已经被误读了一次,写进注册表的MUIVerb自然就是乱码。
解决:用编辑器把脚本保存成“UTF-8 with BOM”。VS Code 里点右下角编码按钮,选择“通过编码保存”,选“UTF-8 with BOM”;记事本另存为时选“UTF-8”其实带 BOM,也可以用。如果已经写入了乱码菜单,先运行卸载脚本,再用正确编码重新执行注册脚本。
如果无论如何都处理不好编码,也可以退一步,把MUIVerb改成英文Power Mode,图标照样显示,功能性不受影响。毕竟是给技术用户看的工具菜单,英文也不是问题。
4.4 第四坑:目标机器根本没有那个电源方案
现象:菜单三项都在,但点“节能模式”没反应,手动执行powercfg /setactive a1841308-3541-4fab-bc81-f71556f20b4a报错“拒绝访问”或“无效的 GUID”。
原因:节能模式并不是所有 Windows 机器都有。部分台式机、工作站上,OEM 或企业策略会隐藏甚至物理移除默认的节能方案。powercfg /list看不到这个 GUID,/setactive自然不认识它。
解决:写脚本时不要拍脑袋写死 3 个 GUID。先执行:
powercfg /list看看目标机器实际存在哪些方案,再决定菜单里放哪几项。尤其“卓越性能”方案,几乎所有机器默认都不显示,需要先执行一次解锁:
powercfg -duplicatescheme e9a42b02-d5df-448d-aa00-03f79dead7bb这个命令会创建一个新的卓越性能方案并返回一个新的 GUID,要用那个新 GUID 去激活。我在第 5 章会给出一个动态扫描方案的版本,能直接避开这个坑。
4.5 第五坑:卸载后菜单又回来了
现象:卸载脚本显示“已移除”,但过一会儿重启资源管理器后,“电源模式”又出现在“显示更多选项”里。
原因:多半是之前有过另一套注册脚本,它写到了不同的注册表位置。例如第一次用管理员权限写进了HKLM\SOFTWARE\Classes\Directory\Background\shell\PowerMode,卸载只删了 HKCU 的那一份;或者主菜单在 HKCU,子命令却写在HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore下。
解决:注册表编辑器里搜索PowerMode,从计算机根节点全局查找,能同时命中 HKCU 和 HKLM。把两个位置的PowerMode键都删掉,再看 CommandStore 里有没有PowerMode.Balanced这类带前缀的子键,有就一并删除。我的卸载脚本是基于“所有子命令都挂在顶层键下”的设计,能保证单一位置安装后清理干净;但如果混用了不同工具,就需要按这个步骤手动排查。
5. 进阶:让菜单自己识别可用电源方案,并用两行命令验证切换是否真实生效
5.1 动态注册所有存在的电源方案,而不是写死三个 GUID
写死 GUID 在你自己机器上没什么问题,但放到同事或客户的笔记本上,很可能会遇到“高性能不存在”“节能被隐藏”的情况。我后来把注册逻辑改成先扫powercfg /list,再根据输出动态创建子命令。
# 动态扫描当前机器所有电源方案 $list = powercfg /list $schemes = $list | ForEach-Object { if ($_ -match 'GUID: ([0-9a-fA-F-]+)\s*\(([^)]+)\)') { [PSCustomObject]@{ GUID = $Matches[1] Name = $Matches[2].Trim() } } } # 这里只展示扫描结果,实际使用时循环每个方案去创建注册表子命令 $schemes | Format-Table -AutoSize扫描结果里可能会有重复的“平衡”,因为部分机器存在多个副本;如果你的脚本要直接使用,建议先按名称去重,再决定要哪几个。注册子命令的逻辑和前面一样,只是把固定哈希表换成了$schemes数组。这样做的好处是:换到任何一台机器,菜单都能反映它真实的电源方案。
5.2 验证菜单生效的完整步骤,以及我最后的习惯
菜单装好后,我一般会按这个顺序验证,而不是只看菜单是否显示:
- 右键“显示更多选项”。
- 点“电源模式”->“高性能模式”。
- 立即执行
powercfg /getactivescheme,确认输出中的 GUID 从平衡变成高性能。 - 点一次“节能模式”,再次执行上面命令,确认能切回来。
如果只验证到“菜单能打开”,其实还漏了最关键的“命令真的被执行了”这一步。很多人装完右键菜单后过几个月才发现,其中某一个子命令的 GUID 在系统更新后失效了。我的习惯是把powercfg /getactivescheme的检查命令一起写在部署记录里,每次重装系统或换电脑后顺手跑一遍。
这套东西我前后调整过四次,最大的教训就是不要替用户假设“一定存在高性能”。图纸上画得再漂亮,到了实际机器上,还是powercfg /list说了算。希望这份脚本和排查记录能帮你在 Win11 右键菜单上少走几步弯路,把电源切换这件事彻底变成点鼠标的事。
本文还有配套的精品资源,点击获取