Mac 가상 키 코드 목록은 어디에서 찾을 수 있습니까?


80

나는 사용 CGEventCreateKeyboardEvent하고 있으며 어떤 CGKeyCode값을 사용 할지 알아야 합니다.

특히 키의 키 코드 뒤에 Command있습니다. 문서는 다른 키에 대한 예를 제공합니다 : zis 6, shiftis 56.

어딘가에 Mac 가상 키 코드 목록이 있어야합니까?




7
@davidcondrey Javascript에서 사용하는 키 코드는 관련이 없습니다. macOS에서 사용하는 가상 키 코드와 완전히 다릅니다.
duskwuff -inactive- 2007

답변:


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.
pkamb

1
Events.h에서 문자 코드를 사용하는 것은 물론 새로운 iOS7에 UIKeyCommand API에 대한 좋은 작품
안드레아스 칼슨

7
Swift에서 import Carbon.HIToolbox이러한 상수에 액세스합니다.
rob mayoff

4
developer.apple.com 에서 Carbon의 HIToolbox.framework가 더 이상 사용되지 않는다고 읽었습니다 . 그러나 Cocoa.framework에서 대체품을 찾을 수 없습니다. 교체를 제공하지 않고이를 지원 중단 했습니까? 최신 앱에서이 Carbon 프레임 워크를 사용하는 것이 안전합니까?
Damiaan Dufaux

90

다음은에서 가져온 빠른 참조를위한 공통 키 코드 목록입니다 Events.h.

애플리케이션에서 이러한 키 코드를 사용해야하는 경우 Carbon 프레임 워크를 포함해야합니다.

목표 -C :
#include <Carbon/Carbon.h>

빠른:
import Carbon.HIToolbox

그런 다음 kVK_ANSI_A상수를 직접 사용할 수 있습니다 .


경고

키 상수 는 키보드의 물리적 키 를 참조 합니다. 타이피스트가 다른 키보드 레이아웃을 사용하면 출력이 변경됩니다. 상수의 문자는 US 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 확장 키보드 II의 가상 키 코드


1
시각화를 위해 여기에 있는 Macintosh Toolbox Essentials에서 Apple Extended Keyboard II의 가상 키 코드를 확인 하십시오 .
Dave

1
events.h를 언급 할 가치가있는 곳은 /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/Headers
bazz 2014

MichałZiobro 전원 키 @ / 버튼을 여러 발생, 조금 까다 롭습니다 NSSystemDefined같은 다양한 키 코드 및 하위 유형과 타입 키보드 이벤트 NX_POWER_KEYNX_SUBTYPE_POWER_KEY. 자세한 내용 PowerKey은 github 의 내 앱 소스 를 참조하십시오. github.com/pkamb/PowerKey/blob/master/PowerKey/…
pkamb

1
0x66 또는 0x68 (하지만 0x67이 존재 함)과 같은 일부 키가 누락 된 이유는 무엇입니까?
Blaszard

18

여기 에서 답을 찾았 습니다 .

그래서:

  • Command 키는 55입니다.
  • 56 교대
  • Caps Lock 57
  • 옵션은 58입니다.
  • 컨트롤은 59입니다.

... archive.org 버전에서 이미지가 깨졌습니다.
Casey Watson

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

다른 답변에 제공된 키 코드 외에도 macOS Sierra에 도입 된 최신 API에서 키 다시 매핑에 사용되는 "사용 ID"도 있습니다.

기술 노트 TN2450

macOS 10.12 Sierra에서 키 다시 매핑

macOS Sierra 10.12에서 키 재 매핑 메커니즘이 변경되었습니다. 이 기술 노트는 macOS Sierra 10.12를 지원하도록 소프트웨어를 업데이트 할 수 있도록 키 재 매핑 소프트웨어 개발자를위한 것입니다. 이 기술 노트에서는 macOS 10.12의 키 리매핑 기능을 구현하기위한 2 가지 솔루션을 제시합니다.

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.
Austin

0

누군가 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)
                                };

사용 @(42)의 소음에 아래로 인하 numberWithInteger: 42. 그러나 이와 같은 조회 테이블은 다른 키보드 레이아웃의 불일치로 인해 좋은 생각이 아닙니다.
pkamb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.