我最近购买了一个妙控鼠标。它非常棒并且充满潜力。不幸的是,它受到软件支持的严重阻碍。我想解决这个问题。我做了很多研究,这些是迄今为止我对事件链的发现:
- Magic Mouse 向系统发送完整的多点触控事件。
- 多点触控事件在 MultitouchSupport.framework (Carbon) 中处理
- The events are interpreted in the framework and sent up to the system as normal events
- 当您用一根手指滚动时,它会发送实际的滚轮事件。
- 当您用两根手指滑动时,它会发送一个滑动事件。
- 没有 NSTouch 事件发送到系统。您无法使用 NSTouch API 与鼠标交互。
发现上述所有内容后,我拆解了 MultitouchSupport.framework 文件,并通过一些谷歌搜索,找出了如何将我自己的回调插入链中,以便接收原始触摸事件数据。如果枚举设备列表,则可以为每个设备(触控板和鼠标)附加。这一发现将使我们能够创建一个在鼠标上使用多点触控的框架,但只能在单个应用程序中使用。请参阅我的帖子:原始多点触控跟踪 http://paste.lisp.org/display/89743.
我想为整个鼠标添加新功能system,而不仅仅是一个应用程序。
为了做到这一点,我想出了如何使用事件点击 http://developer.apple.com/mac/library/documentation/Carbon/Reference/QuartzEventServicesRef/Reference/reference.html看看最低级别的事件点击是否允许我获取原始数据,解释它,并在其位置上发送我自己的事件。不幸的是,这种情况并非如此。即使在 HID 级别,事件点击仍然比在 MultitouchSupport.framework 中解释输入的位置高出一步。
请在此处查看我的事件点击尝试:事件点击 - 尝试原始多点触控 http://paste.lisp.org/display/89744.
一个有趣的旁注:当接收到多点触控事件(例如滑动)时,会点击默认情况并打印出事件编号 29。标题显示 28 是最大值。
关于我的问题,现在您已经掌握了所有信息并看到了我所尝试的内容:扩展 Magic Mouse 功能的最佳方法是什么?我知道我需要在足够低的级别插入一些内容,以便在处理输入和调度预定义事件之前获取输入。因此,将其归结为单句问题:
- 是否有某种方法可以覆盖 MultitouchSupport.framework 中使用的默认回调?
- 我需要编写一个 kext 并自己处理所有传入的数据吗?
- 是否可以写一个位于top现在正在处理输入的 kext 的名称,并在该 kext 完成所有艰苦工作后对其进行过滤?
我的第一个目标是,如果单击时设备上有两根手指,则能够调度中键单击事件。显然,还有很多事情可以做,但就目前而言,这似乎是一件值得努力的好事。
提前致谢!
-Sastira
魔术鼠标和玻璃触控板之间的 MultitouchSupport.framework 中发生的情况有何不同?如果它基于 IOKit 设备属性,我怀疑您将需要一个模拟触控板但实际上与鼠标通信的 KEXT。 Apple 有一些关于 Darwin 内核编程和内核扩展的文档:
- 关于内核扩展 http://developer.apple.com/Mac/library/documentation/Darwin/Conceptual/KEXTConcept/KEXTConceptAbout/about_kexts.html
- I/O Kit 简介设备驱动程序设计指南 http://developer.apple.com/mac/library/documentation/DeviceDrivers/Conceptual/WritingDeviceDriver/Introduction/Intro.html
- 内核编程指南 http://developer.apple.com/mac/library/documentation/Darwin/Conceptual/KernelProgramming/About/About.html
(就我个人而言,我喜欢能够进行捏合放大和更多滑动/按钮手势的东西;事实上,Magic Mouse 是 Mighty Mouse 的四个按钮和 [尽管一直堵塞] 2D 滚轮的功能降级版。Update: 去年我写过芝麻鼠 http://calftrail.com/sesamouse为此,它不需要 kext(只需一两周盯着十六进制转储:-) 请参阅我的其他答案以获取 deets 和源代码。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)