[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-78758":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":25,"hasPages":23,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":30,"readmeContent":31,"aiSummary":32,"trendingCount":16,"starSnapshotCount":16,"syncStatus":14,"lastSyncTime":33,"discoverSource":34},78758,"ContextMenuMgr","PLFJY\u002FContextMenuMgr","PLFJY","A Windows context menu management tool with new menu monitoring","https:\u002F\u002Fwww.bilibili.com\u002Fvideo\u002FBV1VU5q6KEQr",null,"C#",2431,32,2,21,0,114,294,1033,342,106.56,"GNU General Public License v3.0",false,"main",true,[27,28,29],"context-menu","system-tools","windows","2026-06-12 04:01:23","\u003Cp align=\"center\">\n    \u003Cimg src=\".\u002FContextMenuMgr.Frontend\u002FAssets\u002FAppIcon.png\" style=\"height: 100px; width: 100px\" \u002F>\n\u003C\u002Fp>\n\u003Ch1 align=\"center\">\n  \u003Cspan>Context Menu Manager Plus\u003C\u002Fspan>\n\u003C\u002Fh1>\n\u003Cp align=\"center\">\n  \u003Cspan align=\"center\">Context Menu Manager Plus 是一个强大的实用程序，它可帮助您管理 Windows 上的右键菜单，并避免第三方向你的右键菜单里塞屎。\u003C\u002Fspan>\n\u003C\u002Fp>\n\n[English Version](.\u002FREADME.en.md)\n\n> [!WARNING]\n> 本项目的相当一部分代码由 AI 辅助生成，并经过持续的人工作业、联调和重构，但它仍然可能存在遗漏、边界情况处理不足或行为与预期不完全一致的问题。\n> 如果你在使用过程中发现 Bug、兼容性问题、异常行为或文档缺失，欢迎积极提交 Issue。最好附上复现步骤、日志、截图和系统版本信息，这会非常有帮助。\n\n## 项目简介\n\n`Context Menu Manager Plus` 是一个面向 Windows 的右键菜单管理工具，重点不是“普通开关器”，而是：\n\n- 检测新增右键菜单项\n- 先拦截并默认禁用\n- 再交给用户审核\n- 最后由用户手动决定是否放行\n\n项目基于：\n\n- `.NET 10`\n- `WPF`\n- `WPF-UI`\n- `Named Pipe IPC`\n- `Windows Service`\n- 原生 Win32 托盘宿主\n\n## 核心特色\n\n### 先拦截，再审核\n\n这是本项目最重要的设计目标：\n\n- 新的右键菜单项被检测到时，不是先让它直接生效\n- 后端会先把它拦截为禁用状态\n- 然后放入“待审核”队列\n- 用户再手动选择：\n  - `允许`：启用该菜单项\n  - `保持禁用`：保留条目，但维持禁用\n  - `移除`：删除该条目，或从审核列表中移除\n\n这也是它和一般右键菜单管理器最大的不同。\n\n### 后端主导架构\n\n项目采用**后端主导**模型：\n\n- `ContextMenuManagerPlus.Service.exe`\n  - 真正的核心控制器\n  - 负责监控、审核、状态库、IPC、服务生命周期\n- `ContextMenuManagerPlus.TrayHost.exe`\n  - 独立的每用户托盘宿主\n  - 负责托盘图标、托盘菜单、系统通知、拉起前端\n- `ContextMenuManagerPlus.exe`\n  - 纯前端 UI\n  - 按需打开\n  - 关闭窗口即退出\n\ntray 作为独立的会话侧宿主存在，前端只负责 UI。\n\n## 功能\n\n### 菜单项管理\n\n- 按分类浏览右键菜单项\n  - 文件\n  - 所有对象\n  - 文件夹\n  - 目录\n  - 目录背景\n  - 桌面背景\n  - 磁盘分区\n  - 库\n  - 此电脑\n  - 回收站\n- 启用 \u002F 禁用右键菜单项\n- 删除菜单项\n- 撤销删除\n- 永久删除删除备份\n- 搜索与筛选\n- 一部分名称、图标、命令文本、CLSID 元数据解析\n\n### 审核队列\n\n- 新增项先进入待审核\n- 待审核页支持：\n  - 允许\n  - 保持禁用\n  - 移除\n- 审核页可聚合同一逻辑项的多个分类来源\n- 新增待审核项时：\n  - 后端广播事件\n  - tray host 弹系统通知\n  - 点击通知会拉起前端并跳转到审核页\n\n### 外部变化检测\n\n外部变化检测重点保留：\n\n- 外部新增\n- 守护离线期间的外部开关变化\n\n### 文件类型与规则页\n\n- 文件类型页\n  - 快捷方式\n  - UWP 快捷方式\n  - 可执行文件\n  - 自定义扩展名\n  - 感知类型\n  - 目录类型\n  - 未知类型\n- 其他规则页\n  - 增强菜单\n  - 详细编辑\n  - 自定义注册表路径\n\n### 设置页\n\n- 语言切换\n  - 跟随系统\n  - 简体中文\n  - English (United States)\n- 主题切换\n  - 跟随系统\n  - 浅色\n  - 深色\n- 日志等级\n- 随 Windows 启动\n- 安装 \u002F 修复服务\n- 卸载服务\n- 重启资源管理器\n- 打开日志目录 \u002F 状态库目录 \u002F 配置目录\n- 注册表保护增强开关\n\n## 架构\n\n### 1. Backend Service\n\n项目中的 backend 是真正的主控层：\n\n- 项目：`ContextMenuMgr.Backend`\n- 对外可执行文件：`ContextMenuManagerPlus.Service.exe`\n\n职责：\n\n- 扫描并解析右键菜单相关注册表项\n- 保存和合并本地状态库\n- 执行启用 \u002F 禁用 \u002F 删除 \u002F 恢复 \u002F 审核决策\n- 通过 Named Pipe 对外提供 IPC\n- 在合适时机尝试拉起 tray host\n\n### 2. Tray Host\n\n项目：`ContextMenuMgr.TrayHost`  \n对外可执行文件：`ContextMenuManagerPlus.TrayHost.exe`\n\n职责保持很薄：\n\n- 托盘图标\n- 托盘菜单\n- 系统通知\n- 打开前端主界面\n- 打开审核页\n- 请求后端退出\n\nTray host 使用**原生 Win32 托盘实现**。\n\n### 3. Frontend\n\n项目：`ContextMenuMgr.Frontend`  \n对外可执行文件：`ContextMenuManagerPlus.exe`\n\n职责：\n\n- 展示主界面\n- 展示审核页\n- 展示规则与设置\n- 通过 Named Pipe 与 backend 通信\n- 通过独立控制管道与 tray host \u002F frontend 单实例逻辑协作\n\n前端是 UI-only：\n\n- 关闭窗口 = 退出前端进程\n- 不负责托盘\n- 不保留后台常驻前端进程\n\n### 4. Shared Contracts\n\n项目：`ContextMenuMgr.Contracts`\n\n职责：\n\n- IPC 请求 \u002F 响应模型\n- 通知类型\n- 前端与 tray host 控制命令\n- 共享常量和协议定义\n\n## IPC 与进程协作\n\n### Backend Pipe\n\n主要通过 `Named Pipe` 做 JSON 请求\u002F响应通信，用于：\n\n- 获取快照\n- 修改菜单项状态\n- 执行审核决策\n- 获取 \u002F 设置保护开关\n- 请求 backend 尝试拉起 tray host\n- 请求 backend 正常关闭\n\n### Frontend Control Pipe\n\n前端有自己的控制通道，用于：\n\n- 单实例激活\n- 打开主窗口\n- 跳转到审核页\n- 按 id 聚焦审核项\n- 正常关闭前端\n\n### TrayHost Control Pipe\n\ntray host 也有自己的控制通道，用于：\n\n- 退出 tray host\n- 刷新 tray 本地化文案\n\n## 主要注册表范围\n\n重点处理以下范围：\n\n- `HKEY_CLASSES_ROOT\\*\\shell`\n- `HKEY_CLASSES_ROOT\\*\\shellex\\ContextMenuHandlers`\n- `HKEY_CLASSES_ROOT\\Directory\\shell`\n- `HKEY_CLASSES_ROOT\\Directory\\shellex\\ContextMenuHandlers`\n- `HKEY_CLASSES_ROOT\\Directory\\Background\\shell`\n- `HKEY_CLASSES_ROOT\\Directory\\Background\\shellex\\ContextMenuHandlers`\n- `CLSID`\n- `PackagedCom`\n- 各类文件类型、扩展名、感知类型、目录类型相关分支\n- 用户级 `HKCU\u002FHKEY_USERS\\\u003CSID>\\Software\\Classes` 对应范围\n\n## 仓库结构\n\n```text\nContextMenuMgr\u002F\n├─ .github\u002F                        # GitHub Actions\n├─ artifacts\u002F                      # 本地构建中间产物\n├─ build\u002F                          # publish 输出与安装包\n├─ ContextMenuMgr.Backend\u002F         # Windows Service \u002F 核心后端\n├─ ContextMenuMgr.Contracts\u002F       # 共享契约\n├─ ContextMenuMgr.Frontend\u002F        # WPF 前端\n├─ ContextMenuMgr.TrayHost\u002F        # 每用户 tray 宿主\n├─ Installer\u002F                      # Inno Setup 脚本与相关资源\n├─ build.ps1                       # 主构建脚本\n├─ build.bat                       # build.ps1 批处理入口\n├─ ContextMenuMgr.slnx             # 解决方案\n├─ README.md                       # 中文主 README\n└─ README.en.md                    # 英文 README\n```\n\n## 可执行文件与产物\n\n对外名称统一为：\n\n- 前端：`ContextMenuManagerPlus.exe`\n- 后端服务：`ContextMenuManagerPlus.Service.exe`\n- 托盘宿主：`ContextMenuManagerPlus.TrayHost.exe`\n\n## 开发环境要求\n\n- Windows 10 \u002F 11\n- .NET SDK 10\n- PowerShell 5.1 或更高\n- Inno Setup 6\n  - 默认优先使用仓库内置：\n    - `Installer\\Inno Setup 6\\ISCC.exe`\n\n## 本地开发构建\n\n```powershell\ndotnet restore .\\ContextMenuMgr.slnx --configfile .\\NuGet.Config\ndotnet build .\\ContextMenuMgr.slnx --no-restore\n```\n\n## 发布与安装包构建\n\n直接执行：\n\n```powershell\npowershell -NoProfile -ExecutionPolicy Bypass -File .\\build.ps1 -Configuration Release\n```\n\n### `build.ps1` 的行为\n\n它会：\n\n1. `restore` 整个解决方案\n2. 分别 `publish`：\n   - Frontend\n   - Backend\n   - TrayHost\n3. 对以下架构和分发模式逐个生成安装包：\n   - `win-x64`\n   - `win-x86`\n   - `win-arm64`\n   - `self-contained`\n   - `framework-dependent`\n4. 通过 Inno Setup 生成安装包\n\n脚本会生成 **多架构 + 多模式** 的安装包组合。\n\n默认输出目录：\n\n- publish 输出：`build\\publish\\`\n- 安装包输出：`build\\dist\\`\n\n`build\\dist\\` 中还会生成：\n\n- `artifacts.txt`\n\n用于列出本次生成的安装包列表。\n\n## GitHub Actions\n\n仓库中包含：\n\n- `.github\u002Fworkflows\u002Fmanual-release.yml`\n\n工作流行为：\n\n- 支持手动触发\n- 支持 tag 发布\n- 会调用 `build.ps1`\n- 上传构建产物\n- 自动创建 Draft Release\n- Release 的版本号和标题会从项目版本信息中解析\n\n## 本地数据、日志与状态库\n\n### 前端\n\n- 配置：\n  - `%LocalAppData%\\ContextMenuMgr\\frontend-settings.json`\n- 日志：\n  - `%LocalAppData%\\ContextMenuMgr\\Logs\\frontend-debug.log`\n  - `%LocalAppData%\\ContextMenuMgr\\Logs\\frontend-crash.log`\n\n### Tray Host\n\n- 日志：\n  - `%LocalAppData%\\ContextMenuMgr\\Logs\\trayhost.log`\n\n### Backend\n\n- 日志：\n  - `%ProgramData%\\ContextMenuMgr\\Logs\\backend.log`\n- 状态库：\n  - `%ProgramData%\\ContextMenuMgr\\Data\\context-menu-state.json`\n\n说明：\n\n- 产品对外名称为 `Context Menu Manager Plus`\n- 本地数据目录保留 `ContextMenuMgr` 历史命名，以兼容旧数据\n\n## 运行与恢复说明\n\n### 正常链路\n\n- 前端启动时会尝试连接 backend\n- backend 可用后，前端会显式请求 backend 确保 tray host 存在\n- backend 负责按当前会话拉起 tray host\n\n### 审核通知链路\n\n- backend 检测到新项\n- backend 广播通知\n- tray host 订阅到事件后弹系统通知\n- 用户点击通知\n- tray host 拉起 frontend 并跳转到审核页\n\n### 异常恢复\n\n- 如果 backend\u002Fservice 异常退出\n  - tray 可能一起消失\n  - 但 frontend 不应被强退\n- 用户可以在前端设置页使用：\n  - 安装 \u002F 修复服务\n  来恢复后端\n\n## 注意事项\n\n- 某些系统保护的注册表根键无法被普通方式修改 ACL，这是 Windows 本身的限制\n- 某些安全软件可能会拦截删除、恢复或注册表写入操作\n- 图标与显示名解析是 best-effort 逻辑，不保证 100% 覆盖所有第三方菜单项\n- 用户级右键菜单项、系统打包项、ShellEx \u002F CLSID 项的行为并不完全一致，遇到边界情况时日志通常比界面提示更有价值\n\n## 反馈建议\n\n如果你要提 Issue，建议至少附上：\n\n- Windows 版本\n- 出问题的菜单项名称 \u002F 注册表路径\n- 前端日志\n- backend 日志\n- trayhost 日志（如果问题涉及托盘）\n- 复现步骤\n- 截图或录屏\n\n## License\n\n本项目遵循 GPL V3.0 协议开源，See [LICENSE](.\u002FLICENSE).\n\n## 参考与致谢\n\n本项目代码大量参考自以下项目：\n\n- https:\u002F\u002Fgithub.com\u002FBluePointLilac\u002FContextMenuManager\n- https:\u002F\u002Fgithub.com\u002Fbranhill\u002Fwindows-11-context-menu-manager\n\n\n## Stargazers over time\n[![Stargazers over time](https:\u002F\u002Fstarchart.cc\u002FPLFJY\u002FContextMenuMgr.svg?variant=adaptive)](https:\u002F\u002Fstarchart.cc\u002FPLFJY\u002FContextMenuMgr)\n\n​                    \n","Context Menu Manager Plus 是一个用于管理 Windows 右键菜单的工具，特别强调对新菜单项的监控和审核。其核心功能包括检测并拦截新增的右键菜单项，默认禁用后由用户决定是否启用、保持禁用或移除。项目基于 .NET 10 和 WPF 构建，并采用后端主导架构，通过命名管道 IPC 与前端 UI 通信，确保系统稳定性和用户体验。适合需要精细化控制右键菜单内容的场景，尤其是希望避免第三方软件随意添加菜单项的用户。","2026-06-11 03:57:09","high_star"]