web-dev-qa-db-fra.com

Où puis-je trouver une liste des codes de clé virtuelle Mac?

J'utilise CGEventCreateKeyboardEvent et j'ai besoin de savoir quelles valeurs CGKeyCode utiliser.

Plus précisément, je suis après le code de la clé Command clé. La documentation donne des exemples pour d'autres clés: z est 6shift est 56.

Il doit y avoir une liste de codes de clé virtuels Mac quelque part?

70
Nick Moore

La référence la plus canonique est en <HIToolbox/Events.h>:

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

Dans les nouvelles versions de MacOS, le fichier "Events.h" a été déplacé ici:

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

Vous trouverez ci-dessous une liste des codes de clé courants pour référence rapide, extraits de Events.h.

Si vous devez utiliser ces codes clés dans une application, vous devez inclure le cadre Carbon:

Objectif c:
#include <Carbon/Carbon.h>

Rapide:
import Carbon.HIToolbox

Vous pouvez ensuite utiliser le kVK_ANSI_A constantes directement.


ATTENTION

Les constantes de clé font référence aux touches physiques du clavier. Leur sortie change si le dactylographe utilise une disposition de clavier différente. Les lettres des constantes correspondent uniquement à la disposition du clavier américain QWERTY).

Par exemple, la touche de l'annulaire gauche sur le circuit:

QWERTY keyboard layouts > kVK_ANSI_S> "s"
Dvorak keyboard layouto > kVK_ANSI_S> "o"

Les stratégies pour la conversion du code de touche en chaîne, et vice versa, ne tenant pas compte de la présentation, sont décrites ici:

Comment convertir ASCII caractère en CGKeyCode?


De 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 illustre les emplacements physiques de ces codes de clé virtuelle pour le Apple Extended Keyboard II in Figure 2-10:

Virtual key codes for the Apple Extended Keyboard II

66
pkamb

Trouvé une réponse ici .

Alors:

  • La touche de commande est 55
  • Shift est de 56
  • Caps Lock 57
  • L'option est 58
  • Le contrôle est 59.
18
Nick Moore

ici sont tous les codes clés. Vous pouvez regarder à partir de là ... ou il y a une application dans mac appstore nommée "Key Codes", téléchargez-la et elle vous montrera le code clé de cette touche.

3
the_ex

Voici quelques dictionnaires Objective-C préconfigurés si vous souhaitez taper des caractères ansi:

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]
                                     };
0
Reece