Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

I'm using CGEventCreateKeyboardEvent and need to know what CGKeyCode values to use.

Specifically, I am after the key code for the Command key. The docs give examples for other keys: z is 6, shift is 56.

There must be a list of Mac virtual keycodes somewhere?

like image 985
Nick Moore Avatar asked Jul 08 '10 10:07

Nick Moore


People also ask

How do I find keystrokes on my Mac?

On your Mac, click the Input menu in the menu bar, then choose Show Keyboard Viewer. If the command isn't shown, choose Apple menu > System Preferences, click Keyboard , click Input Sources, then select “Show Input menu in menu bar.”

How do I find a keycode?

Finding the key codeSometimes the key code is in the vehicle manual or on a label with the lock or key. On the key. It would be an engraved or hewn in code. A code that consists of raised lettering is not a key code, it is the key blank number.

What are virtual key codes?

Virtual Key Codes shows the symbolic constant names, hexadecimal values, and keyboard equivalents for the virtual-key codes used by the Microsoft Windows operating system. These codes work in the console window, but not the home window. The codes are listed in numeric order.


2 Answers

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:

Virtual key codes for the Apple Extended Keyboard II

like image 73
pkamb Avatar answered Oct 05 '22 15:10

pkamb


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 
like image 37
mbauman Avatar answered Oct 05 '22 17:10

mbauman