Where can I find a list of Mac virtual key codes?

妖精的绣舞 提交于 2019-11-26 14:54:43
Matt B.

The more canonical reference is in <HIToolbox/Events.h>:

/System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/Headers/Events.h

In newer Versions of MacOS the "Events.h" moved to here:

/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/Headers/Events.h

Below is a list of the common key codes for quick reference, taken from Events.h.

If you need to use these keycodes in an application, you should include the Carbon framework:

Objective-C:
#include <Carbon/Carbon.h>

Swift:
import Carbon.HIToolbox

You can then use the kVK_ANSI_A constants directly.


WARNING

The key constants reference physical keys on the keyboard. Their output changes if the typist is using a different keyboard layout. The letters in the constants correspond only to the U.S. QWERTY keyboard layout.

For example, the left ring-finger key on the homerow:

QWERTY keyboard layout > s > kVK_ANSI_S > "s"
Dvorak keyboard layout > o > kVK_ANSI_S > "o"

Strategies for layout-agnostic conversion of keycode to string, and vice versa, are discussed here:

How to convert ASCII character to CGKeyCode?


From Events.h:

/*
 *  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_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
};

Macintosh Toolbox Essentials illustrates the physical locations of these virtual key codes for the Apple Extended Keyboard II in Figure 2-10:

Nick Moore

Found an answer here.

So:

  • Command key is 55
  • Shift is 56
  • Caps Lock 57
  • Option is 58
  • Control is 59.

here is the all keycodes. You can look from there...or there is an app in mac appstore named "Key Codes" download it and it can show you the keycode of that u pressed a key.

Here's some prebuilt Objective-C dictionaries if anyone wants to type ansi characters:

NSDictionary *lowerCaseCodes = @{
                                     @"Q" : [NSNumber numberWithInteger:12],
                                     @"W" : [NSNumber numberWithInteger:    13],
                                     @"E" : [NSNumber numberWithInteger:    14],
                                     @"R" : [NSNumber numberWithInteger:    15],
                                     @"T" : [NSNumber numberWithInteger:    17],
                                     @"Y" : [NSNumber numberWithInteger:    16],
                                     @"U" : [NSNumber numberWithInteger:    32],
                                     @"I" : [NSNumber numberWithInteger:    34],
                                     @"O" : [NSNumber numberWithInteger:    31],
                                     @"P" : [NSNumber numberWithInteger:    35],
                                     @"A" : [NSNumber numberWithInteger:    0],
                                     @"S" : [NSNumber numberWithInteger:    1],
                                     @"D" : [NSNumber numberWithInteger:    2],
                                     @"F" : [NSNumber numberWithInteger:    3],
                                     @"G" : [NSNumber numberWithInteger:    5],
                                     @"H" : [NSNumber numberWithInteger:    4],
                                     @"J" : [NSNumber numberWithInteger:    38],
                                     @"K" : [NSNumber numberWithInteger:    40],
                                     @"L" : [NSNumber numberWithInteger:    37],
                                     @"Z" : [NSNumber numberWithInteger:    6],
                                     @"X" : [NSNumber numberWithInteger:    7],
                                     @"C" : [NSNumber numberWithInteger:    8],
                                     @"V" : [NSNumber numberWithInteger:    9],
                                     @"B" : [NSNumber numberWithInteger:    11],
                                     @"N" : [NSNumber numberWithInteger:    45],
                                     @"M" : [NSNumber numberWithInteger:    46],
                                     @"0" : [NSNumber numberWithInteger:    29],
                                     @"1" : [NSNumber numberWithInteger:    18],
                                     @"2" : [NSNumber numberWithInteger:    19],
                                     @"3" : [NSNumber numberWithInteger:    20],
                                     @"4" : [NSNumber numberWithInteger:    21],
                                     @"5" : [NSNumber numberWithInteger:    23],
                                     @"6" : [NSNumber numberWithInteger:    22],
                                     @"7" : [NSNumber numberWithInteger:    26],
                                     @"8" : [NSNumber numberWithInteger:    28],
                                     @"9" : [NSNumber numberWithInteger:    25],
                                     @" " : [NSNumber numberWithInteger:    49],
                                     @"." : [NSNumber numberWithInteger:    47],
                                     @"," : [NSNumber numberWithInteger:    43],
                                     @"/" : [NSNumber numberWithInteger:    44],
                                     @";" : [NSNumber numberWithInteger:    41],
                                     @"'" : [NSNumber numberWithInteger:    39],
                                     @"[" : [NSNumber numberWithInteger:    33],
                                     @"]" : [NSNumber numberWithInteger:    30],
                                     @"\\" : [NSNumber numberWithInteger:    42],
                                     @"-" : [NSNumber numberWithInteger:    27],
                                     @"=" : [NSNumber numberWithInteger:    24]
                                     };

        NSDictionary *shiftCodes = @{//these keys must be used in conjunction with the shift key
                                     @"<" : [NSNumber numberWithInteger:    43],
                                     @">" : [NSNumber numberWithInteger:    47],
                                     @"?" : [NSNumber numberWithInteger:    44],
                                     @":" : [NSNumber numberWithInteger:    41],
                                     @"\"" : [NSNumber numberWithInteger:   39],
                                     @"{" : [NSNumber numberWithInteger:    33],
                                     @"}" : [NSNumber numberWithInteger:    30],
                                     @"|" : [NSNumber numberWithInteger:    42],
                                     @")" : [NSNumber numberWithInteger:    29],
                                     @"!" : [NSNumber numberWithInteger:    18],
                                     @"@" : [NSNumber numberWithInteger:    19],
                                     @"#" : [NSNumber numberWithInteger:    20],
                                     @"$" : [NSNumber numberWithInteger:    21],
                                     @"%" : [NSNumber numberWithInteger:    23],
                                     @"^" : [NSNumber numberWithInteger:    22],
                                     @"&" : [NSNumber numberWithInteger:    26],
                                     @"*" : [NSNumber numberWithInteger:    28],
                                     @"(" : [NSNumber numberWithInteger:    25],
                                     @"_" : [NSNumber numberWithInteger:    27],
                                     @"+" : [NSNumber numberWithInteger:    24]
                                     };
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!