# MiddleQ **Repository Path**: ProgHub/MiddleQ ## Basic Information - **Project Name**: MiddleQ - **Description**: 在Mac上使用鼠标中键点击Dock栏的应用图标以快速退出该应用 - **Primary Language**: Swift - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-27 - **Last Updated**: 2026-03-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

MiddleQ - macOS Dock 中键退出工具

MiddleQ Logo

一款简洁实用的 macOS 工具,让你可以通过鼠标中键快速退出 Dock 中的应用程序。

--- ## 🌟 特性 - **简单直观**: 只需在 Dock 上中键点击即可退出应用程序 - **智能识别**: 自动识别点击的 Dock 图标并终止对应应用 - **配置灵活**: 无法识别的应用支持自定义配置应用映射 - **安全保护**: 自动保护 Finder 不被意外退出 - **开机自启**: 支持设置开机自动启动(macOS 13.0+) - **系统兼容**: 支持 Intel 和 Apple Silicon 双架构 - **轻量级**: 后台常驻,资源占用极低 ## 📦 安装 ### 方法一:下载预编译版本(推荐) 1. 从 [Releases](https://github.com/yourusername/MiddleQ/releases) 页面下载最新的 `.dmg` 文件 2. 双击打开 DMG 文件 3. 将 `MiddleQ.app` 拖拽到 `Applications` 文件夹 4. 首次运行时系统会提示安全性警告,前往 **系统偏好设置 > 隐私与安全性** 允许运行 ### 方法二:源码编译 ```bash # 克隆仓库 git clone https://github.com/yourusername/MiddleQ.git cd MiddleQ # 编译应用 ./build.sh # 打包为 DMG(可选) ./package_dmg.sh ``` ## 🚀 使用方法 ### 基本操作 1. 启动 MiddleQ 应用(会在菜单栏显示鼠标图标 🖱️) 2. 在系统偏好设置中授予辅助功能权限: - **系统偏好设置 > 隐私与安全性 > 辅助功能** - 点击左下角锁图标解锁 - 添加并勾选 `MiddleQ.app` 3. 在 Dock 中使用鼠标中键点击任意应用图标即可退出该应用 ### 菜单栏功能 点击菜单栏的应用图标可以访问以下功能: - **开机自动启动**: 开启/关闭开机自启动 - **编辑配置文件**: 直接打开配置文件进行编辑 - **重新加载配置**: 编辑完配置文件后重新加载配置文件 - **退出 MiddleQ**: 完全退出应用 ## ⚙️ 配置 ### 配置文件位置 配置文件位于:`~/Documents/.MiddleQ/config.json` 首次运行时会自动创建默认配置: ```json { "使用方法": "如果中键点击某个app无效则在此手动添加映射,其中key是应用名称,value通过'mdls -name kMDItemCFBundleIdentifier XXX.app'获取", "Visual Studio Code": "com.microsoft.VSCode" } ``` ### 配置说明 - **键(key)**: 应用在 Dock 中显示的名称 - **值(value)**: 应用的 Bundle Identifier ### 获取 Bundle Identifier 对于某些不生效的应用,可能需要手动添加映射: ```bash # 方法一:使用 mdls 命令 mdls -name kMDItemCFBundleIdentifier /Applications/应用名称.app # 方法二:使用 defaults 命令 defaults read /Applications/应用名称.app/Contents/Info.plist CFBundleIdentifier ``` ### 示例配置 ```json { "Chrome": "com.google.Chrome", "微信": "com.tencent.xinWeChat", "QQ": "com.tencent.qq", "钉钉": "com.alibaba.DingTalkMac" } ``` ## 🔧 开发 ### 技术栈 - **语言**: Swift 5+ - **平台**: macOS 13.0+ - **框架**: - Cocoa (AppKit) - ApplicationServices - ServiceManagement (开机自启) ### 项目结构 ``` MiddleQ/ ├── src/ │ ├── main.swift # 程序入口 │ └── AppDelegate.swift # 应用委托类 ├── config/ │ └── Info.plist # 应用配置文件 ├── resource/ # 资源文件(图标等) ├── build.sh # 编译脚本 ├── package_dmg.sh # 打包脚本 └── README.md # 说明文档 ``` ### 编译构建 ```bash # 编译应用(包含双架构支持) ./build.sh # 输出:MiddleQ.app ``` ### 打包分发 ```bash # 打包为 DMG 安装包 ./package_dmg.sh # 输出:MiddleQ_v1.0.dmg ``` ### 代码说明 #### 核心功能实现 - **事件监听**: 使用 `CGEvent.tapCreate` 监听鼠标中键事件 - **坐标检测**: 通过 `AXUIElementCopyElementAtPosition` 判断点击位置 - **应用识别**: 匹配 Dock 图标标题与运行中的应用程序 - **安全防护**: 特殊处理 Finder,防止误操作退出 #### 关键类和方法 - `AppDelegate`: 主要的委托类,处理应用生命周期 - `startEventTap()`: 初始化事件监听器 - `handleDockClick()`: 处理 Dock 点击事件 - `loadConfig()/saveConfig()`: 配置文件管理 - `updateAutoLaunch()`: 开机自启功能(macOS 13.0+) ## 🔒 安全性和权限 此应用需要以下系统权限: 1. **辅助功能权限**: 监听全局鼠标事件 2. **Accessibility API**: 访问界面元素信息 应用承诺: - 不收集任何用户数据 - 不进行网络连接 - 仅在本地处理事件 - 开源透明,可审计 ## 🐛 故障排除 ### 常见问题 **Q: 应用无法正常工作** A: 请检查是否已授予辅助功能权限,授予权限后请重启应用 **Q: 某些应用无法通过中键退出** A: 可能需要在配置文件中添加该应用的 Bundle ID 映射 **Q: Finder 被意外退出了** A: 此情况已被特别防护,Finder 不会被中键操作影响 **Q: 开机自启功能不可用** A: 该功能需要 macOS 13.0 或更高版本 ### 日志查看 应用会在终端输出调试信息: ```bash # 查看实时日志 tail -f /var/log/system.log | grep MiddleQ ``` ## 📄 许可证 本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情 ## 🙏 致谢 - 感谢所有贡献者和用户的支持 - 特别感谢开源社区提供的各种工具和库 ## 📞 联系方式 如有问题或建议,请通过以下方式联系: - GitHub Issues: [提交问题](https://github.com/yourusername/MiddleQ/issues) - 邮箱: wang.chaofan@foxmail.com ---

Made with ❤️ for macOS users