【发布时间】:2010-12-27 06:05:44
【问题描述】:
我正在尝试创建一个在执行时不打开窗口的实用程序,并且可以通过热键激活该实用程序;我读到目前 Cocoa 没有相应的功能,我应该使用已弃用的 Carbon 功能。
难道真的没有办法在 Cocoa 中使用全局热键吗?怎么办:等待Cocoa为此引入一个函数,还是使用carbon函数直到Cocoa中没有引入类似的函数?
【问题讨论】:
标签: objective-c cocoa x86-64 hotkeys
我正在尝试创建一个在执行时不打开窗口的实用程序,并且可以通过热键激活该实用程序;我读到目前 Cocoa 没有相应的功能,我应该使用已弃用的 Carbon 功能。
难道真的没有办法在 Cocoa 中使用全局热键吗?怎么办:等待Cocoa为此引入一个函数,还是使用carbon函数直到Cocoa中没有引入类似的函数?
【问题讨论】:
标签: objective-c cocoa x86-64 hotkeys
使用the Carbon Event Manager's RegisterEventHotKey function。 此功能在 64 位中受支持(请注意,它缺少“在 64 位中不可用”可用性说明)。
相反,NSEvent 在 Snow Leopard 中的新 addGlobalMonitorForEventsMatchingMask:handler: 方法不是实现热键的最简单方法。一方面,它要求用户可以访问已打开的辅助设备;此外,它需要您自己检查每个事件,而RegisterEventHotKey 系统仅在用户按下您注册的特定键时才调用您的回调函数。
【讨论】:
RegisterEventHotKey 函数的文档。但是,至少有一个示例应用程序 (UIElementInspector) 仍在使用它(在 AppDelegate.m 中),并且它仍然记录在 CarbonEvents.h 头文件中。
看看 Shortcut Recorder (http://wafflesoftware.net/shortcut/) 一个框架,它使用 Carbon Event Manager for Global Hotkeys 它还允许您更改用户以更改 HotKey(如果这是您想要的)。
并查看此项目/代码以了解如何实现它:http://github.com/sdegutis/SDGlobalShortcuts。
【讨论】: