如何将诸如kVK_ANSI_1
之类的关键代码转换为可以传递给setKeyEquivalent
的字符串(因此,对于kVK_ANSI_1
,我会得到@"1"
)?而且为什么有两种方法可以指定 key ?仅具有一个表示会更有意义。
最佳答案
我最终使用了发现的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);
}
关于macos - 将 key 代码转换为等效 key ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12547007/