我正在使用CGEventCreateKeyboardEvent
并且需要知道CGKeyCode
要使用什么值。
具体来说,我在寻找钥匙的钥匙代码Command。文档给出了其他键的示例:zis 6
,shiftis 56
。
某处必须有Mac虚拟键码列表吗?
我正在使用CGEventCreateKeyboardEvent
并且需要知道CGKeyCode
要使用什么值。
具体来说,我在寻找钥匙的钥匙代码Command。文档给出了其他键的示例:zis 6
,shiftis 56
。
某处必须有Mac虚拟键码列表吗?
以下是供快速参考的常用键代码列表,取自Events.h
.
如果您需要在应用程序中使用这些键码,您应该包含 Carbon 框架:
目标-C:
#include <Carbon/Carbon.h>
迅速:
import Carbon.HIToolbox
然后,您可以kVK_ANSI_A
直接使用常量。
键常量引用键盘上的物理键。如果打字员使用不同的键盘布局,它们的输出会发生变化。常量中的字母仅对应于美国 QWERTY 键盘布局。
例如,homerow 上的左无名指键:
QWERTY keyboard layout
> s> kVK_ANSI_S
> "s"
Dvorak keyboard layout
> o> kVK_ANSI_S
>"o"
此处讨论了与布局无关的键码到字符串的转换策略,反之亦然:
来自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说明了 Apple Extended Keyboard II 的这些虚拟键代码的物理位置Figure 2-10
:
更规范的参考在<HIToolbox/Events.h>
:
/System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/Headers/Events.h
在较新版本的 MacOS 中,“Events.h”移至此处:
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/Headers/Events.h
这是所有键码。
这是一个表格,其中包含三个平台的一些键码。它基于美国扩展键盘布局。
http://web.archive.org/web/20100501161453/http://www.classicteck.com/rbarticles/mackeyboard.php
或者,Mac App Store 中有一个名为“Key Codes”的应用程序。下载它以查看您按下的键的键码。
关键代码:
https ://itunes.apple.com/tr/app/key-codes/id414568915?l=tr&mt=12
除了其他答案中提供的键码之外,在 macOS Sierra 中引入的较新 API 中,还有用于键重新映射的“使用 ID”:
技术说明 TN2450
在 macOS 10.12 Sierra 中重新映射键
在 macOS Sierra 10.12 下,更改了键重映射机制。本技术说明适用于关键重映射软件的开发人员,以便他们可以更新其软件以支持 macOS Sierra 10.12。我们在本技术说明中介绍了 2 个用于实现 macOS 10.12 的密钥重新映射功能的解决方案。
https://developer.apple.com/library/archive/technotes/tn2450/_index.html
Keyboard a and A - 0x04
Keyboard b and B - 0x05
Keyboard c and C - 0x06
Keyboard d and D - 0x07
Keyboard e and E - 0x08
...
自 macOS Sierra 10.12 以来,keyCode
一直根据通用串行总线 HID 使用表(转到部分:10 键盘/键盘页面,第 51 页)。
Usage Usage ID (hex)
Keyboard a and A 0x04
Keyboard b and B 0x05
Keyboard c and C 0x06
Keyboard d and D 0x07
Keyboard e and E 0x08
Keyboard f and F 0x09
Keyboard g and G 0x0A
Keyboard h and H 0x0B
Keyboard i and I 0x0C
Keyboard j and J 0x0D
Keyboard k and K 0x0E
Keyboard l and L 0x0F
Keyboard m and M 0x10
Keyboard n and N 0x11
Keyboard o and O 0x12
Keyboard p and P 0x13
Keyboard q and Q 0x14
Keyboard r and R 0x15
Keyboard s and S 0x16
Keyboard t and T 0x17
Keyboard u and U 0x18
Keyboard v and V 0x19
Keyboard w and W 0x1A
Keyboard x and X 0x1B
Keyboard y and Y 0x1C
Keyboard z and Z 0x1D
Keyboard 1 and ! 0x1E
Keyboard 2 and @ 0x1F
Keyboard 3 and # 0x20
Keyboard 4 and $ 0x21
Keyboard 5 and % 0x22
Keyboard 6 and ^ 0x23
Keyboard 7 and & 0x24
Keyboard 8 and * 0x25
Keyboard 9 and ( 0x26
Keyboard 0 and ) 0x27
Keyboard Return (Enter) 0x28
Keyboard Escape 0x29
Keyboard Delete (Backspace)0x2A
Keyboard Tab 0x2B
Keyboard Spacebar 0x2C
Keyboard - and _ 0x2D
Keyboard = and + 0x2E
Keyboard [ and { 0x2F
Keyboard ] and } 0x30
Keyboard \ and | 0x31
Keyboard Non-US # and ~ 0x32
Keyboard ; and : 0x33
Keyboard ' and " 0x34
Keyboard Grave Accent and Tilde 0x35
Keyboard , and "<" 0x36
Keyboard . and ">" 0x37
Keyboard / and ? 0x38
Keyboard Caps Lock 0x39
Keyboard F1 0x3A
Keyboard F2 0x3B
Keyboard F3 0x3C
Keyboard F4 0x3D
Keyboard F5 0x3E
Keyboard F6 0x3F
Keyboard F7 0x40
Keyboard F8 0x41
Keyboard F9 0x42
Keyboard F10 0x43
Keyboard F11 0x44
Keyboard F12 0x45
Keyboard Print Screen 0x46
Keyboard Scroll Lock 0x47
Keyboard Pause 0x48
Keyboard Insert 0x49
Keyboard Home 0x4A
Keyboard Page Up 0x4B
Keyboard Delete Forward 0x4C
Keyboard End 0x4D
Keyboard Page Down 0x4E
Keyboard Right Arrow 0x4F
Keyboard Left Arrow 0x50
Keyboard Down Arrow 0x51
Keyboard Up Arrow 0x52
Keypad Num Lock and Clear 0x53
Keypad / 0x54
Keypad * 0x55
Keypad - 0x56
Keypad + 0x57
Keypad Enter 0x58
Keypad 1 and End 0x59
Keypad 2 and Down Arrow 0x5A
Keypad 3 and Page Down 0x5B
Keypad 4 and Left Arrow 0x5C
Keypad 5 0x5D
Keypad 6 and Right Arrow 0x5E
Keypad 7 and Home 0x5F
Keypad 8 and Up Arrow 0x60
Keypad 9 and Page Up 0x61
Keypad 0 and Insert 0x62
Keypad . and Delete 0x63
Keyboard Non-US \ and | 0x64
Keyboard Application 0x65
Keyboard Power 0x66
Keypad = 0x67
Keyboard F13 0x68
Keyboard F14 0x69
Keyboard F15 0x6A
Keyboard F16 0x6B
Keyboard F17 0x6C
Keyboard F18 0x6D
Keyboard F19 0x6E
Keyboard F20 0x6F
Keyboard F21 0x70
Keyboard F22 0x71
Keyboard F23 0x72
Keyboard F24 0x73
Keyboard Left Control 0xE0
Keyboard Left Shift 0xE1
Keyboard Left Alt 0xE2
Keyboard Left GUI 0xE3
Keyboard Right Control 0xE4
Keyboard Right Shift 0xE5
Keyboard Right Alt 0xE6
Keyboard Right GUI 0xE7
如果有人想输入 ansi 字符,这里有一些预先构建的 Objective-C 字典:
NSDictionary *lowerCaseCodes = @{
@"Q" : @(12),
@"W" : @(13),
@"E" : @(14),
@"R" : @(15),
@"T" : @(17),
@"Y" : @(16),
@"U" : @(32),
@"I" : @(34),
@"O" : @(31),
@"P" : @(35),
@"A" : @(0),
@"S" : @(1),
@"D" : @(2),
@"F" : @(3),
@"G" : @(5),
@"H" : @(4),
@"J" : @(38),
@"K" : @(40),
@"L" : @(37),
@"Z" : @(6),
@"X" : @(7),
@"C" : @(8),
@"V" : @(9),
@"B" : @(11),
@"N" : @(45),
@"M" : @(46),
@"0" : @(29),
@"1" : @(18),
@"2" : @(19),
@"3" : @(20),
@"4" : @(21),
@"5" : @(23),
@"6" : @(22),
@"7" : @(26),
@"8" : @(28),
@"9" : @(25),
@" " : @(49),
@"." : @(47),
@"," : @(43),
@"/" : @(44),
@";" : @(41),
@"'" : @(39),
@"[" : @(33),
@"]" : @(30),
@"\\" : @(42),
@"-" : @(27),
@"=" : @(24)
};
NSDictionary *shiftCodes = @{ // used in conjunction with the shift key
@"<" : @(43),
@">" : @(47),
@"?" : @(44),
@":" : @(41),
@"\"" : @(39),
@"{" : @(33),
@"}" : @(30),
@"|" : @(42),
@")" : @(29),
@"!" : @(18),
@"@" : @(19),
@"#" : @(20),
@"$" : @(21),
@"%" : @(23),
@"^" : @(22),
@"&" : @(26),
@"*" : @(28),
@"(" : @(25),
@"_" : @(27),
@"+" : @(24)
};