所有 Cocoa 密钥代码在哪里?

问题描述 投票:0回答:3

我正在尝试使用 Cocoa 创建游戏,我需要获取用户输入。似乎没有所有键码的可用列表。我应该使用键码吗?我找到了某些值,例如 NSUpArrowFunctionKey,但没有找到其他键。关于这个问题的更老的问题的答案都已经过时,使用 Carbon,链接已损坏。

cocoa io keycode
3个回答
6
投票

我还没有找到类似枚举的东西,但这似乎包含了大多数(如果不是全部)数字键代码。

http://macbiblioblog.blogspot.com/2014/12/key-codes-for-function-and-special-keys.html

以防博客/链接失效:

Zero            29
One             18
Two             19
Three           20
Four            21
Five            23
Six             22
Seven           26
Eight           28
Nine            25
A               0
B               11
C               8
D               2
E               14
F               3
G               5
H               4
I               34
J               38
K               40
L               37
M               46
N               45
O               31
P               35
Q               12
R               15
S               1
T               17
U               32
V               9
W               13
X               7
Y               16
Z               6
SectionSign     10
Grave           50
Minus           27
Equal           24
LeftBracket     33
RightBracket    30
Semicolon       41
Quote           39
Comma           43
Period          47
Slash           44
Backslash       42
Keypad0 0       82
Keypad1 1       83
Keypad2 2       84
Keypad3 3       85
Keypad4 4       86
Keypad5 5       87
Keypad6 6       88
Keypad7 7       89
Keypad8 8       91
Keypad9 9       92
KeypadDecimal   65
KeypadMultiply  67
KeypadPlus      69
KeypadDivide    75
KeypadMinus     78
KeypadEquals    81
KeypadClear     71
KeypadEnter     76
Space           49
Return          36
Tab             48
Delete          51
ForwardDelete   117
Linefeed        52
Escape          53
Command         55
Shift           56
CapsLock        57
Option          58
Control         59
RightShift      60
RightOption     61
RightControl    62
Function        63
F1              122
F2              120
F3              99
F4              118
F5              96
F6              97
F7              98
F8              100
F9              101
F10             109
F11             103
F12             111
F13             105
F14             107
F15             113
F16             106
F17             64
F18             79
F19             80
F20             90
VolumeUp        72
VolumeDown      73
Mute            74
Help/Insert     114
Home            115
End             119
PageUp          116
PageDown        121
LeftArrow       123
RightArrow      124
DownArrow       125
UpArrow         126

3
投票

虚拟键码在 Events.h 中声明(/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/Carbon.framework/Versions/ A/Frameworks/HIToolbox.framework/Versions/A/Headers/Events.h)

讨论:

这些常量是最初在 Inside Mac Volume V, pg.1 中定义的虚拟键码。 V-191。他们识别键盘上的物理按键。名称中带有“ANSI”的常量根据 ANSI 标准美国键盘上的键位置进行标记。例如,kVK_ANSI_A 表示美式键盘布局中字母“A”键的虚拟键码。其他键盘布局可能在不同的物理键上有“A”键标签;在这种情况下,按“A”将生成不同的虚拟键码。


0
投票

除了Willeke的回答之外,这里还有

Events.h
Carbon.framework
HIToolbox.framework
文件的相关内容:

/*
 *  Summary:
 *    Virtual keycodes
 *  
 *  Discussion:
 *    These constants are the virtual keycodes defined originally in
 *    Inside Mac Volume V, pg. V-191. They identify physical keys on a
 *    keyboard. Those constants with "ANSI" in the name are labeled
 *    according to the key position on an ANSI-standard US keyboard.
 *    For example, kVK_ANSI_A indicates the virtual keycode for the key
 *    with the letter 'A' in the US keyboard layout. Other keyboard
 *    layouts may have the 'A' key label on a different physical key;
 *    in this case, pressing 'A' will generate a different virtual
 *    keycode.
 */
