对于我的程序,我需要能够区分用户何时使用触控板上的手势执行某些操作以及何时使用相应的热键。通常,我需要知道用户何时显示桌面,以及他是否执行了相关的热键或相关手势。切换空间等相同... 基本上,我有这个需要显示通知中心,应用程序窗口,显示桌面,显示仪表板等...能够处理热点甚至是一个加号。
到目前为止,我希望能够使用NSAnyEventMask
和稍微逆向工程来调查事件的全局监视器,以确定"任务控制打开"事件,但这不成功。事实上,NSAnyEventMask
似乎根本不起作用,因为我的方法永远不会被调用(当它与其他掩码一起使用时,例如keydown或mousemove)。
我还查看了辅助功能,希望我可以添加相关的AXObserver
通知,但也没有找到任何内容。我想这并不奇怪,因为可访问性API提供了对基本图形组件(如菜单,窗口等)的描述......因此,虚拟空间和通知中心不会被它描述。
最后,CGevent
tap似乎没有处理这些事件,因为当我使用功能键显示桌面时,我的CGeventTaps
处理的唯一事件是相应的keydown和keyup事件。
我怀疑几乎没有可能的结果。
(1)我在尝试时表现非常出色,但不幸的是,这根本不可能处理这些事件......我首先怀疑这是一个令人惊讶的程序员,特别是在Cocoa,其次, apple告诉我,这可以通过编程方式访问许多令人惊叹的事件,我相信它们的API的强大功能。
(2)我尝试了很好的方法,但由于副作用而失败了。这有可能。
(3)其他方法可以帮助我以全局和编程方式处理这些事件(私有API?)。
非常感谢你的帮助,
亲切的问候,
答案 0 :(得分:0)
刚看到这个,但这是由Apple在NSAnyEventMask
的实施中出错。文档将NSAnyEventMask描述为0xffffffffU
,但NSAnyEventMask的实现是NSUIntegerMax
,0xffffffffffffffffU
。这可能是由于从32位到64位计算机的转换,它将NSUInteger从unsigned int改为unsigned long。将NSAnyEventMask
替换为' 0xffffffffU'解决了这个问题。我已经将此列为苹果的一个错误,希望他们能解决这个问题。