
简介一份面向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 子键与 ExtendedSubCommandsKeyWindows 的上下文菜单注册表结构其实只有三层顶层是要挂载的“对象范围”例如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,0Position菜单位置填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那上述卸载脚本不会删掉它。遇到这种情况可以在注册表编辑器里用 CtrlF 搜索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 右键菜单上少走几步弯路把电源切换这件事彻底变成点鼠标的事。本文还有配套的精品资源点击获取