25

我最近购买了魔术鼠标。这太棒了,充满了潜力。不幸的是,它受到软件支持的严重阻碍。我想解决这个问题。我已经做了很多研究,这些是我迄今为止关于事件链的发现:

  1. Magic Mouse 将完整的多点触控事件发送到系统。
  2. 多点触控事件在 MultitouchSupport.framework (Carbon) 中处理
  3. 事件在框架中被解释并作为正常事件发送到系统
    • 当您用一根手指滚动时,它会发送实际的滚轮事件。
    • 当您用两根手指滑动时,它会发送一个滑动事件。
  4. 没有 NSTouch 事件被发送到系统。您不能使用 NSTouch API 与鼠标进行交互。

在我发现以上所有内容后,我分解了 MultitouchSupport.framework 文件,并通过谷歌搜索,弄清楚了如何将我自己的回调插入到链中,以便接收原始触摸事件数据。如果您枚举设备列表,您可以附加每个设备(触控板和鼠标)。这一发现将使我们能够创建一个在鼠标上使用多点触控的框架,但仅限于单个应用程序中。在这里查看我的帖子:原始多点触控跟踪

我想在整个系统中为鼠标添加新功能,而不仅仅是单个应用程序。

为了尝试这样做,我想出了如何使用Event Taps来查看最低级别的 event tap 是否允许我获取原始数据、解释它并在其位置发送我自己的事件。不幸的是,这种情况并非如此。即使在 HID 级别,事件点击仍然比在 MultitouchSupport.framework 中解释输入的位置高出一步。

在此处查看我的事件点击尝试:事件点击 - 尝试原始多点触控
一个有趣的附注:当接收到多点触控事件(例如滑动)时,默认情况下被击中并打印出事件编号 29。标题显示 28 作为最大值。

关于我的问题,既然您已经掌握了所有信息并看到了我的尝试:扩展 Magic Mouse 功能的最佳方法是什么?我知道我需要在足够低的级别插入一些东西,以便在处理输入和调度预定义事件之前获取输入。因此,将其归结为单句问题:

  • 有没有办法覆盖 MultitouchSupport.framework 中使用的默认回调?
  • 我是否需要编写一个 kext 并自己处理所有传入的数据?
  • 是否可以编写一个位于现在处理输入的 kext之上的 kext,并在 kext 完成所有艰苦工作后对其进行过滤?

我的第一个目标是,当您单击设备时,如果设备上有两根手指,则能够调度中键单击事​​件。显然还有很多很多事情可以做,但这似乎是一件好事,就目前而言。

提前致谢!

-萨斯蒂拉

4

4 回答 4

4

MultitouchSupport.framework 中发生的事情在 Magic Mouse 和玻璃触控板之间有何不同?如果它基于 IOKit 设备属性,我怀疑您将需要一个模拟触控板但实际上与鼠标通信的 KEXT。苹果有一些关于达尔文内核编程和内核扩展的文档:

(就个人而言,我喜欢启用捏放大和更多滑动/按钮手势的东西;事实上,Magic Mouse 是 Mighty Mouse 的四个按钮和 [尽管一直堵塞] 2D 滚轮的功能降级。更新:最后一年我写芝麻酱就是为了做到这一点,它不需要一个 kext(只需一两个星期盯着十六进制转储:-) 请参阅我的其他答案以获取 deets 和源代码。)

于 2009-11-04T22:59:32.653 回答
4

抱歉,我忘了更新这个答案,但我最终弄清楚了如何通过Quartz Event Services从用户区将多点触控和手势事件注入系统。我不确定它在 Lion 更新中的存活情况如何,但您可以在https://github.com/calftrail/Touch查看底层源代码

它需要两个 hack:使用私有的Multitouch 框架来获取设备输入,以及将未记录的 CGEvent 结构注入 Quartz 事件服务。弄清楚如何实现它非常有趣,但这些天我建议只购买一个 Magic Trackpad :-P

于 2011-07-22T17:36:45.010 回答
3

我已经实现了用户空间可定制多点触控事件包装器的概念验证。

你可以在这里阅读:http ://aladino.dmi.unict.it/?a=multitouch (见WaybackMachine

- 祝一切顺利

于 2009-11-13T15:52:29.540 回答
2

如果您达到了这一点,您可能希望将中间单击视为鼠标上的三个手指而不是两个手指。我已经考虑过魔术鼠标的中间点击问题,我注意到我经常将第二根手指放在鼠标上,即使我只是按下左键。因此,“2 指”单击可能会被误认为是单击左键,并且还需要用户付出更多努力才能始终将第二根手指从鼠标上移开。因此,如果可以检测到,三个手指会减少混乱和头痛。我想知道第一个“中间按钮单击”解决方案将来自哪里,因为我急于让我的中间单击“公开”功能返回 :) 祝你好运。

于 2009-11-04T07:46:45.733 回答