【问题标题】:Convert key code into key equivalent string将密钥代码转换为密钥等效字符串
【发布时间】:2012-09-22 19:27:01
【问题描述】:

如何将键码(例如kVK_ANSI_1)转换为可以传递给setKeyEquivalent 的字符串(所以对于kVK_ANSI_1,我会得到@"1")?为什么有两种方法可以指定键呢?只有一种表示形式会更有意义。

【问题讨论】:

  • 有两种方法可以指定键,因为kVK_ANSI_1 表示键盘上的位置(“1”键位于 ANSI 标准美国键盘上),而“1”表示字符键入(可能来自kVK_ANSI_1,也可能不来自kVK_ANSI_1,具体取决于您的键盘布局)。

标签: macos cocoa keyboard-shortcuts


【解决方案1】:

我最终使用了here 找到的以下函数。

/* Returns string representation of key, if it is printable.
 * Ownership follows the Create Rule; that is, it is the caller's
 * responsibility to release the returned object. */
CFStringRef createStringForKey(CGKeyCode keyCode)
{
    TISInputSourceRef currentKeyboard = TISCopyCurrentKeyboardInputSource();
    CFDataRef layoutData =
        TISGetInputSourceProperty(currentKeyboard,
                                  kTISPropertyUnicodeKeyLayoutData);
    const UCKeyboardLayout *keyboardLayout =
        (const UCKeyboardLayout *)CFDataGetBytePtr(layoutData);

    UInt32 keysDown = 0;
    UniChar chars[4];
    UniCharCount realLength;

    UCKeyTranslate(keyboardLayout,
                   keyCode,
                   kUCKeyActionDisplay,
                   0,
                   LMGetKbdType(),
                   kUCKeyTranslateNoDeadKeysBit,
                   &keysDown,
                   sizeof(chars) / sizeof(chars[0]),
                   &realLength,
                   chars);
    CFRelease(currentKeyboard);    

    return CFStringCreateWithCharacters(kCFAllocatorDefault, chars, 1);
}

【讨论】:

  • 很棒而且乐于助人(即使这么晚了)。谢谢
【解决方案2】:
猜你喜欢
  • 2011-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-03
  • 2014-04-20
  • 2014-02-06
相关资源
最近更新 更多