如何在应用程序窗口未激活时拦截Cocoa中的热键

时间:2009-12-16 14:00:36

标签: objective-c cocoa x86-64 hotkeys

我正在尝试创建一个在执行时不会打开窗口的实用程序,它将从热键激活;我读到目前Cocoa没有这方面的功能,我应该使用弃用的Carbon函数。

是不是真的有办法在Cocoa中使用全局热键?我该怎么办:等待Cocoa引入一个函数,或者使用carbon函数直到Cocoa中没有引入类似的函数?

2 个答案:

答案 0 :(得分:7)

使用the Carbon Event Manager's RegisterEventHotKey function 64位支持此功能(请注意,它缺少“64位不可用”的可用性说明)。

相反,NSEvent在Snow Leopard中的新addGlobalMonitorForEventsMatchingMask:handler:方法不是实现热键的最简单方法。首先,它要求用户可以访问辅助设备;此外,与RegisterEventHotKey系统相比,它要求您自己检查每个事件,{{1}}系统仅在用户按下您注册的特定键时调用您的回调函数。

答案 1 :(得分:2)

查看Shortcut Recorder(http://wafflesoftware.net/shortcut/)一个框架,该框架使用全局热键的Carbon Event Manager,它还允许您更改用户以更改HotKey(如果这是您想要的)。

请参阅此项目/代码,了解如何实施它:http://github.com/sdegutis/SDGlobalShortcuts