Де я можу знайти список кодів віртуальних ключів Mac?


80

Я використовую CGEventCreateKeyboardEventі повинен знати щоCGKeyCode значення використовувати.

Зокрема, я шукаю код ключа для Commandключа. У документації наводяться приклади для інших ключів: zє 6, shiftє56 .

Там десь повинен бути список віртуальних кодів Mac?




7
@davidcondrey Ключові коди, використовувані Javascript, не пов'язані між собою. Вони повністю відрізняються від віртуальних кодів ключів, що використовуються macOS.
duskwuff -active-

Відповіді:


80

Більш канонічне посилання є в <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

8
Також зауважте, що якщо ви включите <Carbon/Carbon.h>(або цей заголовок безпосередньо), kVK_*символи виявляться. Отже, у вашому прикладі ви можете використовувати kVK_Commandбезпосередньо.
Matt B.

@MattB. +1 за #include <Carbon/Carbon.h>. Потім можна просто набирати текст kVK_ANSI_A.
пкамб

1
Використання кодів символів з Events.h чудово працює і для нового API iOS UIKeyCommand
Андреас Карлссон,

7
У Swift, import Carbon.HIToolboxщоб отримати доступ до цих констант.
грабувати майофф

4
Я прочитав на developer.apple.com, що HIToolbox.framework Carbon застарілий. Але я не можу знайти заміну в Cocoa.framework. Вони припинили це, не надавши заміну? Чи безпечно використовувати цю структуру Carbon у сучасних додатках?
Даміан Дюфо

90

Нижче наведено перелік загальних кодів клавіш для швидкого ознайомлення, взяті з Events.h.

Якщо вам потрібно використовувати ці ключові коди в додатку, ви повинні включити структуру Carbon:

Завдання-C:
#include <Carbon/Carbon.h>

Стрімкий:
import Carbon.HIToolbox

Потім ви можете використовувати kVK_ANSI_Aконстанти безпосередньо.


УВАГА

Константи клавіш посилаються на фізичні клавіші на клавіатурі. Їх вихід змінюється, якщо друкарка використовує іншу розкладку клавіатури. Букви в константах відповідають лише американській розкладці клавіатури QWERTY.

Наприклад, ліва безіменна клавіша на домашній стрілці:

QWERTY keyboard layout> s> kVK_ANSI_S> "s"
Dvorak keyboard layout> o>kVK_ANSI_S >"o"

Тут обговорюються стратегії агностичного перетворення коду ключа в рядок та навпаки:

Як перетворити символ ASCII на CGKeyCode?


Від 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:

Віртуальні коди клавіш для Apple Extended Keyboard II


1
Для візуалізації перегляньте віртуальні коди клавіш для розширеної клавіатури Apple II з Macintosh Toolbox Essentials, доступних тут .
Дейв,

1
варто згадати events.h можна знайти за адресою /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/Headers
bazz

@ MichałZiobro Клавіша / кнопка живлення трохи хитра, генеруючи кілька NSSystemDefinedподій клавіатури з різними кодами клавіш та підтипами, такими як NX_POWER_KEYі NX_SUBTYPE_POWER_KEY. Будь ласка, перегляньте джерело мого PowerKeyдодатка на github для отримання додаткової інформації: github.com/pkamb/PowerKey/blob/master/PowerKey/…
pkamb

1
Чому відсутні деякі клавіші, наприклад 0x66 або 0x68 (але 0x67 існує) ...?
Blaszard


4

Ось усі коди клавіш.

Ось таблиця з деякими кодами клавіш для трьох платформ. Він заснований на розширеній розкладці клавіатури США.

http://web.archive.org/web/20100501161453/http://www.classicteck.com/rbarticles/mackeyboard.php

Або в магазині Mac App Store є програма з назвою "Ключові коди". Завантажте його, щоб побачити коди клавіш клавіш, які ви натискаєте.

Ключові коди:
https://itunes.apple.com/tr/app/key-codes/id414568915?l=tr&mt=12


1

На додаток до кодів клавіш, наданих в інших відповідях, існують також "ідентифікатори використання", які використовуються для перепризначення ключів в нових API, представлених у macOS Sierra:

Технічна примітка 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
...

1
Зверніть увагу, що значення в цій таблиці відрізняються від тих, які ви отримуєте NSEvent.keyCode.
Остін

0

Ось декілька готових словників Objective-C, якщо хтось хоче ввести символи ansi:

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)
                                };

за допомогою @(42)зменшення шуму numberWithInteger: 42. Але така пошукова таблиця не є хорошою ідеєю через невідповідність інших розкладках клавіатури.
пкамб
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.