Swift Virtual KeyCode Reference
This is a copy of the Key Codes listed on in the article Detecting Key Presses in macOS Apps using SwiftUI in case it ever disappears.
/* * From Events.h in Carbon.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. */ static let kVK_ANSI_A : CGKeyCode = 0x00 static let kVK_ANSI_S : CGKeyCode = 0x01 static let kVK_ANSI_D : CGKeyCode = 0x02 static let kVK_ANSI_F : CGKeyCode = 0x03 static let kVK_ANSI_H : CGKeyCode = 0x04 static let kVK_ANSI_G : CGKeyCode = 0x05 static let kVK_ANSI_Z : CGKeyCode = 0x06 static let kVK_ANSI_X : CGKeyCode = 0x07 static let kVK_ANSI_C : CGKeyCode = 0x08 static let kVK_ANSI_V : CGKeyCode = 0x09 static let kVK_ANSI_B : CGKeyCode = 0x0B static let kVK_ANSI_Q : CGKeyCode = 0x0C static let kVK_ANSI_W : CGKeyCode = 0x0D static let kVK_ANSI_E : CGKeyCode = 0x0E static let kVK_ANSI_R : CGKeyCode = 0x0F static let kVK_ANSI_Y : CGKeyCode = 0x10 static let kVK_ANSI_T : CGKeyCode = 0x11 static let kVK_ANSI_1 : CGKeyCode = 0x12 static let kVK_ANSI_2 : CGKeyCode = 0x13 static let kVK_ANSI_3 : CGKeyCode = 0x14 static let kVK_ANSI_4 : CGKeyCode = 0x15 static let kVK_ANSI_6 : CGKeyCode = 0x16 static let kVK_ANSI_5 : CGKeyCode = 0x17 static let kVK_ANSI_Equal : CGKeyCode = 0x18 static let kVK_ANSI_9 : CGKeyCode = 0x19 static let kVK_ANSI_7 : CGKeyCode = 0x1A static let kVK_ANSI_Minus : CGKeyCode = 0x1B static let kVK_ANSI_8 : CGKeyCode = 0x1C static let kVK_ANSI_0 : CGKeyCode = 0x1D static let kVK_ANSI_RightBracket : CGKeyCode = 0x1E static let kVK_ANSI_O : CGKeyCode = 0x1F static let kVK_ANSI_U : CGKeyCode = 0x20 static let kVK_ANSI_LeftBracket : CGKeyCode = 0x21 static let kVK_ANSI_I : CGKeyCode = 0x22 static let kVK_ANSI_P : CGKeyCode = 0x23 static let kVK_ANSI_L : CGKeyCode = 0x25 static let kVK_ANSI_J : CGKeyCode = 0x26 static let kVK_ANSI_Quote : CGKeyCode = 0x27 static let kVK_ANSI_K : CGKeyCode = 0x28 static let kVK_ANSI_Semicolon : CGKeyCode = 0x29 static let kVK_ANSI_Backslash : CGKeyCode = 0x2A static let kVK_ANSI_Comma : CGKeyCode = 0x2B static let kVK_ANSI_Slash : CGKeyCode = 0x2C static let kVK_ANSI_N : CGKeyCode = 0x2D static let kVK_ANSI_M : CGKeyCode = 0x2E static let kVK_ANSI_Period : CGKeyCode = 0x2F static let kVK_ANSI_Grave : CGKeyCode = 0x32 static let kVK_ANSI_KeypadDecimal : CGKeyCode = 0x41 static let kVK_ANSI_KeypadMultiply : CGKeyCode = 0x43 static let kVK_ANSI_KeypadPlus : CGKeyCode = 0x45 static let kVK_ANSI_KeypadClear : CGKeyCode = 0x47 static let kVK_ANSI_KeypadDivide : CGKeyCode = 0x4B static let kVK_ANSI_KeypadEnter : CGKeyCode = 0x4C static let kVK_ANSI_KeypadMinus : CGKeyCode = 0x4E static let kVK_ANSI_KeypadEquals : CGKeyCode = 0x51 static let kVK_ANSI_Keypad0 : CGKeyCode = 0x52 static let kVK_ANSI_Keypad1 : CGKeyCode = 0x53 static let kVK_ANSI_Keypad2 : CGKeyCode = 0x54 static let kVK_ANSI_Keypad3 : CGKeyCode = 0x55 static let kVK_ANSI_Keypad4 : CGKeyCode = 0x56 static let kVK_ANSI_Keypad5 : CGKeyCode = 0x57 static let kVK_ANSI_Keypad6 : CGKeyCode = 0x58 static let kVK_ANSI_Keypad7 : CGKeyCode = 0x59 static let kVK_ANSI_Keypad8 : CGKeyCode = 0x5B static let kVK_ANSI_Keypad9 : CGKeyCode = 0x5C // keycodes for keys that are independent of keyboard layout static let kVK_Return : CGKeyCode = 0x24 static let kVK_Tab : CGKeyCode = 0x30 static let kVK_Space : CGKeyCode = 0x31 static let kVK_Delete : CGKeyCode = 0x33 static let kVK_Escape : CGKeyCode = 0x35 static let kVK_Command : CGKeyCode = 0x37 static let kVK_Shift : CGKeyCode = 0x38 static let kVK_CapsLock : CGKeyCode = 0x39 static let kVK_Option : CGKeyCode = 0x3A static let kVK_Control : CGKeyCode = 0x3B static let kVK_RightCommand : CGKeyCode = 0x36 // Out of order static let kVK_RightShift : CGKeyCode = 0x3C static let kVK_RightOption : CGKeyCode = 0x3D static let kVK_RightControl : CGKeyCode = 0x3E static let kVK_Function : CGKeyCode = 0x3F static let kVK_F17 : CGKeyCode = 0x40 static let kVK_VolumeUp : CGKeyCode = 0x48 static let kVK_VolumeDown : CGKeyCode = 0x49 static let kVK_Mute : CGKeyCode = 0x4A static let kVK_F18 : CGKeyCode = 0x4F static let kVK_F19 : CGKeyCode = 0x50 static let kVK_F20 : CGKeyCode = 0x5A static let kVK_F5 : CGKeyCode = 0x60 static let kVK_F6 : CGKeyCode = 0x61 static let kVK_F7 : CGKeyCode = 0x62 static let kVK_F3 : CGKeyCode = 0x63 static let kVK_F8 : CGKeyCode = 0x64 static let kVK_F9 : CGKeyCode = 0x65 static let kVK_F11 : CGKeyCode = 0x67 static let kVK_F13 : CGKeyCode = 0x69 static let kVK_F16 : CGKeyCode = 0x6A static let kVK_F14 : CGKeyCode = 0x6B static let kVK_F10 : CGKeyCode = 0x6D static let kVK_F12 : CGKeyCode = 0x6F static let kVK_F15 : CGKeyCode = 0x71 static let kVK_Help : CGKeyCode = 0x72 static let kVK_Home : CGKeyCode = 0x73 static let kVK_PageUp : CGKeyCode = 0x74 static let kVK_ForwardDelete : CGKeyCode = 0x75 static let kVK_F4 : CGKeyCode = 0x76 static let kVK_End : CGKeyCode = 0x77 static let kVK_F2 : CGKeyCode = 0x78 static let kVK_PageDown : CGKeyCode = 0x79 static let kVK_F1 : CGKeyCode = 0x7A static let kVK_LeftArrow : CGKeyCode = 0x7B static let kVK_RightArrow : CGKeyCode = 0x7C static let kVK_DownArrow : CGKeyCode = 0x7D static let kVK_UpArrow : CGKeyCode = 0x7E // ISO keyboards only static let kVK_ISO_Section : CGKeyCode = 0x0A // JIS keyboards only static let kVK_JIS_Yen : CGKeyCode = 0x5D static let kVK_JIS_Underscore : CGKeyCode = 0x5E static let kVK_JIS_KeypadComma : CGKeyCode = 0x5F static let kVK_JIS_Eisu : CGKeyCode = 0x66 static let kVK_JIS_Kana : CGKeyCode = 0x68
-- end of line --