扩展Magic Mouse的功能:我需要一个kext吗?

问题描述:

我最近购买了Magic Mouse。这是太棒了,充满了潜力。不幸的是,它受到软件支持的严重阻碍。我想解决这个问题。我已经做了大量的研究,并且这些是我迄今为止关于事件链的发现:扩展Magic Mouse的功能:我需要一个kext吗?

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

后,我发现所有的上述情况,我diassembled的MultitouchSupport.framework文件,并与一些谷歌上搜索,找到了如何将我自己的一个回调到链,所以我会接收原始触摸事件的数据。如果列举设备列表,则可以附加每个设备(触控板和鼠标)。这一发现将使我们能够创建一个在鼠标上使用多点触控的框架,但只能在单个应用程序中使用。在这里看到我的帖子:Raw Multitouch Tracking

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

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

看到我在这里的活动水龙头尝试:Event Tap - Attempt Raw Multitouch
有趣的一面是:当收到一个多点触控事件时,比如滑动,默认情况下会被点击并打印出一个29的事件号。标题显示28是最大值。

对我的问题,现在你有所有的信息,并已经看到我已经尝试:什么是最好的方法来扩展魔术鼠标的功能?我知道我需要在足够低的级别插入一些东西,以便在处理它之前获取输入,并且分派预定义的事件。所以,把它归结为单句问题:

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

我的第一个目标是如果单击时设备上有两个手指,就能够分派中间按钮单击事件。显然还有很多事情可以做,但现在看来,这似乎是一件好事。

在此先感谢!

-Sastira

+2

另外:如果它*是*我需要的kext,我可以在哪里找到编写一个资源?在这方面,谷歌搜索并没有太有成效。 – Tyler 2009-11-03 20:36:29

Magic Mouse和玻璃触控板在MultitouchSupport.framework中发生了什么不同?如果它基于IOKit设备属性,我怀疑你需要一个仿真触控板但实际上与鼠标进行通信的KEXT。苹果公司有专门的Darwin内核编程和内核扩展一些文档:

(就个人而言,我喜欢的东西,能捏放大多刷卡/按钮手势;实际上,Magic Mouse是Mighty Mouse的四个按钮和[尽管不断堵塞] 2D滚轮的功能降级版本更新:去年我写了Sesamouse来做到这一点,并且它不需要kext(只需一周或两周盯着十六进制转储:-)看到我的其他答案为deets和源代码。)

+0

触控板通过NSTouch API通过框架发送所有事件。而且,它支持更多的功能。我很确定我也需要kext。谢谢(你的)信息! – Tyler 2009-11-04 23:45:06

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

+0

是的,我和几个人进行了这个讨论,并意识到我做同样的事情时不会注意到它。:) 鼠标最多可以追踪三个手指,所以我可以轻松地做三指点击==中间点击。 – Tyler 2009-11-04 15:26:01

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

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

- 所有最好的

+0

好帖子。我不知道所有这些发布活动的各种功能等,我相信这会派上用场。 我会很感激,如果你会做一个链接到这个页面,所以它可以得到更多的意见,也许更多的人从熟悉我正在尝试做的输入。谢谢! – Tyler 2009-11-13 17:18:23

对不起,我忘了更新这个答案,但我最终搞清楚如何注入多点触控和通过Quartz Event Services从userland进入系统的手势事件。我不知道它如何幸存下来的狮子更新,但你可以检查出在https://github.com/calftrail/Touch

底层源代码,它需要两个黑客:使用私人多点触控框架来获取设备的输入,并注入无证 CGEvent结构转化为Quartz事件服务。想知道如何将它关闭是非常有趣的,但是现在我推荐购买一个Magic Trackpad :-P