Skip to content

Instantly share code, notes, and snippets.

@swillits
Last active October 22, 2024 15:30
Show Gist options
  • Save swillits/df648e87016772c7f7e5dbed2b345066 to your computer and use it in GitHub Desktop.
Save swillits/df648e87016772c7f7e5dbed2b345066 to your computer and use it in GitHub Desktop.
Swift Keyboard Keycodes
struct Keycode {
// Layout-independent Keys
// eg.These key codes are always the same key on all layouts.
static let returnKey : UInt16 = 0x24
static let enter : UInt16 = 0x4C
static let tab : UInt16 = 0x30
static let space : UInt16 = 0x31
static let delete : UInt16 = 0x33
static let escape : UInt16 = 0x35
static let command : UInt16 = 0x37
static let shift : UInt16 = 0x38
static let capsLock : UInt16 = 0x39
static let option : UInt16 = 0x3A
static let control : UInt16 = 0x3B
static let rightCommand : UInt16 = 0x36
static let rightShift : UInt16 = 0x3C
static let rightOption : UInt16 = 0x3D
static let rightControl : UInt16 = 0x3E
static let leftArrow : UInt16 = 0x7B
static let rightArrow : UInt16 = 0x7C
static let downArrow : UInt16 = 0x7D
static let upArrow : UInt16 = 0x7E
static let volumeUp : UInt16 = 0x48
static let volumeDown : UInt16 = 0x49
static let mute : UInt16 = 0x4A
static let help : UInt16 = 0x72
static let home : UInt16 = 0x73
static let pageUp : UInt16 = 0x74
static let forwardDelete : UInt16 = 0x75
static let end : UInt16 = 0x77
static let pageDown : UInt16 = 0x79
static let function : UInt16 = 0x3F
static let f1 : UInt16 = 0x7A
static let f2 : UInt16 = 0x78
static let f4 : UInt16 = 0x76
static let f5 : UInt16 = 0x60
static let f6 : UInt16 = 0x61
static let f7 : UInt16 = 0x62
static let f3 : UInt16 = 0x63
static let f8 : UInt16 = 0x64
static let f9 : UInt16 = 0x65
static let f10 : UInt16 = 0x6D
static let f11 : UInt16 = 0x67
static let f12 : UInt16 = 0x6F
static let f13 : UInt16 = 0x69
static let f14 : UInt16 = 0x6B
static let f15 : UInt16 = 0x71
static let f16 : UInt16 = 0x6A
static let f17 : UInt16 = 0x40
static let f18 : UInt16 = 0x4F
static let f19 : UInt16 = 0x50
static let f20 : UInt16 = 0x5A
// US-ANSI Keyboard Positions
// eg. These key codes are for the physical key (in any keyboard layout)
// at the location of the named key in the US-ANSI layout.
static let a : UInt16 = 0x00
static let b : UInt16 = 0x0B
static let c : UInt16 = 0x08
static let d : UInt16 = 0x02
static let e : UInt16 = 0x0E
static let f : UInt16 = 0x03
static let g : UInt16 = 0x05
static let h : UInt16 = 0x04
static let i : UInt16 = 0x22
static let j : UInt16 = 0x26
static let k : UInt16 = 0x28
static let l : UInt16 = 0x25
static let m : UInt16 = 0x2E
static let n : UInt16 = 0x2D
static let o : UInt16 = 0x1F
static let p : UInt16 = 0x23
static let q : UInt16 = 0x0C
static let r : UInt16 = 0x0F
static let s : UInt16 = 0x01
static let t : UInt16 = 0x11
static let u : UInt16 = 0x20
static let v : UInt16 = 0x09
static let w : UInt16 = 0x0D
static let x : UInt16 = 0x07
static let y : UInt16 = 0x10
static let z : UInt16 = 0x06
static let zero : UInt16 = 0x1D
static let one : UInt16 = 0x12
static let two : UInt16 = 0x13
static let three : UInt16 = 0x14
static let four : UInt16 = 0x15
static let five : UInt16 = 0x17
static let six : UInt16 = 0x16
static let seven : UInt16 = 0x1A
static let eight : UInt16 = 0x1C
static let nine : UInt16 = 0x19
static let equals : UInt16 = 0x18
static let minus : UInt16 = 0x1B
static let semicolon : UInt16 = 0x29
static let apostrophe : UInt16 = 0x27
static let comma : UInt16 = 0x2B
static let period : UInt16 = 0x2F
static let forwardSlash : UInt16 = 0x2C
static let backslash : UInt16 = 0x2A
static let grave : UInt16 = 0x32
static let leftBracket : UInt16 = 0x21
static let rightBracket : UInt16 = 0x1E
static let keypadDecimal : UInt16 = 0x41
static let keypadMultiply : UInt16 = 0x43
static let keypadPlus : UInt16 = 0x45
static let keypadClear : UInt16 = 0x47
static let keypadDivide : UInt16 = 0x4B
static let keypadEnter : UInt16 = 0x4C
static let keypadMinus : UInt16 = 0x4E
static let keypadEquals : UInt16 = 0x51
static let keypad0 : UInt16 = 0x52
static let keypad1 : UInt16 = 0x53
static let keypad2 : UInt16 = 0x54
static let keypad3 : UInt16 = 0x55
static let keypad4 : UInt16 = 0x56
static let keypad5 : UInt16 = 0x57
static let keypad6 : UInt16 = 0x58
static let keypad7 : UInt16 = 0x59
static let keypad8 : UInt16 = 0x5B
static let keypad9 : UInt16 = 0x5C
}
@tindzk
Copy link

tindzk commented Jan 25, 2018

Thanks for this gist. Note that the value 0x4C is mapped twice. keypadEnter seems to be more accurate for this value. enter is commonly mapped to 0x24 (which is called returnKey here).

@DominikBucher12
Copy link

Hey :) Thank you very much for this snippet... Is there any way to create CGEvent with desired keyboard layout? Like not needing to change keyboard layout to US before virtually pressing the key?

@rajabdearly
Copy link

Hello, how to convert this 0x24 and 0x4C to integer keycodes to write it on adb shell?

@cbjeukendrup
Copy link

@rajabdearly They are both integers, but these are in hexadecimal notation. It would not surprise me if you can also use this notation in other places, but if not, 'converting' is easy: see for example https://www.rapidtables.com/convert/number/how-decimal-to-hex.html and https://www.rapidtables.com/convert/number/hex-to-decimal.html

@ris58h
Copy link

ris58h commented Aug 19, 2023

Right Command is missing. Should be

static let rightCommand              : UInt16 = 0x36

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment