在OS X(lion)中,如何找到键组合是否用作键盘快捷键?

时间:2012-04-17 21:41:20

标签: cocoa osx-lion keyboard-shortcuts

我想在我的应用程序(OS X lion)中放置一堆键盘快捷键,这样我就可以通过键盘完成大部分工作。当然有一堆热键组合正在使用中,包括HIG中的那个。

是否有一些实用程序可用于键入组合键并查明它是否已经表示某些内容(全局或mac标准 - 我不太担心重用其他应用程序使用的某些特殊组合 - 或者我应该?)?

2 个答案:

答案 0 :(得分: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 docs(11Mb PDF)。

答案 1 :(得分:1)

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