- 桌面应用
- 系统编程
【免费下载链接】mac-mouse-fix
Mac Mouse Fix - Make Your $10 Mouse Better Than an Apple Trackpad!
Mac Mouse Fix(MMF)默认会“捕获”鼠标滚轮事件,以便实现平滑滚动、方向反转、滚轮加速与键盘修饰键等增强功能。本指南基于官方用户文档 CapturedScrollWheels.md 展开,结合仓库源码说明“滚轮捕获”到底是什么、如何通过Scrolling设置面板彻底关闭捕获,以及关闭后 MMF 的滚轮事件拦截行为会发生什么变化,帮助你理解捕获判定逻辑,并将滚动处理交给 MOS 等其他应用。
什么是“滚轮捕获”
与 MMF 对鼠标按键的“捕获”行为(参见 CapturedButtonsMMF3.md)类似,Mac Mouse Fix默认会捕获鼠标滚轮事件。这意味着 MMF 会从系统事件流中拦截滚轮输入,再根据自己的配置(平滑度、速度、方向、修饰键等)重新生成滚动事件。
从源码上看,这一拦截行为由 Helper 进程中的 Scroll.m 实现:它通过CGEventTapCreate(kCGHIDEventTap, ...)注册了一个仅监听kCGEventScrollWheel事件的全局事件回调,只要“捕获”处于激活状态,滚轮输入就会先经过 MMF 的 ScrollAnalyzer 与动画系统处理,而不是直接由当前前台应用消费。
如何取消滚轮捕获
如果你希望 MMF 不再介入滚轮事件(例如你更愿意让 MOS、Logi Options 等其他滚动增强工具来处理滚轮),可以按以下步骤操作:
- 打开 Mac Mouse Fix 主窗口,进入'Scrolling'(滚动)标签页;
- 关闭该页面上的所有选项,具体包括:
- 'Speed'(速度)选项:将其设为'macOS'(即让 MMF 放弃自己的加速算法,完全沿用 macOS 提供的滚轮行为);
- 'Keyboard Modifiers'(键盘修饰键):逐一点击每个修饰键条目右侧的'x'按钮,将全部条目删除。
完成上述操作后,界面中应当会出现一条提示消息,表明滚轮已不再被捕获。
底层捕获判定逻辑
“是否捕获滚轮”并非一个独立的开关,而是由配置派生而来。在 SwitchMaster.swift 的scrollConfigChanged(scrollConfig:)方法中,核心判定代码如下:
self.defaultModifiesScroll = (scrollConfig.smoothEnabled || scrollConfig.u_speed != kMFScrollSpeedSystem || scrollConfig.u_invertDirection == kMFScrollInversionInverted)也就是说,只要满足以下任意一个条件,MMF 就会认为“默认需要修改滚轮事件”,从而开启捕获:
| 条件 | 对应设置 | 关闭方式 |
|---|---|---|
smoothEnabled为真 | 'Smoothness'(平滑度)不为off | 将平滑度设为关闭 |
u_speed != kMFScrollSpeedSystem | 'Speed'(速度)不是macOS | 将速度设为 'macOS' |
| 方向反转开启 | 'Reverse Direction'(反转方向)为开 | 关闭方向反转 |
随后toggleScrollTap()会根据该状态调用Scroll.startReceiving()或Scroll.stopReceiving()来启用或停用上述滚轮事件拦截。用户界面侧的捕获状态检测也有完全一致的对应关系——在 ScrollTabController.swift 中,代码同时检查了平滑度、方向、速度以及全部键盘修饰键:
let isCaptured = smooth1 != "off" || reverse1 || speed1 != "system" || horizontal1 != 0 || zoom1 != 0 || swift1 != 0 || precise1 != 0注意:该判定同时覆盖了Scroll.modifiers.horizontal / zoom / swift / precise四类键盘修饰键(它们在 default_config.plist 中对应Scroll字典下的modifiers子字典),这正对应文档中“删除所有 Keyboard Modifiers 条目”的步骤。
配置默认值速查
仓库中 default_config.plist 展示了Scroll配置的默认形态,可供对照:
<key>Scroll</key> <dict> <key>modifiers</key> <dict> <key>horizontal</key> <integer>131072</integer> <key>precise</key> <integer>524288</integer> <key>swift</key> <integer>262144</integer> <key>zoom</key> <integer>1048576</integer> </dict> <key>reverseDirection</key> <true/> <key>trackpadSimulation</key> <true/> <key>precise</key> <false/> <key>smooth</key> <string>high</string> <key>speed</key> <string>medium</string> </dict>smooth取值:off/low/regular/high,对应 ScrollConfig.swift 中的u_smoothness解析(枚举定义见 ScrollConfigObjC.h);speed取值:system/low/medium/high,其中system表示完全沿用 macOS 原生的滚轮行为(kMFScrollSpeedSystem);- 默认配置下
smooth = high、speed = medium、reverseDirection = true,因此默认状态下滚轮必然处于“被捕获”状态——这正是文档开头“默认捕获”说法的依据。
滚轮不再被捕获之后会发生什么
当你完成了上述设置并看到“滚轮已不再被捕获”的提示后,Mac Mouse Fix 会完全忽略你的滚轮:
- 零 CPU 占用:滚轮事件不会再进入 MMF 的分析与动画管线,滚动期间 MMF 不会消耗处理器资源;
- 零电量损耗:不会因为持续的滚轮事件处理而消耗额外的电池电量;
- 零干预:MMF 不会以任何方式干扰、改写或转发你的滚轮事件。
从源码角度看,toggleScrollTap()会调用Scroll.stopReceiving(),关闭注册在kCGHIDEventTap上的滚轮事件回调,滚轮输入将直接、完整地传递到 macOS 与前台应用。
这也意味着你可以放心地把滚轮交给其他应用来处理,例如常见的平滑滚动工具 MOS 或 Logi Options——MMF 不再与它们竞争滚轮事件,两者之间不会产生冲突或重复处理。
补充说明
- 取消滚轮捕获不会影响 MMF 对鼠标按键(如中键、侧键)的捕获与按键绑定功能;如果你希望同时恢复按键的原始行为,可参考 CapturedButtonsMMF3.md 中关于“删除按键绑定以取消捕获”与“分配等价动作以保留原功能”的说明。
- 如果你只想在特定场景下临时停用 MMF 的滚动处理,还可以通过
General配置中的scrollKillSwitch(见 default_config.plist)一键禁用滚动拦截,而不必修改Scrolling面板中的各项设置;SwitchMaster的toggleScrollTap()会优先检查该开关。
相关文档
- Captured Mouse Buttons 指南:了解 MMF 对鼠标按键的捕获机制与恢复原始功能的三种方式;
- CapturedScrollWheels.md(英文原版):本指南对应的官方文档;
- ScrollConfig.swift 与 SwitchMaster.swift:滚轮配置解析与捕获开关调度的核心实现。
- 桌面应用
- 系统编程
【免费下载链接】mac-mouse-fix
Mac Mouse Fix - Make Your $10 Mouse Better Than an Apple Trackpad!
相关推荐
Mac Mouse Fix 滚轮捕获机制详解:如何关闭滚轮捕获并让第三方滚动应用接管
Mac Mouse Fix 滚轮捕获机制详解:如何关闭滚轮捕获并让第三方滚动应用接管 Mac Mouse Fix(以下简称 MMF)默认会「捕获(capture
桌面应用系统编程torchtune 配置系统全解:从 YAML 配置、instantiate 组件实例化到 CLI 覆盖的完整实践
torchtune 配置系统全解:从 YAML 配置、instantiate 组件实例化到 CLI 覆盖的完整实践 本文系统讲解 PyTorch 原生后训练库
桌面应用系统编程Mac Mouse Fix 滚轮捕获机制全解析:如何解除滚轮捕获、把滚动交还给系统与其他应用
Mac Mouse Fix 滚轮捕获机制全解析:如何解除滚轮捕获、把滚动交还给系统与其他应用 本指南以 Mac Mouse Fix 官方用户文档 Capture
桌面应用系统编程
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考