Cocoa 中(还没有?)不支持这一点。您仍然可以使用旧的 Carbon 库(64 位兼容),但不幸的是 Apple 决定删除有关该主题的所有文档。
这里有一篇不错的博客文章:http://dbachrach.com/blog/2005/11/program-global-hotkeys-in-cocoa-easily/
这篇文章对我来说有点长,所以这里是简短的版本:
- (id)init {
self = [super init];
if (self) {
EventHotKeyRef hotKeyRef;
EventHotKeyID hotKeyId;
EventTypeSpec eventType;
eventType.eventClass = kEventClassKeyboard;
eventType.eventKind = kEventHotKeyPressed;
InstallApplicationEventHandler(&mbHotKeyHandler, 1, &eventType, NULL, NULL);
hotKeyId.signature = 'hotk';
hotKeyId.id = 1337;
RegisterEventHotKey(kVK_ANSI_C, cmdKey + shiftKey, hotKeyCopyId, GetApplicationEventTarget(), 0, &hotKeyRef);
}
}
OSStatus mbHotKeyHandler(EventHandlerCallRef nextHandler, EventRef event, void *userData) {
// Your hotkey was pressed!
return noErr;
}
热键已注册RegisterEventHotKey(…)
称呼。在本例中,它注册 CMD + Shift + C。
ANSI 键在 HIToolbox/Events.h 中定义,因此您可以在那里查找其他键(只需在 XCode 中按 CMD + Shift + O,然后输入 Events.h 即可找到它)。
如果您想要多个热键或者想要从处理程序调用方法,您必须做更多的工作,但这都在这个答案顶部附近的链接中。
我一直在寻找这个问题的简单答案,所以我希望这对其他人有帮助......