# ContextMenuMgr **Repository Path**: Ethan_hws/ContextMenuMgr ## Basic Information - **Project Name**: ContextMenuMgr - **Description**: A Windows context menu management tool with new menu monitoring - **Primary Language**: Unknown - **License**: GPL-3.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-19 - **Last Updated**: 2026-05-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README
Context Menu Manager Plus 是一个强大的实用程序,它可帮助您管理 Windows 上的右键菜单,并避免第三方向你的右键菜单里塞屎。
[English Version](./README.en.md) > [!WARNING] > 本项目的相当一部分代码由 AI 辅助生成,并经过持续的人工作业、联调和重构,但它仍然可能存在遗漏、边界情况处理不足或行为与预期不完全一致的问题。 > 如果你在使用过程中发现 Bug、兼容性问题、异常行为或文档缺失,欢迎积极提交 Issue。最好附上复现步骤、日志、截图和系统版本信息,这会非常有帮助。 ## 项目简介 `Context Menu Manager Plus` 是一个面向 Windows 的右键菜单管理工具,重点不是“普通开关器”,而是: - 检测新增右键菜单项 - 先拦截并默认禁用 - 再交给用户审核 - 最后由用户手动决定是否放行 项目基于: - `.NET 10` - `WPF` - `WPF-UI` - `Named Pipe IPC` - `Windows Service` - 原生 Win32 托盘宿主 ## 核心特色 ### 先拦截,再审核 这是本项目最重要的设计目标: - 新的右键菜单项被检测到时,不是先让它直接生效 - 后端会先把它拦截为禁用状态 - 然后放入“待审核”队列 - 用户再手动选择: - `允许`:启用该菜单项 - `保持禁用`:保留条目,但维持禁用 - `移除`:删除该条目,或从审核列表中移除 这也是它和一般右键菜单管理器最大的不同。 ### 后端主导架构 项目采用**后端主导**模型: - `ContextMenuManagerPlus.Service.exe` - 真正的核心控制器 - 负责监控、审核、状态库、IPC、服务生命周期 - `ContextMenuManagerPlus.TrayHost.exe` - 独立的每用户托盘宿主 - 负责托盘图标、托盘菜单、系统通知、拉起前端 - `ContextMenuManagerPlus.exe` - 纯前端 UI - 按需打开 - 关闭窗口即退出 tray 作为独立的会话侧宿主存在,前端只负责 UI。 ## 功能 ### 菜单项管理 - 按分类浏览右键菜单项 - 文件 - 所有对象 - 文件夹 - 目录 - 目录背景 - 桌面背景 - 磁盘分区 - 库 - 此电脑 - 回收站 - 启用 / 禁用右键菜单项 - 删除菜单项 - 撤销删除 - 永久删除删除备份 - 搜索与筛选 - 一部分名称、图标、命令文本、CLSID 元数据解析 ### 审核队列 - 新增项先进入待审核 - 待审核页支持: - 允许 - 保持禁用 - 移除 - 审核页可聚合同一逻辑项的多个分类来源 - 新增待审核项时: - 后端广播事件 - tray host 弹系统通知 - 点击通知会拉起前端并跳转到审核页 ### 外部变化检测 外部变化检测重点保留: - 外部新增 - 守护离线期间的外部开关变化 ### 文件类型与规则页 - 文件类型页 - 快捷方式 - UWP 快捷方式 - 可执行文件 - 自定义扩展名 - 感知类型 - 目录类型 - 未知类型 - 其他规则页 - 增强菜单 - 详细编辑 - 自定义注册表路径 ### 设置页 - 语言切换 - 跟随系统 - 简体中文 - English (United States) - 主题切换 - 跟随系统 - 浅色 - 深色 - 日志等级 - 随 Windows 启动 - 安装 / 修复服务 - 卸载服务 - 重启资源管理器 - 打开日志目录 / 状态库目录 / 配置目录 - 注册表保护增强开关 ## 架构 ### 1. Backend Service 项目中的 backend 是真正的主控层: - 项目:`ContextMenuMgr.Backend` - 对外可执行文件:`ContextMenuManagerPlus.Service.exe` 职责: - 扫描并解析右键菜单相关注册表项 - 保存和合并本地状态库 - 执行启用 / 禁用 / 删除 / 恢复 / 审核决策 - 通过 Named Pipe 对外提供 IPC - 在合适时机尝试拉起 tray host ### 2. Tray Host 项目:`ContextMenuMgr.TrayHost` 对外可执行文件:`ContextMenuManagerPlus.TrayHost.exe` 职责保持很薄: - 托盘图标 - 托盘菜单 - 系统通知 - 打开前端主界面 - 打开审核页 - 请求后端退出 Tray host 使用**原生 Win32 托盘实现**。 ### 3. Frontend 项目:`ContextMenuMgr.Frontend` 对外可执行文件:`ContextMenuManagerPlus.exe` 职责: - 展示主界面 - 展示审核页 - 展示规则与设置 - 通过 Named Pipe 与 backend 通信 - 通过独立控制管道与 tray host / frontend 单实例逻辑协作 前端是 UI-only: - 关闭窗口 = 退出前端进程 - 不负责托盘 - 不保留后台常驻前端进程 ### 4. Shared Contracts 项目:`ContextMenuMgr.Contracts` 职责: - IPC 请求 / 响应模型 - 通知类型 - 前端与 tray host 控制命令 - 共享常量和协议定义 ## IPC 与进程协作 ### Backend Pipe 主要通过 `Named Pipe` 做 JSON 请求/响应通信,用于: - 获取快照 - 修改菜单项状态 - 执行审核决策 - 获取 / 设置保护开关 - 请求 backend 尝试拉起 tray host - 请求 backend 正常关闭 ### Frontend Control Pipe 前端有自己的控制通道,用于: - 单实例激活 - 打开主窗口 - 跳转到审核页 - 按 id 聚焦审核项 - 正常关闭前端 ### TrayHost Control Pipe tray host 也有自己的控制通道,用于: - 退出 tray host - 刷新 tray 本地化文案 ## 主要注册表范围 重点处理以下范围: - `HKEY_CLASSES_ROOT\*\shell` - `HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers` - `HKEY_CLASSES_ROOT\Directory\shell` - `HKEY_CLASSES_ROOT\Directory\shellex\ContextMenuHandlers` - `HKEY_CLASSES_ROOT\Directory\Background\shell` - `HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers` - `CLSID` - `PackagedCom` - 各类文件类型、扩展名、感知类型、目录类型相关分支 - 用户级 `HKCU/HKEY_USERS\