2

我想在我的应用程序(OS X lion)中放一堆键盘快捷键,这样我就可以用键盘做大部分事情。当然,已经有一堆热键组合列表在使用,包括 HIG 中的组合键。

是否有一些实用程序可用于键入组合键并确定它是否已经意味着某些东西(全局或 mac 标准——我不太担心重用另一个应用程序使用的某些特殊组合——或者我应该是?)?

4

2 回答 2

4

您可以使用 Carbon 来执行此操作。不要害怕在这里使用 Carbon,没有 Cocoa 方法来获取这些信息,并且仍然支持 Carbon 方法。

CopySymbolicHotKeys()函数返回一个字典数组,其中包含有关在键盘首选项窗格中定义的系统范围的符号热键的信息。每个字典都包含有关单个热键的信息。

具体来说,每个字典都有三个键:

  • kHISymbolicHotKeyCode:热键的虚拟键码,表示为CFNumber
  • kHISymbolicHotKeyModifiers:热键的键盘修饰符,表示为CFNumber.
  • kHISymbolicHotKeyEnabled:热键的启用状态,表示为CFBoolean

显然,这些是原始键码,因此如果您想查看键码实际指的是什么,则需要做一些工作。

请注意,该数组不包含自定义的、特定于应用程序的热键,但这是一个小问题。

这是一个简单的例子:

#import <Carbon/Carbon.h>
CFArrayRef registeredHotKeys;


if(CopySymbolicHotKeys(&registeredHotKeys) == noErr)
{
    CFIndex count = CFArrayGetCount(registeredHotKeys);
    for(CFIndex i = 0; i < count; i++)
    {
        CFDictionaryRef hotKeyInfo = CFArrayGetValueAtIndex(registeredHotKeys, i);

        CFNumberRef hotKeyCode = CFDictionaryGetValue(hotKeyInfo, kHISymbolicHotKeyCode);
        CFNumberRef hotKeyModifiers = CFDictionaryGetValue(hotKeyInfo, kHISymbolicHotKeyModifiers);
        CFBooleanRef hotKeyEnabled = CFDictionaryGetValue(hotKeyInfo, kHISymbolicHotKeyEnabled);

        NSLog(@"key code: %@ modifiers: %@ enabled: %@", hotKeyCode, hotKeyModifiers, hotKeyEnabled);

    }

    //you MUST release the dictionary when finished with it
    CFRelease(registeredHotKeys);
}

请记住,您需要在项目设置中将 Carbon 框架添加到Link Binary with Libraries构建阶段。

有关更多信息,您应该查看Carbon Event Manager 文档(11Mb PDF)。

于 2012-04-18T00:55:28.880 回答
1

Thear 曾经是 Carbon 中的一个 API,用于获取全局键盘快捷键,但是,我不相信 Cocoa API 可以做到这一点。我不认为你应该担心其他第三方应用程序,但你可以参考http://support.apple.com/kb/HT1343并且只是硬代码来避免这些。他有帮助。

于 2012-04-18T00:53:28.047 回答