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 6
, shift est 56
.
Il doit y avoir une liste de codes de clé virtuels Mac quelque part?
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
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.
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 layout
> s > kVK_ANSI_S
> "s"
Dvorak keyboard layout
> o > 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
:
Trouvé une réponse ici .
Alors:
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]
};