objectivec-可可中显示桌面、显示通知中心等的全局事件



对于我的程序,我需要能够区分用户何时使用触控板上的手势执行某些操作,以及何时使用相应的热键。通常,我需要知道用户何时显示桌面,以及他是否执行了相关的热键或手势。切换空间等也是如此。。。基本上,我需要显示通知中心、应用程序窗口、显示桌面、显示仪表板等。。。能够处理热弯角甚至是一个加分项。

到目前为止,我希望能够调查事件的全局监控器,使用NSAnyEventMask和稍微反向工程来找出"任务控制打开"事件的类型,但这并没有成功。事实上,NSAnyEventMask似乎根本不起作用,因为我的方法从未被调用过(而它使用其他掩码,如keydown或mousemove)。

我还查看了可访问性功能,希望可以添加相关的AXObserver通知,但也没有发现任何内容。我想这并不奇怪,因为可访问性API提供了基本图形组件的描述,如菜单、窗口等。因此,虚拟空间和通知中心不由其描述。

最后,CGevent tap似乎无法处理这些事件,因为当我使用功能键显示桌面时,我的CGeventTaps处理的唯一事件是相应的keydown和keyup事件。

我怀疑可能的结果很少。

(1) 我一直在尝试,但不幸的是,这根本不可能处理这些事件。。。我非常怀疑这一点,因为首先我远不是一个了不起的程序员,尤其是在Cocoa,其次,苹果向我证明,这可以通过编程访问许多了不起的事件,我相信他们的API的力量。

(2) 我尝试过好的方法,但由于副作用而失败了。很可能。

(3) 其他方法可以帮助我以全局和编程方式处理这些事件(专用API?)。

非常感谢你的帮助,

亲切问候,

刚刚看到了这一点,但这是由苹果实现NSAnyEventMask时的错误引起的。文档将NSAnyEventMask描述为0xffffffffU,而NSANyEvent Mask的实现是NSUIntegerMax,即0xffffffffffffffffU。这可能是由于从32位计算机到64位计算机的转换,将NSUInteger的从无符号int变为无符号long。将NSAnyEventMask替换为"0xffffffU"可修复此问题。我已经把它列为苹果的一个bug,希望他们能解决这个问题。

相关内容

  • 没有找到相关文章

最新更新