enum {
  kVK_ANSI_A                    = 0x00,
  kVK_ANSI_S                    = 0x01,
  kVK_ANSI_D                    = 0x02,
  kVK_ANSI_F                    = 0x03,
  kVK_ANSI_H                    = 0x04,
  kVK_ANSI_G                    = 0x05,
  kVK_ANSI_Z                    = 0x06,
  kVK_ANSI_X                    = 0x07,
  kVK_ANSI_C                    = 0x08,
  kVK_ANSI_V                    = 0x09,
  kVK_ANSI_B                    = 0x0B,
  kVK_ANSI_Q                    = 0x0C,
  kVK_ANSI_W                    = 0x0D,
  kVK_ANSI_E                    = 0x0E,
  kVK_ANSI_R                    = 0x0F,
  kVK_ANSI_Y                    = 0x10,
  kVK_ANSI_T                    = 0x11,
  kVK_ANSI_1                    = 0x12,
  kVK_ANSI_2                    = 0x13,
  kVK_ANSI_3                    = 0x14,
  kVK_ANSI_4                    = 0x15,
  kVK_ANSI_6                    = 0x16,
  kVK_ANSI_5                    = 0x17,
  kVK_ANSI_Equal                = 0x18,
  kVK_ANSI_9                    = 0x19,
  kVK_ANSI_7                    = 0x1A,
  kVK_ANSI_Minus                = 0x1B,
  kVK_ANSI_8                    = 0x1C,
  kVK_ANSI_0                    = 0x1D,
  kVK_ANSI_RightBracket         = 0x1E,
  kVK_ANSI_O                    = 0x1F,
  kVK_ANSI_U                    = 0x20,
  kVK_ANSI_LeftBracket          = 0x21,
  kVK_ANSI_I                    = 0x22,
  kVK_ANSI_P                    = 0x23,
  kVK_ANSI_L                    = 0x25,
  kVK_ANSI_J                    = 0x26,
  kVK_ANSI_Quote                = 0x27,
  kVK_ANSI_K                    = 0x28,
  kVK_ANSI_Semicolon            = 0x29,
  kVK_ANSI_Backslash            = 0x2A,
  kVK_ANSI_Comma                = 0x2B,
  kVK_ANSI_Slash                = 0x2C,
  kVK_ANSI_N                    = 0x2D,
  kVK_ANSI_M                    = 0x2E,
  kVK_ANSI_Period               = 0x2F,
  kVK_ANSI_Grave                = 0x32,
  kVK_ANSI_KeypadDecimal        = 0x41,
  kVK_ANSI_KeypadMultiply       = 0x43,
  kVK_ANSI_KeypadPlus           = 0x45,
  kVK_ANSI_KeypadClear          = 0x47,
  kVK_ANSI_KeypadDivide         = 0x4B,
  kVK_ANSI_KeypadEnter          = 0x4C,
  kVK_ANSI_KeypadMinus          = 0x4E,
  kVK_ANSI_KeypadEquals         = 0x51,
  kVK_ANSI_Keypad0              = 0x52,
  kVK_ANSI_Keypad1              = 0x53,
  kVK_ANSI_Keypad2              = 0x54,
  kVK_ANSI_Keypad3              = 0x55,
  kVK_ANSI_Keypad4              = 0x56,
  kVK_ANSI_Keypad5              = 0x57,
  kVK_ANSI_Keypad6              = 0x58,
  kVK_ANSI_Keypad7              = 0x59,
  kVK_ANSI_Keypad8              = 0x5B,
  kVK_ANSI_Keypad9              = 0x5C
};

/* keycodes for keys that are independent of keyboard layout*/
enum {
  kVK_Return                    = 0x24,
  kVK_Tab                       = 0x30,
  kVK_Space                     = 0x31,
  kVK_Delete                    = 0x33,
  kVK_Escape                    = 0x35,
  kVK_Command                   = 0x37,
  kVK_Shift                     = 0x38,
  kVK_CapsLock                  = 0x39,
  kVK_Option                    = 0x3A,
  kVK_Control                   = 0x3B,
  kVK_RightCommand              = 0x36,
  kVK_RightShift                = 0x3C,
  kVK_RightOption               = 0x3D,
  kVK_RightControl              = 0x3E,
  kVK_Function                  = 0x3F,
  kVK_F17                       = 0x40,
  kVK_VolumeUp                  = 0x48,
  kVK_VolumeDown                = 0x49,
  kVK_Mute                      = 0x4A,
  kVK_F18                       = 0x4F,
  kVK_F19                       = 0x50,
  kVK_F20                       = 0x5A,
  kVK_F5                        = 0x60,
  kVK_F6                        = 0x61,
  kVK_F7                        = 0x62,
  kVK_F3                        = 0x63,
  kVK_F8                        = 0x64,
  kVK_F9                        = 0x65,
  kVK_F11                       = 0x67,
  kVK_F13                       = 0x69,
  kVK_F16                       = 0x6A,
  kVK_F14                       = 0x6B,
  kVK_F10                       = 0x6D,
  kVK_F12                       = 0x6F,
  kVK_F15                       = 0x71,
  kVK_Help                      = 0x72,
  kVK_Home                      = 0x73,
  kVK_PageUp                    = 0x74,
  kVK_ForwardDelete             = 0x75,
  kVK_F4                        = 0x76,
  kVK_End                       = 0x77,
  kVK_F2                        = 0x78,
  kVK_PageDown                  = 0x79,
  kVK_F1                        = 0x7A,
  kVK_LeftArrow                 = 0x7B,
  kVK_RightArrow                = 0x7C,
  kVK_DownArrow                 = 0x7D,
  kVK_UpArrow                   = 0x7E
};

映射似乎有一些逻辑,我想这与硬件规格和按键接线有关。

© www.soinside.com 2019 - 2024. All rights reserved.