在哪里可以找到kCGKeyboardEventKeycode西里尔语的密钥代码列表

时间:2013-12-30 19:02:41

标签: objective-c c api

甚至不确定在哪里提出这个问题。这是我发现的一段代码。

CGEventRef myCGEventCallback(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *refcon) {
    //0x0b is the virtual keycode for "b"
    //0x09 is the virtual keycode for "v"
    if (CGEventGetIntegerValueField(event, kCGKeyboardEventKeycode) == 0x0B) {
        CGEventSetIntegerValueField(event, kCGKeyboardEventKeycode, 0x09);
    }

    return event;
}

您可以在http://pastebin.com/eJ9PYPAZ找到整个代码。

在任何应用程序中,它与另一个“全局”交换一个字母。我想要的是能够用西里尔字母改变拉丁字母。 kCGKeyboardEventKeycode使用键来访问包含key-down或key-up事件的虚拟键代码的整数字段。例如,0x0b是“b”的虚拟键码。西里尔字母“б”的虚拟键码是什么?

我的问题是我无法在网络的任何地方找到西里尔字母的密钥代码列表,就好像它们不存在一样。请帮忙。

1 个答案:

答案 0 :(得分:2)

据我所知,没有西里尔字母的虚拟键码。

虚拟键码不指示密钥将生成哪个字符。它们通过引用少量标准键盘型号(ANSI,ISO或JIS)之一来指示键位置。

因此,例如,kVK_ANSI_B(0x0b;常量在<Carbon/HIToolbox/Events.h>中定义)是对ANSI键盘上“B”键所在位置的引用。也就是说,它引用的是大致位于底行键中间的位置。但是,它并不意味着标记为“B”的键或产生“b”字符的键。生成的字符是当前所选键盘布局的一个功能,它由软件控制,可以随时更改。标签与计算机无关(虽然对用户有帮助)。

换句话说,虚拟键码类似于硬件扫描码,但是“虚拟”,因为它已经从任何实际的物理键盘中抽象出来。它引用了理想化的键盘。

因此,为了解决您要完成的任务,您需要指定键位置的虚拟键码,当使用俄语/西里尔语键盘布局时,该键码将产生“б”。通过选择OS X附带的俄语键盘布局,我可以看出,kVK_ANSI_Comma(0x2b)。