Please note, this is a STATIC archive of website developer.mozilla.org from 03 Nov 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

Revision 1106657 of KeyboardEvent.key

  • Revision slug: Web/API/KeyboardEvent/key
  • Revision title: KeyboardEvent.key
  • Revision id: 1106657
  • Created:
  • Creator: Sheppy
  • Is current revision? No
  • Comment Finished Linux dead keys, with the exception of a few that don't seem to be adequately documented anywhere. This article is as done as it will get for now.

Revision Content

{{APIRef("DOM Events")}}{{Draft}}

The KeyboardEvent.key read-only property returns the value of a key or keys pressed by the user. Its value is determined as follows:

  • If the pressed key has a printed representation, the returned value is a non-empty Unicode character string containing the printable representation of the key.
  • If the pressed key is a control or special character, the returned value is one of the pre-defined key values.
  • If the KeyboardEvent represents the press of a dead key, the key value must be "Dead".
  • If more than one key is pressed and the combination includes a modifier that makes the resulting keystroke non printing, the returned value is the printable character. For example, if the combination were Control + a, the letter "a" is returned.
  • Some specialty keyboard keys (such as the extended keys for controlling media on multimedia keyboards) don't generate key codes on Windows; instead, they trigger WM_APPCOMMAND events. These events get mapped to DOM keyboard events, and are listed among the "Virtual key codes" for Windows, even though they aren't actually key codes.
  • If the key cannot be identified, the returned value is "Unidentified".

This page is undergoing heavy updating to improve its layout, modernize its content, and bring everything up to date. Newer content is nearer the top; to find the older tables, see {{anch("Previous versions of tables")}}. Once the updates are finished, that content will be removed. No information should be lost once it's all done.

Example

This example uses {{domxref("EventTarget.addEventListener()")}} to listen for {{event("keydown")}} events. When they occur,  the key's value is checked to see if it's one of the keys the code is interested in, and if it is, it gets processed in some way (possibly by steering a spacecraft, perhaps by changing the selected cell in a spreadsheet).

window.addEventListener("keydown", function (event) {
  if (event.defaultPrevented) {
    return; // Should do nothing if the key event was already consumed.
  }

  switch (event.key) {
    case "ArrowDown":
      // Do something for "down arrow" key press.
      break;
    case "ArrowUp":
      // Do something for "up arrow" key press.
      break;
    case "ArrowLeft":
      // Do something for "left arrow" key press.
      break;
    case "ArrowRight":
      // Do something for "right arrow" key press.
      break;
    case "Enter":
      // Do something for "enter" or "return" key press.
      break;
    case "Escape":
      // Do something for "esc" key press.
      break;
    default:
      return; // Quit when this doesn't handle the key event.
  }

  // Consume the event to avoid it being handled twice
  event.preventDefault();
}, true);

Specification

Specification Status Comment
{{SpecName('DOM3 Events', '#widl-KeyboardEvent-key', 'KeyboardEvent.key')}} {{Spec2('DOM3 Events')}} Initial definition, included key values.

Browser compatibility

{{CompatibilityTable}}

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Basic support

{{CompatChrome(51.0)}}

{{CompatGeckoDesktop("23.0")}} 9.0[1] 38.0 {{CompatNo}} [2]
non-printable keys {{CompatChrome(51.0)}} {{CompatGeckoDesktop("23.0")}} 9.0[1] 38.0 {{CompatNo}}
printable keys {{CompatChrome(51.0)}} {{CompatGeckoDesktop("29.0")}} 9.0[1] 38.0 {{CompatNo}}
dead key {{CompatChrome(51.0)}} {{CompatNo}} {{CompatNo}} 38.0 {{CompatNo}}
s
Feature Android Android Webview Firefox Mobile (Gecko) IE Phone Opera Mobile Safari Mobile Chrome for Android
Basic support {{CompatNo}} {{CompatChrome(51.0)}} {{CompatGeckoMobile("23.0")}} {{CompatUnknown}} 38.0 {{CompatNo}} [2] {{CompatChrome(51.0)}}
non-printable keys of virtual keyboard {{CompatNo}} {{CompatChrome(51.0)}} {{CompatGeckoMobile("23.0")}} {{CompatUnknown}} 38.0 {{CompatNo}} {{CompatChrome(51.0)}}
printable keys of virtual keyboard {{CompatNo}} {{CompatChrome(51.0)}} {{CompatUnknown}} {{CompatUnknown}} 38.0 {{CompatNo}} {{CompatChrome(51.0)}}
non-printable keys of physical keyboard {{CompatNo}} {{CompatChrome(51.0)}} {{CompatGeckoMobile("23.0")}} {{CompatUnknown}} 38.0 {{CompatNo}} {{CompatChrome(51.0)}}
printable keys of physical keyboard {{CompatNo}} {{CompatChrome(51.0)}} {{CompatGeckoMobile("29.0")}} {{CompatUnknown}} 38.0 {{CompatNo}} {{CompatChrome(51.0)}}

[1]: Internet Explorer's implementation does not completely match the current spec because it is based on an older version of the spec.

[2]: WebKit bug #69029

Key values

The tables below list the standard key values in various categories of key, with an explanation of what the key is typically used for. Corresponding virtual keycodes for common platforms are included where available.

Special values

Values of key which have special meanings other than identifying a specific key or character.

KeyboardEvent.key Value Description Virtual Keycode
Windows Mac Linux Android
"Unidentified" The user agent wasn't able to map the event's virtual keycode to a specific key value. This can happen due to hardware or software constraints, or because of constraints around the platform on which the user agent is running. varies varies varies varies

Modifier keys

Modifiers are special keys which are used to generate special characters or cause special actions when used in combination with other keys. Examples include the Shift and Control keys, and lock keys such as Caps Lock and NumLock.

KeyboardEvent.key Value Description Virtual Keycode
Windows Mac Linux Android
"Alt" The Alt (Alternative) key. VK_MENU (0x12)
VK_LMENU (0xA4)
VK_RMENU (0xA5)
kVK_Option (0x3A)
kVK_RightOption (0x3D)
GDK_KEY_Alt_L (0xFFE9)
GDK_KEY_Alt_R (0xFFEA)
Qt::Key_Alt (0x01000023)
KEYCODE_ALT_LEFT (57)
KEYCODE_ALT_RIGHT (58)
"AltGraph" The AltGr or AltGraph (Alternate Graphics) key. Enables the ISO Level 3 shift modifier (where Shift is the level 2 modifier).     GDK_KEY_Mode_switch (0xFF7E)
GDK_KEY_ISO_Level3_Shift (0xFE03)
GDK_KEY_ISO_Level3_Latch (0xFE04)
GDK_KEY_ISO_Level3_Lock (0xFE05)
GDK_KEY_ISO_Level5_Shift (0xFE11)
GDK_KEY_ISO_Level5_Latch (0xFE12)
GDK_KEY_ISO_Level5_Lock (0xFE13)
Qt::Key_AltGr (0x01001103
Qt::Key_Mode_switch (0x0100117E)
 
"CapsLock" The Caps Lock key. Toggles the capital character lock on and off for subsequent input. VK_CAPITAL (0x14) kVK_CapsLock (0x39) GDK_KEY_Caps_Lock (0xFFE5)
Qt::Key_CapsLock (0x01000024)
KEYCODE_CAPS_LOCK (115)
"Control" The Control, Ctrl, or Ctl key. Alows typing control characters. VK_CONTROL (0x11)
VK_LCONTROL (0xA2)
VK_RCONTROL (0xA3)
kVK_Control (0x3B)
kVK_RightControl (0x3E)
GDK_KEY_Control_L (0xFFE3)
GDK_KEY_Control_R (0xFFE4)
Qt::Key_Control (0x01000021)
KEYCODE_CTRL_LEFT (113)
KEYCODE_CTRL_RIGHT (114)
"Fn" The Fn (Function modifier) key. Used to allow generating function key (F1-F15, for instance) characters on keyboards without a dedicated function key area. Often handled in hardware so that events aren't generated for this key.   kVK_Function (0x3F)   KEYCODE_FUNCTION (119)
"FnLock" The FnLock or F-Lock (Function Lock) key.Toggles the function key mode described by "Fn" on and off. Often handled in hardware so that events aren't generated for this key.        
"Hyper" [4] The Hyper key.     GDK_KEY_Hyper_L (0xFFED)
GDK_KEY_Hyper_R (0xFFEE)
Qt::Key_Hyper_L (0x01000056)
Qt::Key_Hyper_R (0x01000057)
 
"Meta" [1] The Meta key. Allows issuing special command inputs. This is the Windows logo key, or the Command or key on Mac keyboards. VK_LWIN (0x5B)
VK_RWIN (0x5C)
kVK_Command (0x37)
kVK_RightCommand (0x36)
GDK_KEY_Meta_L (0xFFE7)
GDK_KEY_Meta_R (0xFFE8)
Qt::Key_Meta (0x01000022)
KEYCODE_META_LEFT (117)
KEYCODE_META_RIGHT (118)
"NumLock" The NumLock (Number Lock) key. Toggles the numeric keypad between number entry some other mode (often directional arrows). VK_NUMLOCK (0x90)   GDK_KEY_Num_Lock (0xFF7F)
Qt::Key_NumLock (0x01000025)
KEYCODE_NUM_LOCK (143)
"ScrollLock" [2] The Scroll Lock key. Toggles beteen scrolling and cursor movement modes. VK_SCROLL (0x91)   GDK_KEY_Scroll_Lock (0xFF14)
Qt::Key_ScrollLock (0x01000026)
KEYCODE_SCROLL_LOCK (116)
"Shift" The Shift key. Modifies keystrokes to allow typing upper (or other) case letters, and to support typing punctuation and other special characters. VK_SHIFT (0x10)
VK_LSHIFT (0xA0)
VK_RSHIFT (0xA1)
kVK_Shift (0x38)
kVK_RightShift (0x3C)
GDK_KEY_Shift_L (0xFFE1)
GDK_KEY_Shift_R (0xFFE2)
Qt::Key_Shift (0x01000020)
KEYCODE_SHIFT_LEFT (59)
KEYCODE_SHIFT_RIGHT (60)
"Super" [4] The Super key.     GDK_KEY_Super_L (0xFFEB)
GDK_KEY_Super_R (0xFFEC)
Qt::Key_Super_L (0x01000053)
Qt::Key_Super_R (0x01000054)
 
"Symbol" The Symbol modifier key (found on certain virtual keyboards).       KEYCODE_SYM (63) [3]
"SymbolLock" The Symbol Lock key.        

[1] In Internet Explorer 9, as well as in all versions of Firefox, the Windows key is reported as "OS" instead of as "Meta". This will be changed in Firefox per {{bug(1232918)}}. Until that's fixed, these keys are returned as "OS" by Firefox: VK_LWIN (0x5B) and VK_RWIN (0x5C) on Windows, and GDK_KEY_Super_L (0xFFEB), GDK_KEY_Super_R (0xFFEC), GDK_KEY_Hyper_L (0xFFED), and GDK_KEY_Hyper_R (0xFFEE) on Linux.

[2] Internet Explorer 9 reports "Scroll" instead of "ScrollLock" for the Scroll Lock key.

[3] Firefox did not add support for the Symbol key until Firefox 37.

[4] Firefox generates the key value "OS" for the Super and Hyper keys, instead of "Super" and "Hyper".

Whitespace keys

KeyboardEvent.key Value Description Virtual Keycode
Windows Mac Linux Android
"Enter" The Enter or key (sometimes labeled Return). VK_RETURN (0x0D) kVK_Return (0x24)
kVK_ANSI_KeypadEnter (0x4C)
kVK_Powerbook_KeypadEnter (0x34)
GDK_KEY_Return (0xFF0D)
GDK_KEY_KP_Enter (0xFF8D)
GDK_KEY_ISO_Enter (0xFE34)
GDK_KEY_3270_Enter (0xFD1E)
Qt::Key_Return (0x01000004)
Qt::Key_Enter (0x01000005)
KEYCODE_ENTER (66)
KEYCODE_NUMPAD_ENTER (160)
KEYCODE_DPAD_CENTER (23)
"Tab" The Horizontal Tab key, Tab. VK_TAB (0x09) kVK_Tab (0x30) GDK_KEY_Tab (0xFF09)
GDK_KEY_KP_Tab (0xFF89)
GDK_KEY_ISO_Left_Tab
(0xFE20)
Qt::Key_Tab (0x01000001)
KEYCODE_TAB (61)
" " [1] The space key, Space Bar. VK_SPACE (0x20) kVK_Space (0x31)

GDK_KEY_space (0x20)
GDK_KEY_KP_Space (0xFF80)
Qt::Key_Space (0x20)

KEYCODE_SPACE (62)

[1] Older browsers may return "Spacebar" instead of " " for the Space Bar key. Firefox did so until version 37, as did Internet Explorer 9.

KeyboardEvent.key Value Description Virtual Keycode
Windows Mac Linux Android
"ArrowDown" [1] The down arrow key. VK_DOWN (0x28) kVK_DownArrow (0x7D) GDK_KEY_Down (0xFF54)
GDK_KEY_KP_Down (0xFF99)
Qt::Key_Down (0x01000015)
KEYCODE_DPAD_DOWN (20)
"ArrowLeft" [1] The left arrow key. VK_LEFT (0x25) kVK_LeftArrow (0x7B) GDK_KEY_Left (0xFF51)
GDK_KEY_KP_Left (0xFF96)
Qt::Key_Left (0x01000012)
KEYCODE_DPAD_LEFT (21)
"ArrowRight" [1] The right arrow key. VK_RIGHT (0x27) kVK_RightArrow (0x7C) GDK_KEY_Right (0xFF53)
GDK_KEY_KP_Right (0xFF98)
Qt::Key_Right (0x01000014)
KEYCODE_DPAD_RIGHT (22)
"ArrowUp" [1] The up arrow key. VK_UP (0x26) kVK_UpArrow (0x7E) GDK_KEY_Up (0xFF52)
GDK_KEY_KP_Up (0xFF97)
Qt::Key_Up (0x01000013)
KEYCODE_DPAD_UP (19)
"End" The End key. Moves to the end of content. VK_END (0x23) kVK_End (0x77) GDK_KEY_End (0xFF57)
GDK_KEY_KP_End (0xFF9C)
Qt::Key_End (0x01000011)
KEYCODE_MOVE_END (123)
"Home" The Home key. Moves to the start of content. VK_HOME (0x24) kVK_Home (0x73) GDK_KEY_Home (0xFF50)
GDK_KEY_KP_Home (0xFF95)
Qt::Key_Home (0x01000010)
KEYCODE_MOVE_HOME (122)
"PageDown" The Page Down (or PgDn) key. Scrolls down or displays the next page of content. VK_NEXT (0x22) kVK_PageDown (0x79) GDK_KEY_Page_Down (0xFF56)
GDK_KEY_KP_Page_Down (0xFF9B)
Qt::Key_PageDown (0x01000017)
KEYCODE_PAGE_DOWN (93)
"PageUp" The Page Up (or PgUp) key. Scrolls up or displays the previous page of content. VK_PRIOR (0x21) kVK_PageUp (0x74) GDK_KEY_Page_Up (0xFF55)
GDK_KEY_KP_Page_Up (0xFF9A)
Qt::Key_PageUp (0x01000016)
KEYCODE_PAGE_UP (92)

[1] Internet Explorer 9 and Firefox 36 and earlier return "Left", "Right", "Up", and "Down" for the arrow keys, instead of "ArrowLeft", "ArrowRight", "ArrowUp", and "ArrowDown".

Editing keys

KeyboardEvent.key Value Description Virtual Keycode
Windows Mac Linux Android
"Backspace" The Backspace key. This key is labeled Delete on Mac keyboards. VK_BACK (0x08) kVK_Delete (0x33) GDK_KEY_BackSpace (0xFF08)
Qt::Key_Backspace (0x01000003)
KEYCODE_DEL (67)
"Clear" The Clear key. Removes the currently selected input. VK_CLEAR (0x0C)
VK_OEM_CLEAR (0xFE)
kVK_ANSI_KeypadClear (0x47) GDK_KEY_Clear (0xFF0B)
Qt::Key_Clear (0x0100000B)
KEYCODE_CLEAR (28)
"Copy" The Copy key (on certain extended keyboards). APPCOMMAND_COPY   GDK_KEY_Copy (0x1008FF57)
Qt::Key_Copy (0x010000CF)
 
"CrSel" [3] The Cursor Select key, CrSel. VK_CRSEL (0xF7)   GDK_KEY_3270_CursorSelect (0xFD1C)  
"Cut" The Cut key (on certain extended keyboards). APPCOMMAND_CUT   GDK_KEY_Cut (0x1008FF58)
Qt::Key_Cut (0x010000D0)
 
"Delete" [2] The Delete key, Del. VK_DELETE (0x2E) kVK_ForwardDelete (0x75) [1] GDK_KEY_Delete (0xFFFF)
GDK_KEY_KP_Delete (0xFF9F)
Qt::Key_Delete (0x01000007)
KEYCODE_FORWARD_DEL (112)
"EraseEof" Erase to End of Field. Deletes all characters from the current cursor position to the end of the current field. VK_EREOF (0xF9)   GDK_KEY_3270_ExSelect (0xFD1B)  
"ExSel" [4] The ExSel (Extend Selection) key. VK_EXSEL (0xF8)   GDK_KEY_3270_ExSelect (0xFD1B)  
"Insert" The Insert key, Ins. Toggles  between inserting and overwriting text. VK_INSERT (0x2D)   GDK_KEY_Insert (0xFF63)
GDK_KEY_KP_Insert (0xFF9E)
Qt::Key_Insert (0x01000006)
KEYCODE_INSERT (124)
"Paste" Paste from the clipboard. APPCOMMAND_PASTE   GDK_KEY_Paste (0x1008FF6D)
Qt::Key_Paste (0x010000E2)
 
"Redo" Redo the last action. APPCOMMAND_REDO   GDK_KEY_Redo (0xFF66)  
"Undo" Undo the last action. APPCOMMAND_UNDO   GDK_KEY_Undo (0xFF65)  

[1] On keyboards without a dedicated Del key, the Mac generates the "Delete" value when Fn is pressed in tandem with Delete (which is Backspace on other platforms).

[2] Internet Explorer 9 and Firefox 36 and earlier use "Del" instead of "Delete" for the Del key.

[3] Internet Explorer 9 and Firefox 36 and earlier generate the value "Crsel" instead of "CrSel" when the CrSel key is pressed.

[4] Internet Explorer 9 and Firefox 36 and earlier generate the value "Exsel" instead of "ExSel" when the ExSel key is pressed.

[5] Prior to Firefox 37, this key generated the value "Unidentified".

UI keys

KeyboardEvent.key Value Description Virtual Keycode
Windows Mac Linux Android
"Accept" The Accept, Commit, or OK key or button. Accepts the currently selected option or input method sequence conversion. VK_ACCEPT (0x1E)     KEYCODE_DPAD_CENTER (23)
"Again" The Again key. Redoes or repeats a previous action.     GDK_KEY_Redo (0xFF66)  
"Attn" [4] The Attn (Attention) key. VK_OEM_ATTN (0xF0)   GDK_KEY_3270_Attn (0xFD0E)  
"Cancel" [1] The Cancel key.     GDK_KEY_Cancel (0xFF69)  
"ContextMenu" [3] Shows the context menu. Typically found between the Windows (or OS) key and the Control key on the right side of the keyboard. VK_APPS (0x5D) kVK_PC_ContextMenu (0x6E) GDK_KEY_Menu (0xFF67)
Qt::Key_Menu (0x01000055)
KEYCODE_MENU (82)
"Escape" [2] The Esc (Escape) key. Typically used as an exit, cancel, or "escape this oepration" button. Historically, the Escape character was used to signal the start of a special control sequence of characters called an "escape sequence." VK_ESCAPE (0x1B) kVK_Escape (0x35) GDK_KEY_Escape (0xFF1B)
Qt::Key_Escape (0x01000000)
KEYCODE_ESCAPE (111)
"Execute" The Execute key. VK_EXECUTE (0x2B)   Qt::Key_Execute (0x01020003)  
"Find" The Find key. Opens an interface (typically a dialog box) for performing a find/search operation. APPCOMMAND_FIND   GDK_KEY_Find (0xFF68)  
"Finish" [5] The Finish key. VK_OEM_FINISH (0xF1)      
"Help" The Help key. Opens or toggles the display of help information. VK_HELP (0x2F)
APPCOMMAND_HELP
kVK_Help (0x72) GDK_KEY_Help (0xFF6A)
Qt::Key_Help (0x01000058)
KEYCODE_HELP (259)
"Pause" The Pause key. Pauses the current application or state, if applicable.
This shouldn't be confused with the "MediaPause" key value, which is used for media controllers, rather than to control applications and processes.
VK_PAUSE (0x13)   GDK_KEY_Pause (0xFF13)
GDK_KEY_Break (0xFF6B)
Qt::Key_Pause (0x01000008)
KEYCODE_BREAK (121)
"Play" The Play key. Resumes a previously paused application, if applicable.
This shouldn't be confused with the "MediaPlay" key value, which is used for media controllers, rather than to control applications and processes.
VK_PLAY (0xFA)   GDK_KEY_3270_Play (0xFD16)
Qt::Key_Play (0x01020005)
 
"Props" The Props (Properties) key.        
"Select" The Select key. VK_SELECT (0x29)   GDK_KEY_Select (0xFF60) KEYCODE_BUTTON_SELECT (109)
"ZoomIn" [6] The ZoomIn key.     GDK_KEY_ZoomIn (0x1008FF8B)
Qt::Key_ZoomIn (0x010000F6)
KEYCODE_ZOOM_IN (168)
"ZoomOut" [6] The ZoomOut key.     GDK_KEY_ZoomOut (0x1008FF8C)
Qt::Key_ZoomOut (0x010000F7)
KEYCODE_ZOOM_OUT (169)

[1] In Google Chrome 52, the Cancel key incorrectly returns the key code "Pause". This is fixed in Chrome 53. See Chrome bug {{ChromeBug(612749)}} for details.

[2] In Internet Explorer 9 and Firefox 36 and earlier, the Esc key returns "Esc" instead of "Escape".

[3] Internet Explorer 9 and Firefox 36 and earlier report "Apps" instead of "ContextMenu" for the context menu key.

[4] The Attn key generates the key code "Unidentified" on Internet Explorer 9. Firefox and Google Chrome report the same, unless the Japanese keyboard layout is in effect, in which case it generates "KanaMode" instead.

[5] The Finish key gemerates the key code "Unidentified" on Internet Explorer 9. Firefox reports the same, unless the Japanese keyboard layout is in effect, in which case it generates "Katakana" instead.

[6] Firefox didn't support the "ZoomIn" and "ZoomOut" keys until Firefox 37.

Device keys

KeyboardEvent.key Value Description Virtual Keycode
Windows Mac Linux Android
"BrightnessDown" The Brightness Down key. Typically used to reduce the brightness of the display.     GDK_KEY_MonBrightnessDown (0x1008FF03)
Qt::Key_MonBrightnessDown (0x010000B3)
KEYCODE_BRIGHTNESS_DOWN (220)
"BrightnessUp" The Brightness Up key. Typically increases the brightness of the display.     GDK_KEY_MonBrightnessUp (0x1008FF02)
Qt::Key_MonBrightnessUp (0x010000B2)
KEYCODE_BRIGHTNESS_UP (221)
"Eject" The Eject key. Ejects removable media (or toggles an optical storage device tray open and closed).     GDK_KEY_Eject (0x1008FF2C)
Qt::Key_Eject (0x010000B9)
KEYCODE_MEDIA_EJECT (129)
"LogOff" [2]f The LogOff key.     GDK_KEY_LogOff (0x1008FF61)
Qt::Key_LogOff (0x010000D9)
 
"Power" The Power button or key, to toggle power on and off.
Not all systems pass this key through to to the user agent.
      KEYCODE_POWER (26)
"PowerOff" The PowerOff or PowerDown key. Shuts off the system.     GDK_KEY_PowerDown (0x1008FF21)
GDK_KEY_PowerOff (0x1008FF2A)
Qt::Key_PowerDown (0x0100010B)
Qt::Key_PowerOff (0x010000B7)
 
"PrintScreen" The PrintScreen or PrtScr key. Sometimes SnapShot. Captures the screen and prints it or saves it to disk. VK_SNAPSHOT (0x2C)   GDK_KEY_3270_PrintScreen (0xFD1D)
GDK_KEY_Print (0xFF61)
GDK_KEY_Sys_Req (0xFF15)
Qt::Key_Print (0x01000009)
Qt::Key_SysReq (0x0100000A)
KEYCODE_SYSRQ (120)
"Hibernate" [2] The Hibernate key. This saves the state of the computer to disk and then shuts down; the computer can be returned to its previous state by restoring the saved state information.     GDK_KEY_Hibernate (0x1008FFA8)
Qt::Key_Hibernate (0x01000108)
 
"Standby" [1] The Standby key; also known as Suspend or Sleep. This turns off the display and puts the computer in a low power consumption mode, without completely powering off. VK_SLEEP (0x5F)   GDK_KEY_Standby (0x1008FF10)
GDK_KEY_Suspend (0x1008FFA7)
GDK_KEY_Sleep (0x1008FF2F)
Qt::Key_Standby (0x01000093)
Qt::Key_Suspend (0x0100010C)
Qt::Key_Sleep (0x01020004)
KEYCODE_SLEEP (223)
"WakeUp" [2] The WakeUp key; used to wake the computer from the hibernation or standby modes.     GDK_KEY_WakeUp (0x1008FF2B)
Qt::Key_WakeUp (0x010000B8)
KEYCODE_WAKEUP (224)

[1] The Standby key is not supported by Internet Explorer 9 and Firefox 36 and earlier, so it is reported as "Unidentified".

[2] Prior to Firefox 37, this key generated the value "Unidentified".

IME and composition keys

Keys used when using an Input Method Editor (IME) to input text which can't readily be entered by simple keypresses, such as text in languages such as those which have more graphemes than there are character entry keys on the keyboard; common examples include Chinese, Japanese, Korean, and Hindi.

Some keys are common across multiple languages, while others exist only on keyboards targeting specific languages. In addition, not all keyboards have all of these keys.

Common IME keys

KeyboardEvent.key Value Description Virtual Keycode
Windows Mac Linux Android
"AllCandidates" The All Candidates key, which starts multi-candidate mode, in which multiple candidates are displayed for the ongoing input.     GDK_KEY_MultipleCandidate (0xFF3D
Qt::Key_MultipleCandidate (0x0100113D)
 
"Alphanumeric" The Alphanumeric key. VK_OEM_ATTN (0xF0)   GDK_KEY_Eisu_Shift (0xFF2F)
GDK_KEY_Eisu_toggle (0xFF30)
Qt::Key_Eisu_Shift (0x0100112f)
Qt::Key_Eisu_toggle (0x01001130)
 
"CodeInput" The Code Input key, which enables code input mode, which lets the user enter characters by typing their code points (their Unicode character numbers, typically).     GDK_KEY_Codeinput (0xFF37)
Qt::Key_Codeinput (0x01001137)
 
"Compose" The Compose key.     GDK_KEY_Multi_key (0xFF20) [1]
Qt::Key_Multi_key (0x01001120)
 
"Convert" [4] The Convert key, which instructs the IME to convert the current input method sequence into the resulting character. VK_CONVERT (0x1C)   GDK_KEY_Henkan (0xFF23)
Qt::Key_Henkan (0x01001123)
KEYCODE_HENKAN (214)
"Dead" A dead "combining" key; that is, a key which is used in tandem with other keys to generate accented and other modified characters. If pressed by itself, it doesn't generate a character. If you wish to identify which specific dead key was pressed (in cases where more than one exists), you can do so by examining the {{domxref("KeyboardEvent")}}'s associated {{event("compositionupdate")}} event's  {{domxref("CompositionEvent.data", "data")}} property.     See {{anch("Dead keycodes for Linux")}} below  
"FinalMode" The Final (Final Mode) key is used on some Asian keyboards to enter final mode when using IMEs. VK_FINAL (0x18)      
"GroupFirst" Switches to the first character group on an ISO/IEC 9995 keyboard. Each key may have multiple groups of characters, each in its own column. Pressing this key instructs the device to interpret keypresses as coming from the first column on subsequent keystrokes.     GDK_KEY_ISO_First_Group (0xFE0C)  
"GroupLast" Switches to the last character group on an ISO/IEC 9995 keyboard.     GDK_KEY_ISO_Last_Group (0xFE0E)  
"GroupNext" [4] Switches to the next character group on an ISO/IEC 9995 keyboard.     GDK_KEY_ISO_Next_Group (0xFE08) KEYCODE_LANGUAGE_SWITCH (204)
"GroupPrevious" Switches to the previous character group on an ISO/IEC 9995 keyboard.     GDK_KEY_ISO_Prev_Group (0xFE0A)  
"ModeChange" [5] The Mode Change key. Toggles or cycles among input modes of IMEs. VK_MODECHANGE (0x1F)   GDK_KEY_Mode_switch (0xFF7E)
GDK_KEY_script_switch (0xFF7E)
Qt::Key_Mode_switch (0x0100117E)
KEYCODE_SWITCH_CHARSET (95)
"NextCandidate" The Next Candidate function key. Selects the next possible match for the ongoing input.        
"NonConvert" [2] The NonConvert ("Don't convert") key. This accepts the current input method sequence without running conversion when using an IME. VK_NONCONVERT (0x1D)   GDK_KEY_Muhenkan (0xFF22)
Qt::Key_Muhenkan (0x01001122)
 
KEYCODE_MUHENKAN (213)
"PreviousCandidate" The Previous Candidate key. Selects the previous possible match for the ongoing input.     GDK_KEY_PreviousCandidate (0xFF3E)
Qt::Key_PreviousCandidate (0x0100113E)
 
"Process" [3] The Process key. Instructs the IME to process the conversion. VK_PROCESSKEY (0xE5)      
"SingleCandidate" [4] The Single Candidate key. Enables single candidate mode (as opposed to multi-candidate mode); in this mode, only one candidate is displayed at a time.     GDK_KEY_SingleCandidate (0xFF3C)
Qt::Key_SingleCandidate (0x0100113C)
 

[1] On the X Window System, the Compose key is called the Multi key.

[2] The NonConvert key is reported as "Nonconvert" instead of the correct "NonConvert" by Internet Explorer 9 and Firefox versions 36 and earlier.

[3] The Process key currently returns "Unidentified" in Firefox and Internet Explorer. Google Chrome returns the value of the key as if IME were not in use.

[4] Prior to Firefox 37, these keys were "Unidentified".

[5] Firefox generates the key value "AltGraph" instead of "ModeChange".

Korean keyboards only

These keys are only available on Korean keyboards. There are other keys defined by various platforms for Korean keyboards, but these are the most common and are the ones identified by the UI Events specification.

KeyboardEvent.key Value Description Virtual Keycode
Windows Mac Linux Android
"HangulMode" The Hangul (Korean character set) mode key, which toggles between Hangul and English entry modes. VK_HANGUL (0x15) [1]   GDK_KEY_Hangul (0xFF31)
Qt::Key_Hangul (0x01001131)
 
"HanjaMode" Selects the Hanja mode, for converting Hangul characters to the more specific Hanja characters. VK_HANJA (0x19) [1]   GDK_KEY_Hangul_Hanja (0xFF34)
Qt::Key_Hangul_Hanja (0x01001134)
 
"JunjaMode" Selects the Junja mode, in which Korean is represented using single-byte Latin characters. VK_JUNJA (0x17)   GDK_KEY_Hangul_Jeonja (0xFF38)
Qt::Key_Hangul_Jeonja (0x01001138)
 

[1] VK_HANGUL and VK_KANA share the same numeric key value on Windows, as do VK_HANJA and VK_KANJI.

Japanese keyboards only

These keys are only available on Japanese keyboards.

KeyboardEvent.key Value Description Virtual Keycode
Windows Mac Linux Android
"Eisu" [1] The Eisu key. This key's purpose is defined by the IME, but may be used to close the IME.   kVK_JIS_Eisu (0x66) GDK_KEY_Eisu_toggle (0xFF2F)
Qt::Key_Eisu_toggle (0x01001130)
KEYCODE_EISU (212)
"Hankaku" [3] The Hankaku (half-width characters) key. VK_OEM_AUTO (0xF3)   GDK_KEY_Hankaku (0xFF29)
Qt::Key_Hankaku (0x01001129)
 
"Hiragana" The Hiragana key; selects Kana characters mode. VK_OEM_COPY (0xF2)   GDK_KEY_Hiragana (0xFF25)
Qt::Key_Hiragana (0x01001125)
 
"HiraganaKatakana" [6] Toggles between the Hiragana and Katakana writing systems.     GDK_KEY_Hiragana_Katakana (0xFF27)
Qt::Key_Hiragana_Katakana (0x01001127)
KEYCODE_KATAKANA_HIRAGANA (215)
"KanaMode" The Kana Mode (Kana Lock) key. VK_KANA (0x15) [2]
VK_ATTN (0xF6)
  GDK_KEY_Kana_Lock (0xFF2D)
GDK_KEY_Kana_Shift (0xFF2E)
Qt::Key_Kana_Lock (0x0100112D)
Qt::Key_Kana_Shift (0x0100112E)
 
"KanjiMode" The Kanji Mode key. Enables entering Japanese text using the ideographic characters of Chinese origin. VK_KANJI [2] kVK_JIS_Kana (0x68) GDK_KEY_Kanji (0xFF21)
Qt::Key_Kanji (0x01001121)
KEYCODE_KANA (218)
"Katakana" The Katakana key. VK_OEM_FINISH (0xF1)   GDK_KEY_Katakana (0xFF26)
Qt::Key_Katakana (0x01001126)
 
"Romaji" [5] The Romaji key; selects the Roman character set. VK_OEM_BACKTAB (0xF5)   GDK_KEY_Romaji (0xFF24)
Qt::Key_Romaji (0x01001124)
 
"Zenkaku" [4] The Zenkaku (full width) characters key. VK_OEM_ENLW (0xF4)   GDK_KEY_Zenkaku (0xFF28)
Qt::Key_Zenkaku (0x01001128)
 
"ZenkakuHanaku" [6] The Zenkaku/Hankaku (full width/half width) toggle key.     GDK_KEY_Zenkaku_Hankaku (0xFF2A)
Qt::Zenkaku_Hankaku (0x0100112A)

KEYCODE_ZENKAKU_HANKAKU (211)

[1] Prior to Firefox 37, the Eisu key was mapped to "RomanCharacters" by mistake.

[2] VK_HANGUL and VK_KANA share the same numeric key value on Windows, as do VK_HANJA and VK_KANJI.

[3] Prior to Firefox 37, the Hankaku (half-width) key generated the key value "HalfWidth" on Firefox. Also, this key generates the value "Unidentified" on Internet Explorer 9.

[4] Internet Explorer 9 reports "Unidentified" for the Zenkaku key; Firefox 36 and earlier identify this key as "FullWidth" on Japanese keyboard layouts and "Unidentified" on all other keyboard layouts. Firefox 37 and later, and all versions of Google Chrome, correctly return "Zenkaku".

[5] "Unidentified" in Internet Explorer 9. Firefox 36 and earlier identify the Romaji key as "RomanCharacters" on Japanese keyboards and "Unidentified" for other keyboards; this is corrected to return "Romaji" in Firefox 37 and later.

[6] This key is reported as "Unidentified" prior to Firefox 37.

Dead keycodes for Linux

Linux generates accented characters using special dead keys; these are keys which are pressed in combination with character keys to generate accented forms of those characters. You can identify which specific dead key was used (if more than one exists) by examining the  {{domxref("KeyboardEvent")}}'s associated {{event("compositionupdate")}} event's  {{domxref("CompositionEvent.data", "data")}} property.

You can find a table of the dead keys and the characters they can be used with to generate accented or otherwise special characters on Linux using GTK

The value of {{domxref("CompositionEvent.data", "data")}} will be one of the following:

CompositionEvent.data value Symbol Comments
GDK_KEY_dead_grave (0xFE50)
Qt::Key_Dead_Grave (0x01001250)
`  
GDK_KEY_dead_acute (0xFE51)
Qt::Key_Dead_Acute (0x01001251)
´  
GDK_KEY_dead_circumflex (0xFE52)
Qt::Key_Dead_Circumflex (0x01001252)
ˆ  
GDK_KEY_dead_tilde (0xFE53)
Qt::Key_Dead_Tilde (0x01001253)
˜  
GDK_KEY_dead_perispomeni (0xFE53)  ͂  
GDK_KEY_dead_macron (0xFE54)
Qt::Key_Dead_Macron (0x01001254)
¯  
GDK_KEY_dead_breve (0xFE55)
Qt::Key_Dead_Breve (0x01001255)
˘  
GDK_KEY_dead_abovedot (0xFE56)
Qt::Key_Dead_Abovedot (0x01001256)
˙  
GDK_KEY_dead_diaeresis (0xFE57)
Qt::Key_Dead_Diaeresis (0x01001257)
¨ Also called an umlaut.
GDK_KEY_dead_abovering (0xFE58)
Qt::Key_Dead_Abovering (0x01001258)
˚  
GDK_KEY_dead_doubleacute (0xFE59)
Qt::Key_Dead_Doubleacute (0x01001259)
˝  
GDK_KEY_dead_caron (0xFE5A)
Qt::Key_Dead_Caron (0x0100125A)
ˇ Also called a háček; used in Czech among other languages.
GDK_KEY_dead_cedilla (0xFE5B)
Qt::Key_Dead_Cedilla (0x0100125B)
¸  
GDK_KEY_dead_ogonek (0xFE5C)
Qt::Key_Dead_Ogonek (0x0100125C)
˛ Also called a nosinė; used in Polish and Old Irish.
GDK_KEY_dead_iota (0xFE5D)
Qt::Key_Dead_Iota (0x0100125D)
 ͅ Iota subscript.
GDK_KEY_dead_voiced_sound (0xFE5E)
Qt::Key_Dead_Voiced_Sound (0x0100125E)
 
GDK_KEY_dead_semivoiced_sound (0xFE5F)
Qt::Key_Dead_Semivoiced_Sound (0x0100125F)
 
GDK_KEY_dead_belowdot (0xFE60)
Qt::Key_Dead_Belowdot (0x01001260)
̣̣  
GDK_KEY_dead_hook (0xFE61)
Qt::Key_Dead_Hook (0x01001261)
  ̡  
GDK_KEY_dead_horn (0xFE62)
Qt::Key_Dead_Horn (0x01001262)
 ̛  
GDK_KEY_dead_stroke (0xFE63)  ̶̶  
GDK_KEY_dead_abovecomma (0xFE64)  ̓̓  
GDK_KEY_dead_psili (0xFE64)  ᾿  
GDK_KEY_dead_abovereversedcomma (0xFE65) ʽ  
GDK_KEY_dead_dasia (0xFE65)  
GDK_KEY_dead_doublegrave (0xFE66)  ̏  
GDK_KEY_dead_belowring (0xFE67) ˳  
GDK_KEY_dead_belowmacron (0xFE68)  ̱  
GDK_KEY_dead_belowcircumflex (0xFE69)  
GDK_KEY_dead_belowtilde (0xFE6A) ̰  
GDK_KEY_dead_belowbreve (0xFE6B) ̮  
GDK_KEY_dead_belowdiaeresis (0xFE6C)  ̤  
GDK_KEY_dead_invertedbreve (0xFE6D) ̯  
GDK_KEY_dead_belowcomma (0xFE6E) ̦  
GDK_KEY_dead_currency (0xFE6F)    
GDK_KEY_dead_a (0xFE80)    
GDK_KEY_dead_A (0xFE81)    
GDK_KEY_dead_e (0xFE82)    
GDK_KEY_dead_E (0xFE83)    
GDK_KEY_dead_i (0xFE84)    
GDK_KEY_dead_I (0xFE85)    
GDK_KEY_dead_o (0xFE86)    
GDK_KEY_dead_O (0xFE87)    
GDK_KEY_dead_u (0xFE88)    
GDK_KEY_dead_U (0xFE89)    
GDK_KEY_dead_small_schwa (0xFE8A) ə  
GDK_KEY_dead_capital_schwa (0xFE8B) Ə  
GDK_KEY_dead_greek (0xFE8C)    

Function keys

While various platforms support different numbers of the general-purpose function keys, such as F1-F12 (or F1-F10, or F1-F15, or...), the first few are specifically defined as follows. If more function keys are available, their names continue the pattern here by continuing to increment the numeric portion of each key's name, so that, for example, "F24" is a valid key value.

KeyboardEvent.key value Description Virtual Keycode
Windows Mac Linux Android
"F1" The first general-purpose function key, F1. VK_F1 (0x70) kVK_F1 (0x7A) GDK_KEY_F1 (0xFFBE)
GDK_KEY_KP_F1 (0xFF91)
Qt::Key_F1 (0x01000030)
KEYCODE_F1 (131)
"F2" The F2 key. VK_F2 (0x71) kVK_F2 (0x78) GDK_KEY_F2 (0xFFBF)
GDK_KEY_KP_F2 (0xFF92)
Qt::Key_F2 (0x01000031)
KEYCODE_F2 (132)
"F3" The F3 key. VK_F3 (0x72) kVK_F3 (0x63) GDK_KEY_F3 (0xFFC0)
GDK_KEY_KP_F3 (0xFF93)
Qt::Key_F3 (0x01000032)
KEYCODE_F3 (133)
"F4" The F4 key. VK_F4 (0x73) kVK_F4 (0x76) GDK_KEY_F4 (0xFFC1)
GDK_KEY_KP_F4 (0xFF94)
Qt::Key_F4 (0x01000033)
KEYCODE_F4 (134)
"F5" The F5 key. VK_F5 (0x74) kVK_F5 (0x60) GDK_KEY_F5 (0xFFC2)
Qt::Key_F5 (0x01000034)
KEYCODE_F5 (135)
"F6" The F6 key. VK_F6 (0x75) kVK_F6 (0x61) GDK_KEY_F6 (0xFFC3)
Qt::Key_F6 (0x01000035)
KEYCODE_F6 (136)
"F7" The F7 key. VK_F7 (0x76) kVK_F7 (0x62) GDK_KEY_F7 (0xFFC4)
Qt::Key_F7 (0x01000036)
KEYCODE_F7 (137)
"F8" The F8 key. VK_F8 (0x77) kVK_F8 (0x64) GDK_KEY_F8 (0xFFC5)
Qt::Key_F8 (0x01000037)
KEYCODE_F8 (138)
"F9" The F9 key. VK_F9 (0x78) kVK_F9 (0x65) GDK_KEY_F9 (0xFFC6)
Qt::Key_F9 (0x01000038)
KEYCODE_F9 (139)
"F10" The F10 key. VK_F10 (0x79) kVK_F10 (0x6D) GDK_KEY_F10 (0xFFC7)
Qt::Key_F10 (0x01000039)
KEYCODE_F10 (140)
"F11" The F11 key. VK_F11 (0x7A) kVK_F11 (0x67) GDK_KEY_F11 (0xFFC8)
Qt::Key_F11 (0x0100003A)
KEYCODE_F11 (141)
"F12" The F12 key. VK_F12 (0x7B) kVK_F12 (0x6F) GDK_KEY_F12 (0xFFC9)
Qt::Key_F12 (0x0100003B)
KEYCODE_F12 (142)
"F13" The F13 key. VK_F13 (0x7C) kVK_F13 (0x69) GDK_KEY_F13 (0xFFCA)
Qt::Key_F13 (0x0100003C)
KEYCODE_F13
"F14" The F14 key. VK_F14 (0x7D) kVK_F14 (0x6B) GDK_KEY_F14 (0xFFCB)
Qt::Key_F14 (0x0100003D)
KEYCODE_F14
"F15" The F15 key. VK_F15 (0x7E) kVK_F15 (0x71) GDK_KEY_F15 (0xFFCC)
Qt::Key_F15 (0x0100003E)
KEYCODE_F15
"F16" The F16 key. VK_F16 (0x7F) kVK_F16 (0x6A) GDK_KEY_F16 (0xFFCD)
Qt::Key_F16 (0x0100003F)
KEYCODE_F16
"F17" The F17 key. VK_F17 (0x80) kVK_F17 (0x40) GDK_KEY_F17 (0xFFCE)
Qt::Key_F17 (0x01000040)
KEYCODE_F17
"F18" The F18 key. VK_F18 (0x81) kVK_F18 (0x4F) GDK_KEY_F18 (0xFFCF)
Qt::Key_F18 (0x01000041)
KEYCODE_F18
"F19" The F19 key. VK_F19 (0x82) kVK_F19 (0x50) GDK_KEY_F19 (0xFFD0)
Qt::Key_F19 (0x01000042)
KEYCODE_F19
"F20" The F20 key. VK_F20 (0x83) kVK_F20 (0x5A) GDK_KEY_F20 (0xFFD1)
Qt::Key_F20 (0x01000043)
KEYCODE_F20
"Soft1" The first general-purpose virtual function key.     Qt::Key_Context1 (0x01100000)  
"Soft2" The second general-purpose virtual function key.     Qt::Key_Context2 (0x01100001)  
"Soft3" The third general-purpose virtual function key.     Qt::Key_Context3 (0x01100002)  
"Soft4" The fourth general-purpose virtual function key.     Qt::Key_Context4 (0x01100003)  

Phone keys

These keys represent buttons which commonly exist on modern smartphones.

KeyboardEvent.key Value Description Virtual Keycode
Windows Mac Linux Android
"AppSwitch" Presents a list of recently-used applications which lets the user change apps quickly.       KEYCODE_APP_SWITCH (181)
"Call" The Call key; dials the number which has been entered.     Qt::Key_Call (0x01100004) KEYCODE_CALL (5)
"Camera" The Camera key; activates the camera.     Qt::Key_Camera (0x01100020) KEYCODE_CAMERA (27)
"CameraFocus" The Focus key; focuses the camera.     Qt::Key_CameraFocus (0x01100021) KEYCODE_FOCUS (80)
"EndCall" The End Call or Hang Up button.     Qt::Key_Hangup (0x01100005) KEYCODE_ENDCALL (6)
"GoBack" The Back button.       KEYCODE_BACK (4)
"GoHome" [1] The Home button, which takes the user to the phone's main screen (usually an application launcher).       KEYCODE_HOME (3)
"HeadsetHook" The Headset Hook key. This is typically actually a button on the headset which is used to hang up calls and play or pause media.     Qt::Key_ToggleCallHangup (0x01100007) KEYCODE_HEADSETHOOK (79)
"LastNumberRedial" The Redial button, which redials the last-called number.     Qt::Key_LastNumberRedial (0x01100009)  
"Notification" The Notification key.       KEYCODE_NOTIFICATION (83)
"MannerMode" A button which cycles among the notification modes: silent, vibrate, ring, and so forth.       KEYCODE_MANNER_MODE (205)
"VoiceDial" The Voice Dial key. Initiates voice dialing.     Qt::Key_VoiceDial (0x01100008) KEYCODE_VOICE_ASSIST (231)

[1] Prior to Firefox 37, the Home button generated a key code of "Exit". Starting in Firefox 37, the button generates the key code "MozHomeScreen".

Multimedia keys

The multimedia keys are extra buttons or keys for controlling media devices, found on some keyboards.

KeyboardEvent.key Value Description Virtual Keycode
Windows Mac Linux Android
"ChannelDown" Switches to the previous channel. APPCOMMAND_MEDIA_CHANNEL_DOWN   Qt::Key_ChannelDown (0x01000119) KEYCODE_CHANNEL_DOWN (167)
"ChannelUp" Switches to the next channel. APPCOMMAND_MEDIA_CHANNEL_UP   Qt::Key_ChannelUp (0x01000118) KEYCODE_CHANNEL_UP (166)
"MediaFastForward" [2] Starts, continues, or increases the speed of fast forwarding the media. APPCOMMAND_MEDIA_FAST_FORWARD   GDK_KEY_AudioForward (0x1008FF97)
Qt:Key_AudioForward
(0x01000102)
KEYCODE_MEDIA_FAST_FORWARD (90)
"MediaPause" Pauses the currently playing media. Some older applications use simply "Pause" but this is not correct. APPCOMMAND_MEDIA_PAUSE   GDK_KEY_AudioPause (0x1008FF31)
Qt::Key_MediaPause (0x1000085)
KEYCODE_MEDIA_PAUSE (127)
"MediaPlay" Starts or continues playing media at normal speed, if not already doing so. Has no effect otherwise. APPCOMMAND_MEDIA_PLAY   GDK_KEY_AudioPlay (0x1008FF14) KEYCODE_MEDIA_PLAY (126)
"MediaPlayPause" Toggles between playing and pausing the current media. VK_MEDIA_PLAY_PAUSE (0xB3)
APPCOMMAND_MEDIA_PLAY_PAUSE
  Qt::Key_MediaTogglePlayPause (0x1000086) KEYCODE_MEDIA_PLAY_PAUSE (85)
"MediaRecord" Starts or resumes recording media. APPCOMMAND_MEDIA_RECORD   GDK_KEY_AudioRecord (0x1008FF1C)
Qt::Key_MediaRecord (0x01000084)
KEYCODE_MEDIA_RECORD (130)
"MediaRewind" Starts, continues, or increases the speed of rewinding the media. APPCOMMAND_MEDIA_REWIND   GDK_KEY_AudioRewind (0x1008FF3E)
Qt::Key_AudioRewind (0x010000C5)
KEYCODE_MEDIA_REWIND (89)
"MediaStop" Stops the current media activity (such as playing, recording, pausing, forwarding, or rewinding). Has no effect if the media is currently stopped already. VK_MEDIA_STOP (0xB2)
APPCOMMAND_MEDIA_STOP
  GDK_KEY_AudioStop (0x1008FF15)
Qt::Key_MediaStop (0x01000081)
KEYCODE_MEDIA_STOP (86)
"MediaTrackNext" [1] Seeks to the next media or program track. VK_MEDIA_NEXT_TRACK (0xB0)
APPCOMMAND_MEDIA_NEXTTRACK
  GDK_KEY_AudioNext (0x1008FF17)
Qt::Key_MediaNext (0x01000083)
KEYCODE_MEDIA_NEXT (87)
"MediaTrackPrevious" [1] Seeks to the previous media or program track. VK_MEDIA_PREV_TRACK (0xB1)
APPCOMMAND_MEDIA_PREVIOUSTRACK
  GDK_KEY_AudioPrev (0x1008FF16)
Qt::Key_MediaPrevious (0x01000082)
KEYCODE_MEDIA_PREVIOUS (88)

[1] Internet Explorer 9 and Firefox 36 and earlier use "MediaNextTrack" and "MediaPreviousTrack" instead of "MediaTrackNext" and "MediaTrackPrevious".

[2] Prior to Firefox 37, Firefox generated the key code "FastFwd" on some platforms and "Unidentified" on others instead of "MediaFastForward".

Audio control keys

These media keys are used specifically for controlling audio.

KeyboardEvent.key Value Description Virtual Keycode
Windows Mac Linux Android
"AudioBalanceLeft" Adjusts audio balance toward the left. VK_AUDIO_BALANCE_LEFT      
"AudioBalanceRight" Adjusts audio balance twoard the right. VK_AUDIO_BALANCE_RIGHT      
"AudioBassDown" Decreases the amount of bass. APPCOMMAND_BASS_DOWN      
"AudioBassBoostDown" Reduces bass boosting or cycles downward through bass boost modes or states. VK_BASS_BOOST_DOWN      
"AudioBassBoostToggle" Toggles bass boosting on and off. APPCOMMAND_BASS_BOOST      
"AudioBassBoostUp" Increases the amoung of bass boosting, or cycles upward through a set of bass boost modes or states. VK_BASS_BOOST_UP      
"AudioBassUp" Increases the amount of bass. APPCOMMAND_BASS_UP      
"AudioFaderFront" Adjusts the audio fader toward the front. VK_FADER_FRONT      
"AudioFaderRear" Adjustts the audio fader toward the rear. VK_FADER_REAR      
"AudioSurroundModeNext" Selects the next available surround sound mode. VK_SURROUND_MODE_NEXT      
"AudioTrebleDown" Decreases the amount of treble. APPCOMMAND_TREBLE_DOWN      
"AudioTrebleUp" Increases the amount of treble. APPCOMMAND_TREBLE_UP      
"AudioVolumeDown" [1] Decreases the audio volume. VK_VOLUME_DOWN (0xAE)
APPCOMMAND_VOLUME_DOWN
kVK_VolumeDown (0x49) GDK_KEY_AudioLowerVolume (0x1008FF11)
Qt::Key_VolumeDown (0x01000070)
KEYCODE_VOLUME_DOWN (25)
"AudioVolumeMute" [1] Mutes the audio. VK_VOLUME_MUTE (0xAD)
APPCOMMAND_VOLUME_MUTE
kVK_Mute (0x4A) GDK_KEY_AudioMute (0x1008FF12)
Qt::Key_VolumeMute (0x01000071)
KEYCODE_VOLUME_MUTE (164)
"AudioVolumeUp" [1] Increases the audio volume. VK_VOLUME_UP (0xAF)
APPCOMMAND_VOLUME_UP
kVK_VolumeUp (0x48) GDK_KEY_AudioRaiseVolume (0x1008FF13)
Qt::Key_VolumeUp (0x01000072)
KEYCODE_VOLUME_UP (24)
"MicrophoneToggle" Toggles the microphone on and off. APPCOMMAND_MIC_ON_OFF_TOGGLE      
"MicrophoneVolumeDown" Decreases the microphone's input volume. APPCOMMAND_MICROPHONE_VOLUME_DOWN   Qt::Key_MicVolumeDown (0x0100011E)  
"MicrophoneVolumeMute" Mutes the microphone input. APPCOMMAND_MICROPHONE_VOLUME_MUTE   GDK_KEY_AudioMicMute (0x1008FFB2)
Qt::Key_MicMute (0x01000113)
KEYCODE_MUTE (91)
"MicrophoneVolumeUp" Increases the microphone's input volume. APPCOMMAND_MICROPHONE_VOLUME_UP   Qt::Key_MicVolumeUp (0x0100011D)  

[1]In Internet Explorer 9, and prior to Firefox 49, "AudioVolumeUp", "AudioVolumeDown", and "AudioVolumeMute" were "VolumeUp", "VolumeDown", and "VolumeMute". In Firefox 49 they were updated to match the latest specification. The old names are still used on Boot to Gecko.

TV control keys

These key values represent buttons or keys present on television devices, or computers or phones which have TV support.

KeyboardEvent.key Value Description Virtual Keycode
Windows Mac Linux Android
"TV" [1] Switches into TV viewing mode.       KEYCODE_TV (170)
"TV3DMode" Toggles 3D TV mode on and off.       KEYCODE_3D_MODE (206)
"TVAntennaCable" Toggles between antenna and cable inputs.       KEYCODE_TV_ANTENNA_CABLE (242)
"TVAudioDescription" Toggles audio description mode on and off.       KEYCODE_TV_AUDIO_DESCRIPTION (252)
"TVAudioDescriptionMixDown" Decreases trhe audio description's mixing volume; reduces the volume of the audio descriptions relative to the program sound.       KEYCODE_TV_AUDIO_DESCRIPTION_MIX_DOWN (254)
"TVAudioDescriptionMixUp" Increases the audio description's mixing volume; increases the volume of the audio descriptions relative to the program sound.       KEYCODE_TV_AUDIO_DESCRIPTION_MIX_UP (253)
"TVContentsMenu" Displays or hides the media contents available for playback (this may be a channel guide showing the currently airing programs, or a list of media files to play).       KEYCODE_TV_CONTENTS_MENU (256)
"TVDataService" Displays or hides the TV's data service menu.       KEYCODE_TV_DATA_SERVICE (230)
"TVInput" [2] Cycles the input mode on an external TV.       KEYCODE_TV_INPUT (178)
"TVInputComponent1" Switches to the input "Component 1."       KEYCODE_TV_INPUT_COMPONENT_1 (249)
"TVInputComponent1" Switches to the input "Component 2."       KEYCODE_TV_INPUT_COMPONENT_2 (250)
"TVInputComposite1" Switches to the input "Composite 1."       KEYCODE_TV_INPUT_COMPOSITE_1 (247)
"TVInputComposite2" Switches to the input "Composite 2."       KEYCODE_TV_INPUT_COMPOSITE_2 (248)
"TVInputHDMI1" Switches to the input "HDMI 1."       KEYCODE_TV_INPUT_HDMI_1 (243)
"TVInputHDMI4" Switches to the input "HDMI 2."       KEYCODE_TV_INPUT_HDMI_2 (244)
"TVInputHDMI4" Switches to the input "HDMI 3."       KEYCODE_TV_INPUT_HDMI_3 (245)
"TVInputHDMI4" Switches to the input "HDMI 4."       KEYCODE_TV_INPUT_HDMI_4 (246)
"TVInputVGA1" Switches to the input "VGA 1."       KEYCODE_TV_INPUT_VGA_1 (251)
"TVMediaContext" The Media Context menu key.       KEYCODE_TV_MEDIA_CONTEXT_MENU (257)
"TVNetwork" Toggle the TV's network connection on and off.       KEYCODE_TV_NETWORK (241)
"TVNumberEntry" Put the TV into number entry mode.       KEYCODE_TV_NUMBER_ENTRY (234)
"TVPower" [2] The device's power button.       KEYCODE_TV_POWER (177)
"TVRadioService" Radio button.       KEYCODE_TV_RADIO_SERVICE (232)
"TVSatellite" Satellite button.       KEYCODE_TV_SATELLITE (237)
"TVSatelliteBS" Broadcast Satellite button.       KEYCODE_TV_SATELLITE_BS (238)
"TVSatelliteCS" Communication Satellite button.       KEYCODE_TV_SATELLITE_CS (239)
"TVSatelliteToggle" Toggles among available satellites.       KEYCODE_TV_SATELLITE_SERVICE (240)
"TVTerrestrialAnalog" Selects analog terrestrial television service (analog cable or antenna reception).       KEYCODE_TV_TERRESTRIAL_ANALOG (235)
"TVTerrestrialDigital" Selects digital terrestrial television service (digital cable or antenna receiption).       KEYCODE_TV_TERRESTRIAL_DIGITAL (236)
"TVTimer" Timer programming button.       KEYCODE_TV_TIMER_PROGRAMMING (258)

[1] Firefox added proper support for the "TV" key in Firefox 37; before that, this key generated the key code "Live".

[2] These keys were "Unidentified" until Firefox 37.

Media controller keys

Because modern remote controls for media devices often include buttons beyond the basic controls covered elsewhere in this document, key values are defined for a broad array of these additional buttons.

The values below are derived in part form a number of consumer electronics technical specifications:

Remote controls typically include keys whose values are already defined elsewhere, such as under {{anch("Multimedia keys")}} or {{anch("Audio control keys")}}. Those keys' values will match what's documented in those tables.

KeyboardEvent.key Value Description Virtual Keycode
Windows Mac Linux Android
"AVRInput" [3] Changes the input mode on an external audio/video receiver (AVR) unit.       KEYCODE_AVR_INPUT (182)
"AVRPower" [3] Toggles the power on an external AVR unit.       KEYCODE_AVR_POWER (181)
"ColorF0Red" [3] General-purpose media function key, color-coded red; this has index 0 among the colored keys. VK_COLORED_KEY_0     KEYCODE_PROG_RED (183)
"ColorF1Green" [3] General-purpose media funciton key, color-coded green; this has index 1 among the colored keys. VK_COLORED_KEY_1     KEYCODE_PROG_GREEN (184)
"ColorF2Yellow" [3] General-purpose media funciton key, color-coded yellow; this has index 2 among the colored keys. VK_COLORED_KEY_2     KEYCODE_PROG_YELLOW (185)
"ColorF3Blue" [3] General-purpose media funciton key, color-coded blue; this has index 3 among the colored keys. VK_COLORED_KEY_3     KEYCODE_PROG_BLUE (186)
"ColorF4Grey" General-purpose media funciton key, color-coded grey; this has index 4 among the colored keys. VK_COLORED_KEY_4     KEYCODE_PROG_GREY
"ColorF5Brown" General-purpose media funciton key, color-coded brown; this has index 5 among the colored keys. VK_COLORED_KEY_5     KEYCODE_PROG_BROWN
"ClosedCaptionToggle" Toggles closed captioning on and off. VK_CC     KEYCODE_CAPTIONS (175)
"Dimmer" Adjusts the brightness of the device by toggling between two brightness levels or by cycling among multiple brightness levels. VK_DIMMER   GDK_KEY_BrightnessAdjust (0x1008FF3B)  
"DisplaySwap" Cycles among video sources. VK_DISPLAY_SWAP      
"DVR" Switches the input source to the Digital Video Recorder (DVR).       KEYCODE_DVR (173)
"Exit" The Exit button, which exits the curreent application or menu. VK_EXIT   Qt::Key_Exit (0x0102000a)  
"FavoriteClear0" Clears the program or content stored in the first favorites list slot. VK_CLEAR_FAVORITE_0      
"FavoriteClear1" Clears the program or content stored in the second favorites list slot. VK_CLEAR_FAVORITE_1      
"FavoriteClear2" Clears the program or content stored in the third favorites list slot. VK_CLEAR_FAVORITE_2      
"FavoriteClear3" Clears the program or content stored in the fourth favorites list slot. VK_CLEAR_FAVORITE_3      
"FavoriteRecall0" Selects (recalls) the program or content stored in the first favorites list slot. VK_RECALL_FAVORITE_0      
"FavoriteRecall1" Selects (recalls) the program or content stored in the second favorites list slot. VK_RECALL_FAVORITE_1      
"FavoriteRecall2" Selects (recalls) the program or content stored in the third favorites list slot. VK_RECALL_FAVORITE_2      
"FavoriteRecall3" Selects (recalls) the program or content stored in the fourth favorites list slot. VK_RECALL_FAVORITE_3      
"FavoriteStore0" Stores the current program or content into the first favorites list slot. VK_STORE_FAVORITE_0      
"FavoriteStore1" Stores the current program or content into the second favorites list slot. VK_STORE_FAVORITE_1      
"FavoriteStore2" Stores the current program or content into the third favorites list slot. VK_STORE_FAVORITE_2      
"FavoriteStore3" Stores the current program or content into the fourth favorites list slot. VK_STORE_FAVORITE_3      
"Guide" Toggles the display of the program or content guide. VK_GUIDE   Qt::Key_Guide (0x0100011A) KEYCODE_GUIDE (172)
"GuideNextDay" If the guide is currently displayed, this button tells the guide to display the next day's content. VK_NEXT_DAY      
"GuidePreviousDay" If the guide is currently displayed, this button tells the guide to display the previous day's content. VK_PREV_DAY      
"Info" Toggles the display of information about the currently selected content, program, or media. VK_INFO   Qt::Key_Info (0x0100011B) KEYCODE_INFO (165)
"InstantReplay" Tellls the device to perform an instant replay (typically some form of jumping back a short amount of time then playing it again, possibly but not usually in slow motion). VK_INSTANT_REPLAY      
"Link" Opens content liniked to the current program, if available and possible. VK_LINK      
"ListProgram" Lists the current program. VK_LIST      
"LiveContent" Toggles a display listing currently available live content or programs. VK_LIVE      
"Lock" Locks or unlocks the currently selected content or pgoram. VK_LOCK      
"MediaApps" Presents a list of media applications, such as photo viewers, audio and video players, and games. [1] VK_APPS      
"MediaAudioTrack" The Audio Track key.     GDK_KEY_AudioCycleTrack (0x1008FF9B)
Qt::Key_AudioCycleTrack (0x01000106)
KEYCODE_MEDIA_AUDIO_TRACK (222)
"MediaLast" Jumps back to the last-viewed content, program, or other media. VK_LAST   Qt::Key_MediaLast (0x0100FFFF) KEYCODE_LAST_CHANNEL (229)
"MediaSkipBackward" Skips backward to the previous content or program.       KEYCODE_MEDIA_SKIP_BACKWARD
"MediaSkipForward" Skips forward to the next content or program. VK_SKIP     KEYCODE_MEDIA_SKIP_FORWARD
"MediaStepBackward" Steps backward to the previous content or program.       KEYCODE_MEDIA_STEP_BACKWARD
"MediaStepForward" Steps forward to the next content or program.       KEYCODE_MEDIA_SKIP_FORWARD
"MediaTopMenu" Top Menu button; opens the media's main menu, such as on a DVD or Blu-Ray disc.     Qt::Key_TopMenu (0x0100010A) KEYCODE_MEDIA_TOP_MENU
"NavigateIn" Navigates into a submenu or option.       KEYCODE_NAVIGATE_IN
"NavigateNext" Navigates to the next item.       KEYCODE_NAVIGATE_NEXT
"NavigateOut" Navigates out of the current screen or menu.       KEYCODE_NAVIGATE_OUT
"NavigatePrevious" Navigates to the previous item.       KEYCODE_NAVIGATE_PREVIOUS
"NextFavoriteChannel" Cycles to the next channel in the favorites list. VK_NEXT_FAVORITE_CHANNEL      
"NextUserProfile" Cycles to the next saved user profile, if this feature is supported and multiple profiles exist. VK_USER      
"OnDemand" Opens the user interface for selecting on demand content or programs to watch. VK_ON_DEMAND      
"Pairing" Starts the process of pairing the remote with a device to be controlled.       KEYCODE_PAIRING (225)
"PinPDown" A button to move the picture-in-picture view downward. VK_PINP_DOWN      
"PinPMove" A button to control moving the picture-in-picture view. VK_PINP_MOVE      
"PinPToggle" Toggles display of th epicture-in-picture view on and off. VK_PINP_TOGGLE      
"PinPUp" A button to move the picture-in-picture view upward. VK_PINP_UP      
"PlaySpeedDown" Decreases the media playback rate. VK_PLAY_SPEED_DOWN      
"PlaySpeedReset" Returns the media playback rate to normal. VK_PLAY_SPEED_RESET      
"PlaySpeedUp" Increases the media playback rate. VK_PLAY_SPEED_UP      
"RandomToggle" Toggles random media (also known as "shuffle mode") on and off. VK_RANDOM_TOGGLE   GDK_KEY_AudioRandomPlay (0x1008FF99)  
"RcLowBattery" A code sent when the remote control's battery is low. This doesn't actually correspond to a physical key at all. VK_RC_LOW_BATTERY      
"RecordSpeedNext" Cycles among the available media recording speeds. VK_RECORD_SPEED_NEXT      
"RfBypass" Toggles radio frequency (RF) input bypass mode on and off. RF bypass mode passes RF input directly to the RF output without any processing or filtering. VK_RF_BYPASS      
"ScanChannelsToggle" Toggles the channel scan mode on and off; this is a mode which flips through channels automatically until the user stops the scan. VK_SCAN_CHANNELS_TOGGLE      
"ScreenModeNext" Cycles through the available screen display modes. VK_SCREEN_MODE_NEXT      
"Settings" Toggles display of the device's settings screen on and off. VK_SETTINGS   Qt::Key_Settings (0x0100011C) KEYCODE_SETTINGS
"SplitScreenToggle" Toggles split screen display mode on and off. VK_SPLIT_SCREEN_TOGGLE   GDK_KEY_SplitScreen (0x1008FF7D)
Qt::Key_SplitScreen (0x010000ED)
 
"STBInput" [3] Cycles among input modes on an external set-top box (STB).       KEYCODE_STB_INPUT (180)
"groupnext" [3] Toggles on and off an external STB.       KEYCODE_STB_POWER (179)
"Subtitle" Toggles the display of subtitles on and off if they're available. VK_SUBTITLE   GDK_KEY_Subtitle (0x1008FF9A) KEYCODE_CAPTIONS (175)
"Teletext" Toggles display of {{interwiki("wikipedia", "teletext")}}, if available. VK_TELETEXT     KEYCODE_TV_TELETEXT (233)
"VideoModeNext" [3] Cycles through the available video modes. VK_VIDEO_MODE_NEXT   GDK_KEY_Next_VMode (0x1008FE22)  
"Wink" Causes the device to identify itself in some fashion, such as by flashing a light, briefly changing the brightness of indicator lights, or emitting a tone. VK_WINK      
"ZoomToggle" [2] Toggles between full-screen and scaled content display, or otherwise change the magnification level. VK_ZOOM (0xFB)   Qt::Key_Zoom (0x01020006) KEYCODE_TV_ZOOM_MODE (255)

[1] Don't confuse the media controller VK_APPS key with the Windows VK_APPS key, which is also known as VK_CONTEXT_MENU. That key is encoded as "ContextMenu".

[2] Internet Explorer 9 and Firefox 36 and earlier identify the zoom toggle button as "Zoom". Firefox 37 corrects this to "ZoomToggle".

[3] These keys were "Unidentified" until Firefox 37.

Speech recognition keys

These special multimedia keys are used to control speech recognition features.

KeyboardEvent.key Value Description Virtual Keycode
Windows Mac Linux Android
"SpeechCorrectionList" [1] Presents a list of possible corrections for a word which was incorrectly identified. APPCOMMAND_CORRECTION_LIST      
"SpeechInputToggle" [2] Toggles between dictation mode and command/control mode. This lets the speech engine know whether to interpret spoken words as input text or as commands. APPCOMMAND_DICTATE_OR_COMMAND_CONTROL_TOGGLE      

[1] The APPCOMMAND_CORRECTION_LIST command on Windows generates "Unidentified" on Firefox.

[2] The APPCOMMAND_DICTATE_OR_COMMAND_CONTROL_TOGGLE command on Windows generates "Unidentified" on Firefox.

Document keys

These keys control documents. In the specification, they're included in other sets of keys, such as the media keys, but they make more sense when considered to be their own category.

KeyboardEvent.key Value Description Virtual Keycode
Windows Mac Linux Android
"Close" [1] Closes the current document or message. Must not exit the application. APPCOMMAND_CLOSE   GDK_KEY_Close (0x1008FF56)
Qt::Key_Close (0x010000CE)
KEYCODE_MEDIA_CLOSE (128)
"New" [1] Creates a new document or message. APPCOMMAND_NEW   GDK_KEY_New (0x1008FF68)
Qt::Key_New (0x01000120)
 
"Open" [1] Opens an existing document or message. APPCOMMAND_OPEN   GDK_KEY_Open (0x1008FF6B)
Qt::Key_Open (0x01000121)
 
"Print" Prints the current document or message. APPCOMMAND_PRINT   GDK_KEY_Print (0xFF61)
Qt::Print (0x01000009)
 
"Save" [1] Saves the current document or message. APPCOMMAND_SAVE   GDK_KEY_Save (0x1008FF77)
Qt::Key_Save (0x010000EA)
 
"SpellCheck" [1] Starts spell checking the current document. APPCOMMAND_SPELL_CHECK   GDK_KEY_Spell (0x1008FF7C)
Qt::Key_Spell (0x010000EC)
 
"MailForward" [1] Opens the user interface to forward a message. APPCOMMAND_FORWARD_MAIL   GDK_KEY_MailForward (0x1008FF90)
Qt::Key_MailForward (0x010000FB)
 
"MailReply" [1] Opens the user interface to reply to a message. APPCOMMAND_REPLY_TO_MAIL   GDK_KEY_Reply (0x1008FF72)
Qt::Key_Reply (0x010000E5)
 
"MailSend" [1] Sends the current message. APPCOMMAND_SEND_MAIL   GDK_KEY_Send (0x1008FF7B)
Qt::Key_Send (0x010000EB)
 

[1] Prior to Firefox 37, this key generated the key value "Unidentified".

Application selector keys

Some keyboards offer special keys for launching or switching to certain common applications. Key values for those are listed here.

KeyboardEvent.key Value Description Virtual Keycode
Windows Mac Linux Android
"LaunchCalculator" [5] The Calculator key, often labeled with an icon such as {{FontAwesomeIcon("icon-calculator")}}. This is often used as a generic application launcher key (APPCOMMAND_LAUNCH_APP2). APPCOMMAND_LAUNCH_APP2   GDK_KEY_Calculator (0x1008FF1D)
Qt::Key_Calculator (0x010000CB)
KEYCODE_CALCULATOR (210)
"LaunchCalendar" [5] The Calendar key, often labeled with an icon like {{FontAwesomeIcon("icon-calendar")}}.     GDK_KEY_Calendar (0x1008FF20)
Qt::Key_Calendar (0x010000E4)
KEYCODE_CALENDAR (208)
"LaunchContacts" The Contacts key.       KEYCODE_CONTACTS (207)
"LaunchMail" The Mail key. This is often displayed as {{FontAwesomeIcon("icon-envelope-o")}}. VK_LAUNCH_MAIL (0xB4)
APPCOMMAND_LAUNCH_MAIL
  GDK_KEY_Mail (0x1008FF19)
Qt::Key_LaunchMail (0x010000A0)
KEYCODE_ENVELOPE (65)
"LaunchMediaPlayer" [1] The Media Player key. VK_LAUNCH_MEDIA_SELECT (0xB5)
APPCOMMAND_LAUNCH_MEDIA_SELECT
  GDK_KEY_CD (0x1008FF53)
GDK_KEY_Video (0x1008FF87)
GDK_KEY_AudioMedia (0x1008FF32)
Qt::Key_LaunchMedia (0x010000A1)
 
"LaunchMusicPlayer" [5] The Music Player key, often labeled with an icon such as {{FontAwesomeIcon("icon-music")}}.     GDK_KEY_Music (0x1008FF92)
Qt::Key_Music (0x010000FD)
KEYCODE_MUSIC (209)
"LaunchMyComputer" [5] The My Computer key on Windows keyboards. This is often used as a generic application launcher key (APPCOMMAND_LAUNCH_APP1). APPCOMMAND_LAUNCH_APP1   GDK_KEY_MyComputer (0x1008FF33)
GDK_KEY_Explorer (0x1008FF5D)
 
"LaunchPhone" The Phone key, to open the phone dialer application if one is present.     GDK_KEY_Phone (0x1008FF6E)
Qt::Key_Phone (0x010000E3)
 
"LaunchScreenSaver" [5] The Screen Saver key.     GDK_KEY_ScreenSaver (0x1008FF2D)
Qt::Key_ScreenSaver (0x010000BA)
 
"LaunchSpreadsheet" [4] The Spreadsheet key. This key may be labeled with an icon such as {{FontAwesomeIcon("icon-table")}} or that of a specific spreadsheet application.     GDK_KEY_Excel (0x1008FF5C)
Qt::Key_Excel (0x010000D4)
 
"LaunchWebBrowser" [4] The Web Browser key. This key is frequently labeled with an icon such as {{FontAwesomeIcon("icon-globe")}} or the icon of a specific browser, depending on the device manufacturer.     GDK_KEY_WWW (0x1008FF2E)
Qt::Key_WWW (0x010000BB)
KEYCODE_EXPLORER (64)
"LaunchWebCam" [5] The WebCam key. Opens the webcam application.     GDK_KEY_WebCam (0x1008FF8F)
Qt::Key_WebCam (0x010000FA)
 
"LaunchWordProcessor" [5] The Word Processor key. This may be an icon of a specific word processor application, or a generic document icon.     GDK_KEY_Word (0x1008FF89)
Qt::Key_Word (0x010000F4)
 
"LaunchApplication1" [2] The first generic application launcher button. VK_LAUNCH_APP1 (0xB6)
APPCOMMAND_LAUNCH_APP1
  GDK_KEY_Launch0 (0x1008FF40)
Qt::Key_Launch0 (0x010000A2)
 
"LaunchApplication2" [3] The second generic application launcher button. VK_LAUNCH_APP2 (0xB7)
APPCOMMAND_LAUNCH_APP2
  GDK_KEY_Launch1 (0x1008FF41)
Qt::Key_Launch1 (0x010000A3)
 
"LaunchApplication3" The third generic application launcher button.     GDK_KEY_Launch2 (0x1008FF42)
Qt::Key_Launch2 (0x010000A4)
 
"LaunchApplication4" The fourth generic application launcher button.     GDK_KEY_Launch3 (0x1008FF43)
Qt::Key_Launch3 (0x010000A5)
 
"LaunchApplication5" The fifth generic application launcher button.     GDK_KEY_Launch4 (0x1008FF44)
Qt::Key_Launch4 (0x010000A6)
 
"LaunchApplication6" The sixth generic application launcher button.     GDK_KEY_Launch5 (0x1008FF45)
Qt::Key_Launch5 (0x010000A7)
 
"LaunchApplication7" The seventh generic application launcher button.     GDK_KEY_Launch6 (0x1008FF46)
Qt::Key_Launch6 (0x010000A8)
 
"LaunchApplication8" The eighth generic application launcher button.     GDK_KEY_Launch7 (0x1008FF47)
Qt::Key_Launch7 (0x010000A9)
 
"LaunchApplication9" The ninth generic application launcher button.     GDK_KEY_Launch8 (0x1008FF48)
Qt::Key_Launch8 (0x010000AA)
 
"LaunchApplication10" The 10th generic application launcher button.     GDK_KEY_Launch9 (0x1008FF49)
Qt::Key_Launch9 (0x010000AB)
 
"LaunchApplication11" The 11th generic application launcher button.     GDK_KEY_LaunchA (0x1008FF4A)
Qt::Key_LaunchA (0x010000AC)
 
"LaunchApplication12" The 12th generic application launcher button.     GDK_KEY_LaunchB (0x1008FF4B)
Qt::Key_LaunchB (0x010000AD)
 
"LaunchApplication13" The 13th generic application launcher button.     GDK_KEY_LaunchC (0x1008FF4C)
Qt::Key_LaunchC (0x010000AE)
 
"LaunchApplication14" The 14th generic application launcher button.     GDK_KEY_LaunchD (0x1008FF4D)
Qt::Key_LaunchD (0x010000AF)
 
"LaunchApplication15" The 15th generic application launcher button.     GDK_KEY_LaunchE (0x1008FF4E)
Qt::Key_LaunchE (0x010000B0)
 
"LaunchApplication16" The 16th generic application launcher button.     GDK_KEY_LaunchF (0x1008FF4F)
Qt::Key_LaunchF (0x010000B1)
 

[1] Internet Explorer 9 and Firefox 36 and earlier use "SelectMedia" instead of "LaunchMediaPlayer". Firefox 37 through Firefox 48 use "MediaSelect". Firefox 49 has been updated to match the latest specification, and to return "LaunchMediaPlayer".

[2] Google Chrome returns "LaunchCalculator" instead of "LaunchApplication1". See {{ChromeBug(612743)}} for more information.

[3] Google Chrome returns "LaunchMyComputer" instead of "LaunchApplication2". See {{ChromeBug(612743)}} for more information.

[4] Prior to Firefox 37, Firefox returned the key code "LaunchApplication1" instead of "LaunchWebBrowser" for the Web browser key.

[5] Firefox introduced support for this key in Firefox 37; prior to that, this key was reported as "Unidentified".

Browser control keys

Some keyboards include special keys for controlling Web browsers. Those keys follow.

KeyboardEvent.key Value Description Virtual Keycode
Windows Mac Linux Android
"BrowserBack" Navigates to the previous content or page in the current Web view's history. VK_BROWSER_BACK (0xA6)
APPCOMMAND_BROWSER_BACKWARD
  GDK_KEY_Back (0x1008FF26)
Qt::Key_Back (0x01000061)
KEYCODE_BACK (4)
"BrowserFavorites" [1] Opens the user's list of bookmarks/favorites. VK_BROWSER_FAVORITES (0xAB)
APPCOMMAND_BROWSER_FAVORITES
  GDK_KEY_Favorites (0x1008FF30)
GDK_KEY_MySites (0x1008FF67)
Qt::Favorites (0x01000091)
KEYCODE_BOOKMARK (174)
"BrowserForward" Navigates to the next content or page in the current Web view's history. VK_BROWSER_FORWARD (0xA7)
APPCOMMAND_BROWSER_FORWARD
  GDK_KEY_Forward (0x1008FF27)
Qt::Key_Forward (0x01000062)
KEYCODE_FORWARD (125)
"BrowserHome" Navigates to the user's preferred home page. VK_BROWSER_HOME (0xAC)
APPCOMMAND_BROWSER_HOME
  GDK_KEY_HomePage (0x1008FF18)
Qt::Key_HomePage (0x01000090)
KEYCODE_HOME (3)
"BrowserRefresh" Refreshes the current page or contentl. VK_BROWSER_REFRESH (0xA8)
APPCOMMAND_BROWSER_REFRESH
  GDK_KEY_Refresh (0x1008FF29)
GDK_KEY_Reload (0x1008FF73)
 
"BrowserSearch" Activates the user's preferred search engine or the search interface within their browser. VK_BROWSER_SEARCH (0xAA)
APPCOMMAND_BROWSER_SEARCH
  GDK_KEY_Search (0x1008FF1B)
Qt::Key_Search (0x01000092)
KEYCODE_SEARCH (84)
"BrowserStop" Stops loading the currently displayed Web view or content. VK_BROWSER_STOP (0xA9)
APPCOMMAND_BROWSER_STOP
  GDK_KEY_Stop (0x1008FF28)
Qt::Key_Search (0x01000063)
 

[1] Prior to Firefox 37, this key's value was reported as "Unidentified".

Numeric keypad keys

These keys are found on the keyboard's numeric keypad. However, not all are present on every keyboard. Although typical numeric keypads have numeric keys from 0 to 9 (encoded as "0" through "9"), some multimedia keyboards include additional number keys for higher numbers.

The 10 key, if present, generates events with the key value of "0".

KeyboardEvent.key Value Description Virtual Keycode
Windows Mac Linux Android
"Decimal" [1] {{obsolete_inline}} The decimal point key (typically . or , depending on the region. In newer browsers, this value to simply be the character generated by the decimal key (one of those two characters). [1] VK_DECIMAL (0x6E) kVK_ANSI_KeypadDecimal (0x41) GDK_KEY_KP_Decimal (0xFFAE)
 
KEYCODE_NUMPAD_DOT (158)
"Key11" The 11 key found on certain media numeric keypads.        
"Key12" The 12 key found on certain media numeric keypads.        
"Multiply" [1] {{obsolete_inline}} The numeric keypad's multiplication key, *. VK_MULTIPLY (0x6A) kVK_ANSI_KeypadMultiply (0x43) GDK_KEY_KP_Multiply (0xFFAA)
Qt::Key_Multiply (0x0D7)
KEYCODE_NUMPAD_MULTIPLY (155)
"Add" [1] {{obsolete_inline}} The numeric keypad's addition key, +. VK_ADD (0x6B) kVK_ANSI_KeypadPlus (0x45) GDK_KEY_KP_Add (0xFFAB) KEYCODE_NUMPAD_ADD (157)
"Clear" The numeric keypad's Clear key.   kVK_ANSI_KeypadClear (0x47) GDK_KEY_Clear (0xFF0B)
Qt::Key_Clear (0x0100000B)
KEYCODE_CLEAR (28)
"Divide" [1] {{obsolete_inline}} The numeric keypad's division key, /. VK_DIVIDE (0x6F) kVK_ANSI_KeypadDivide (0x4B) GDK_KEY_KP_Divide (0xFFAF)
Qt::Key_Slash (0x2F)
KEYCODE_NUMPAD_DIVIDE (154)
"Subtract" [1] {{obsolete_inline}} The numeric keypad's subtraction key, -. VK_SUBTRACT (0x6D) kVK_ANSI_KeypadMinus (0x4E) GDK_KEY_KP_Subtract (0xFFAD) KEYCODE_NUMPAD_SUBTRACT (156)
"Separator" [1] The numeric keypad's places separator character (in the United States, this is a comma, but elsewhere it is frequently a period). VK_SEPARATOR (0x6C) kVK_JIS_KeypadComma (0x5F) GDK_KEY_KP_Separator (0xFFAC)
 
KEYCODE_NUMPAD_COMMA (159)
"0" through "9" The actual digit keys on the numeric keypad. VK_NUMPAD0 (0x60) - VK_NUMPAD9 (0x69) kVK_Keypad0 (0x52) - kVK_Keypad9 (0x5C) GDK_KEY_KP_0 (0xFFB0) - GDK_KEY_KP_9 (0xFFB9) KEYCODE_NUMPAD_0 (144) - KEYCODE_NUMPAD_9 (153)

[1] While older browsers used words like "Add", "Decimal", "Multiply", and so forth modern browsers identify these using the actual character ("+", ".", "*", and so forth).

Revision Source

<p>{{APIRef("DOM Events")}}{{Draft}}</p>

<p><span class="seoSummary">The <code><strong>KeyboardEvent.key</strong></code> read-only property returns the value of a key or keys pressed by the user.</span> Its value is determined as follows:</p>

<ul>
 <li>If the pressed key has a printed representation, the returned value is a non-empty Unicode character string containing the printable representation of the key.</li>
 <li>If the pressed key is a control or special character, the returned value is one of the <a href="#Key_values">pre-defined key values</a>.</li>
 <li>If the <code>KeyboardEvent</code> represents the press of a dead key, the key value must be "<code>Dead</code>".</li>
 <li>If more than one key is pressed and the combination includes a modifier that makes the resulting keystroke non printing, the returned value is the printable character. For example, if the combination were Control + a, the letter "a" is returned.</li>
 <li>Some specialty keyboard keys (such as the extended keys for controlling media on multimedia keyboards) don't generate key codes on Windows; instead, they trigger <code>WM_APPCOMMAND</code> events. These events get mapped to DOM keyboard events, and are listed among the "Virtual key codes" for Windows, even though they aren't actually key codes.</li>
 <li>If the key cannot be identified, the returned value is <code>"Unidentified"</code>.</li>
</ul>

<div class="note">
<p>This page is undergoing heavy updating to improve its layout, modernize its content, and bring everything up to date. Newer content is nearer the top; to find the older tables, see {{anch("Previous versions of tables")}}. Once the updates are finished, that content will be removed. No information should be lost once it's all done.</p>
</div>

<h2 id="Example">Example</h2>

<p>This example uses {{domxref("EventTarget.addEventListener()")}} to listen for {{event("keydown")}} events. When they occur,&nbsp; the key's value is checked to see if it's one of the keys the code is interested in, and if it is, it gets processed in some way (possibly by steering a spacecraft, perhaps by changing the selected cell in a spreadsheet).</p>

<pre class="brush: js">
window.addEventListener("keydown", function (event) {
  if (event.defaultPrevented) {
    return; // Should do nothing if the key event was already consumed.
  }

  switch (event.key) {
    case "ArrowDown":
      // Do something for "down arrow" key press.
      break;
    case "ArrowUp":
      // Do something for "up arrow" key press.
      break;
    case "ArrowLeft":
      // Do something for "left arrow" key press.
      break;
    case "ArrowRight":
      // Do something for "right arrow" key press.
      break;
    case "Enter":
      // Do something for "enter" or "return" key press.
      break;
    case "<code>Escape</code>":
      // Do something for "esc" key press.
      break;
    default:
      return; // Quit when this doesn't handle the key event.
  }

  // Consume the event to avoid it being handled twice
  event.preventDefault();
}, true);
</pre>

<h2 id="Specification">Specification</h2>

<table class="standard-table">
 <tbody>
  <tr>
   <th scope="col">Specification</th>
   <th scope="col">Status</th>
   <th scope="col">Comment</th>
  </tr>
  <tr>
   <td>{{SpecName('DOM3 Events', '#widl-KeyboardEvent-key', 'KeyboardEvent.key')}}</td>
   <td>{{Spec2('DOM3 Events')}}</td>
   <td>Initial definition, included key values.</td>
  </tr>
 </tbody>
</table>

<h2 id="Browser_compatibility">Browser compatibility</h2>

<p>{{CompatibilityTable}}</p>

<div id="compat-desktop">
<table class="compat-table">
 <tbody>
  <tr>
   <th>Feature</th>
   <th>Chrome</th>
   <th>Firefox (Gecko)</th>
   <th>Internet Explorer</th>
   <th>Opera</th>
   <th>Safari (WebKit)</th>
  </tr>
  <tr>
   <td>Basic support</td>
   <td>
    <p>{{CompatChrome(51.0)}}</p>
   </td>
   <td>{{CompatGeckoDesktop("23.0")}}</td>
   <td>9.0[1]</td>
   <td>38.0</td>
   <td>{{CompatNo}} [2]</td>
  </tr>
  <tr>
   <td>non-printable keys</td>
   <td>{{CompatChrome(51.0)}}</td>
   <td>{{CompatGeckoDesktop("23.0")}}</td>
   <td>9.0[1]</td>
   <td>38.0</td>
   <td>{{CompatNo}}</td>
  </tr>
  <tr>
   <td>printable keys</td>
   <td>{{CompatChrome(51.0)}}</td>
   <td>{{CompatGeckoDesktop("29.0")}}</td>
   <td>9.0[1]</td>
   <td>38.0</td>
   <td>{{CompatNo}}</td>
  </tr>
  <tr>
   <td>dead key</td>
   <td>{{CompatChrome(51.0)}}</td>
   <td>{{CompatNo}}</td>
   <td>{{CompatNo}}</td>
   <td>38.0</td>
   <td>{{CompatNo}}</td>
  </tr>
 </tbody>
</table>
</div>

<div id="compat-mobile">s
<table class="compat-table">
 <tbody>
  <tr>
   <th>Feature</th>
   <th>Android</th>
   <th>Android Webview</th>
   <th>Firefox Mobile (Gecko)</th>
   <th>IE&nbsp;Phone</th>
   <th>Opera Mobile</th>
   <th>Safari Mobile</th>
   <th>Chrome for Android</th>
  </tr>
  <tr>
   <td>Basic support</td>
   <td>{{CompatNo}}</td>
   <td>{{CompatChrome(51.0)}}</td>
   <td>{{CompatGeckoMobile("23.0")}}</td>
   <td>{{CompatUnknown}}</td>
   <td>38.0</td>
   <td>{{CompatNo}} [2]</td>
   <td>{{CompatChrome(51.0)}}</td>
  </tr>
  <tr>
   <td>non-printable keys of virtual keyboard</td>
   <td>{{CompatNo}}</td>
   <td>{{CompatChrome(51.0)}}</td>
   <td>{{CompatGeckoMobile("23.0")}}</td>
   <td>{{CompatUnknown}}</td>
   <td>38.0</td>
   <td>{{CompatNo}}</td>
   <td>{{CompatChrome(51.0)}}</td>
  </tr>
  <tr>
   <td>printable keys of virtual keyboard</td>
   <td>{{CompatNo}}</td>
   <td>{{CompatChrome(51.0)}}</td>
   <td>{{CompatUnknown}}</td>
   <td>{{CompatUnknown}}</td>
   <td>38.0</td>
   <td>{{CompatNo}}</td>
   <td>{{CompatChrome(51.0)}}</td>
  </tr>
  <tr>
   <td>non-printable keys of physical keyboard</td>
   <td>{{CompatNo}}</td>
   <td>{{CompatChrome(51.0)}}</td>
   <td>{{CompatGeckoMobile("23.0")}}</td>
   <td>{{CompatUnknown}}</td>
   <td>38.0</td>
   <td>{{CompatNo}}</td>
   <td>{{CompatChrome(51.0)}}</td>
  </tr>
  <tr>
   <td>printable keys of physical keyboard</td>
   <td>{{CompatNo}}</td>
   <td>{{CompatChrome(51.0)}}</td>
   <td>{{CompatGeckoMobile("29.0")}}</td>
   <td>{{CompatUnknown}}</td>
   <td>38.0</td>
   <td>{{CompatNo}}</td>
   <td>{{CompatChrome(51.0)}}</td>
  </tr>
 </tbody>
</table>
</div>

<p>[1]: Internet Explorer's implementation does not completely match the current spec because it is based on an older version of the spec.</p>

<p>[2]: <a href="https://bugs.webkit.org/show_bug.cgi?id=69029">WebKit bug #69029</a></p>

<h2 id="Key_values">Key values</h2>

<p>The tables below list the standard key values in various categories of key, with an explanation of what the key is typically used for. Corresponding virtual keycodes for common platforms are included where available.</p>

<h3 id="Special_values">Special values</h3>

<p>Values of <code>key</code> which have special meanings other than identifying a specific key or character.</p>

<table class="standard-table">
 <thead>
  <tr>
   <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> Value</th>
   <th rowspan="2" scope="col" style="text-align: left;">Description</th>
   <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
  </tr>
  <tr>
   <th scope="col" style="text-align: left;">Windows</th>
   <th scope="col" style="text-align: left;">Mac</th>
   <th scope="col" style="text-align: left;">Linux</th>
   <th scope="col" style="text-align: left;">Android</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td><code>"Unidentified"</code></td>
   <td>The user agent wasn't able to map the event's virtual keycode to a specific key value. This can happen due to hardware or software constraints, or because of constraints around the platform on which the user agent is running.</td>
   <td><em>varies</em></td>
   <td><em>varies</em></td>
   <td><em>varies</em></td>
   <td><em>varies</em></td>
  </tr>
 </tbody>
</table>

<h3 id="Modifier_keys">Modifier keys</h3>

<p>Modifiers are special keys which are used to generate special characters or cause special actions when used in combination with other keys. Examples include the <kbd>Shift</kbd> and <kbd>Control</kbd> keys, and lock keys such as <kbd>Caps Lock</kbd> and <kbd>NumLock</kbd>.</p>

<table class="standard-table">
 <thead>
  <tr>
   <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> Value</th>
   <th rowspan="2" scope="col" style="text-align: left;">Description</th>
   <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
  </tr>
  <tr>
   <th scope="col" style="text-align: left;">Windows</th>
   <th scope="col" style="text-align: left;">Mac</th>
   <th scope="col" style="text-align: left;">Linux</th>
   <th scope="col" style="text-align: left;">Android</th>
  </tr>
  <tr>
   <td><code>"Alt"</code></td>
   <td>The <kbd>Alt</kbd> (Alternative) key.</td>
   <td><code>VK_MENU</code> (0x12)<br />
    <code>VK_LMENU</code> (0xA4)<br />
    <code>VK_RMENU</code> (0xA5)</td>
   <td><code>kVK_Option</code> (0x3A)<br />
    <code>kVK_RightOption</code> (0x3D)</td>
   <td><code>GDK_KEY_Alt_L</code> (0xFFE9)<br />
    <code>GDK_KEY_Alt_R</code> (0xFFEA)<br />
    <code>Qt::Key_Alt</code> (0x01000023)</td>
   <td><code>KEYCODE_ALT_LEFT</code> (57)<br />
    <code>KEYCODE_ALT_RIGHT</code> (58)</td>
  </tr>
  <tr>
   <td><code>"AltGraph"</code></td>
   <td>The <kbd>AltGr</kbd> or <kbd>AltGraph</kbd> (Alternate Graphics) key. Enables the ISO Level 3 shift modifier (where <kbd>Shift</kbd> is the level 2 modifier).</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Mode_switch</code> (0xFF7E)<br />
    <code>GDK_KEY_ISO_Level3_Shift</code> (0xFE03)<br />
    <code>GDK_KEY_ISO_Level3_Latch</code> (0xFE04)<br />
    <code>GDK_KEY_ISO_Level3_Lock</code> (0xFE05)<br />
    <code>GDK_KEY_ISO_Level5_Shift</code> (0xFE11)<br />
    <code>GDK_KEY_ISO_Level5_Latch</code> (0xFE12)<br />
    <code>GDK_KEY_ISO_Level5_Lock</code> (0xFE13)<br />
    <code>Qt::Key_AltGr</code> (0x01001103<br />
    <code>Qt::Key_Mode_switch</code> (0x0100117E)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"CapsLock"</code></td>
   <td>The <kbd>Caps Lock</kbd> key. Toggles the capital character lock on and off for subsequent input.</td>
   <td><code>VK_CAPITAL</code> (0x14)</td>
   <td><code>kVK_CapsLock</code> (0x39)</td>
   <td><code>GDK_KEY_Caps_Lock</code> (0xFFE5)<br />
    <code>Qt::Key_CapsLock</code> (0x01000024)</td>
   <td><code>KEYCODE_CAPS_LOCK</code> (115)</td>
  </tr>
  <tr>
   <td><code>"Control"</code></td>
   <td>The <kbd>Control</kbd>, <kbd>Ctrl</kbd>, or <kbd>Ctl</kbd> key. Alows typing control characters.</td>
   <td><code>VK_CONTROL</code> (0x11)<br />
    <code>VK_LCONTROL</code> (0xA2)<br />
    <code>VK_RCONTROL</code> (0xA3)</td>
   <td><code>kVK_Control</code> (0x3B)<br />
    <code>kVK_RightControl</code> (0x3E)</td>
   <td><code>GDK_KEY_Control_L</code> (0xFFE3)<br />
    <code>GDK_KEY_Control_R</code> (0xFFE4)<br />
    <code>Qt::Key_Control</code> (0x01000021)</td>
   <td><code>KEYCODE_CTRL_LEFT</code> (113)<br />
    <code>KEYCODE_CTRL_RIGHT</code> (114)</td>
  </tr>
  <tr>
   <td><code>"Fn"</code></td>
   <td>The <kbd>Fn</kbd> (Function modifier) key. Used to allow generating function key (<kbd>F1</kbd>-<kbd>F15</kbd>, for instance) characters on keyboards without a dedicated function key area. Often handled in hardware so that events aren't generated for this key.</td>
   <td>&nbsp;</td>
   <td><code>kVK_Function</code> (0x3F)</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_FUNCTION</code> (119)</td>
  </tr>
  <tr>
   <td><code>"FnLock"</code></td>
   <td>The <kbd>FnLock</kbd> or <kbd>F-Lock</kbd> (Function Lock) key.Toggles the function key mode described by "Fn" on and off. Often handled in hardware so that events aren't generated for this key.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"Hyper"</code> [4]</td>
   <td>The <kbd>Hyper</kbd> key.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Hyper_L</code> (0xFFED)<br />
    <code>GDK_KEY_Hyper_R</code> (0xFFEE)<br />
    <code>Qt::Key_Hyper_L</code> (0x01000056)<br />
    <code>Qt::Key_Hyper_R</code> (0x01000057)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"Meta"</code> [1]</td>
   <td>The <kbd>Meta</kbd> key. Allows issuing special command inputs. This is the <kbd>Windows</kbd> logo key, or the <kbd>Command</kbd> or <kbd>⌘</kbd> key on Mac keyboards.</td>
   <td><code>VK_LWIN</code> (0x5B)<br />
    <code>VK_RWIN</code> (0x5C)</td>
   <td><code>kVK_Command</code> (0x37)<br />
    <code>kVK_RightCommand</code> (0x36)</td>
   <td><code>GDK_KEY_Meta_L</code> (0xFFE7)<br />
    <code>GDK_KEY_Meta_R</code> (0xFFE8)<br />
    <code>Qt::Key_Meta</code> (0x01000022)</td>
   <td><code>KEYCODE_META_LEFT</code> (117)<br />
    <code>KEYCODE_META_RIGHT</code> (118)</td>
  </tr>
  <tr>
   <td><code>"NumLock"</code></td>
   <td>The <kbd>NumLock</kbd> (Number Lock) key. Toggles the numeric keypad between number entry some other mode (often directional arrows).</td>
   <td><code>VK_NUMLOCK</code> (0x90)</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Num_Lock</code> (0xFF7F)<br />
    <code>Qt::Key_NumLock</code> (0x01000025)</td>
   <td><code>KEYCODE_NUM_LOCK</code> (143)</td>
  </tr>
  <tr>
   <td><code>"ScrollLock"</code> [2]</td>
   <td>The <kbd>Scroll Lock</kbd> key. Toggles beteen scrolling and cursor movement modes.</td>
   <td><code>VK_SCROLL</code> (0x91)</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Scroll_Lock</code> (0xFF14)<br />
    <code>Qt::Key_ScrollLock</code> (0x01000026)</td>
   <td><code>KEYCODE_SCROLL_LOCK</code> (116)</td>
  </tr>
  <tr>
   <td><code>"Shift"</code></td>
   <td>The <kbd>Shift</kbd> key. Modifies keystrokes to allow typing upper (or other) case letters, and to support typing punctuation and other special characters.</td>
   <td><code>VK_SHIFT</code> (0x10)<br />
    <code>VK_LSHIFT</code> (0xA0)<br />
    <code>VK_RSHIFT</code> (0xA1)</td>
   <td><code>kVK_Shift</code> (0x38)<br />
    <code>kVK_RightShift</code> (0x3C)</td>
   <td><code>GDK_KEY_Shift_L</code> (0xFFE1)<br />
    <code>GDK_KEY_Shift_R</code> (0xFFE2)<br />
    <code>Qt::Key_Shift</code> (0x01000020)</td>
   <td><code>KEYCODE_SHIFT_LEFT</code> (59)<br />
    <code>KEYCODE_SHIFT_RIGHT</code> (60)</td>
  </tr>
  <tr>
   <td><code>"Super"</code> [4]</td>
   <td>The <kbd>Super</kbd> key.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Super_L</code> (0xFFEB)<br />
    <code>GDK_KEY_Super_R</code> (0xFFEC)<br />
    <code>Qt::Key_Super_L</code> (0x01000053)<br />
    <code>Qt::Key_Super_R</code> (0x01000054)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"Symbol"</code></td>
   <td>The <kbd>Symbol</kbd> modifier key (found on certain virtual keyboards).</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_SYM</code> (63) [3]</td>
  </tr>
  <tr>
   <td><code>"SymbolLock"</code></td>
   <td>The <kbd>Symbol Lock</kbd> key.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
 </thead>
</table>

<p>[1] In Internet Explorer 9, as well as in all versions of Firefox, the <kbd>Windows</kbd> key is reported as <code>"OS"</code> instead of as <code>"Meta"</code>. This will be changed in Firefox per {{bug(1232918)}}. Until that's fixed, these keys are returned as <code>"OS"</code> by Firefox: <code>VK_LWIN</code> (0x5B) and <code>VK_RWIN</code> (0x5C) on Windows, and <code><code>GDK_KEY_Super_L</code> (0xFFEB)</code>, <code><code>GDK_KEY_Super_R</code> (0xFFEC)</code>, <code><code>GDK_KEY_Hyper_L</code> (0xFFED)</code>, and <code><code>GDK_KEY_Hyper_R</code> (0xFFEE)</code> on Linux.</p>

<p>[2] Internet Explorer 9 reports <code>"Scroll"</code> instead of <code>"ScrollLock"</code> for the <kbd>Scroll Lock</kbd> key.</p>

<p>[3] Firefox did not add support for the <kbd>Symbol</kbd> key until Firefox 37.</p>

<p>[4] Firefox generates the key value <code>"OS</code>" for the <kbd>Super</kbd> and <kbd>Hyper</kbd> keys, instead of <code>"Super"</code> and <code>"Hyper"</code>.</p>

<h3 id="Whitespace_keys">Whitespace keys</h3>

<table class="standard-table">
 <thead>
  <tr>
   <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> Value</th>
   <th rowspan="2" scope="col" style="text-align: left;">Description</th>
   <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
  </tr>
  <tr>
   <th scope="col" style="text-align: left;">Windows</th>
   <th scope="col" style="text-align: left;">Mac</th>
   <th scope="col" style="text-align: left;">Linux</th>
   <th scope="col" style="text-align: left;">Android</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td><code>"Enter"</code></td>
   <td>The <kbd>Enter</kbd> or <kbd>↵</kbd> key (sometimes labeled <kbd>Return</kbd>).</td>
   <td><code>VK_RETURN</code> (0x0D)</td>
   <td><code>kVK_Return</code> (0x24)<br />
    <code>kVK_ANSI_KeypadEnter</code> (0x4C)<br />
    <code>kVK_Powerbook_KeypadEnter</code> (0x34)</td>
   <td><code><code>GDK_KEY_Return</code> (0xFF0D)</code><br />
    <code><code>GDK_KEY_KP_Enter</code> (0xFF8D)</code><br />
    <code><code>GDK_KEY_ISO_Enter</code> (0xFE34)</code><br />
    <code><code>GDK_KEY_3270_Enter</code> (0xFD1E)</code><br />
    <code>Qt::Key_Return</code> (0x01000004)<br />
    <code>Qt::Key_Enter</code> (0x01000005)</td>
   <td><code>KEYCODE_ENTER</code> (66)<br />
    <code>KEYCODE_NUMPAD_ENTER</code> (160)<br />
    <code>KEYCODE_DPAD_CENTER</code> (23)</td>
  </tr>
  <tr>
   <td><code>"Tab"</code></td>
   <td>The Horizontal Tab key, <kbd>Tab</kbd>.</td>
   <td><code>VK_TAB</code> (0x09)</td>
   <td><code>kVK_Tab</code> (0x30)</td>
   <td><code><code>GDK_KEY_Tab</code> (0xFF09)</code><br />
    <code><code>GDK_KEY_KP_Tab</code> (0xFF89)<br />
    GDK_KEY_ISO_Left_Tab</code> (0xFE20)<br />
    <code>Qt::Key_Tab</code> (0x01000001)</td>
   <td><code>KEYCODE_TAB</code> (61)</td>
  </tr>
  <tr>
   <td><code>" "</code> [1]</td>
   <td>The space key, <kbd>Space Bar</kbd>.</td>
   <td><code>VK_SPACE</code> (0x20)</td>
   <td><code>kVK_Space</code> (0x31)</td>
   <td>
    <p><code>GDK_KEY_space</code> (0x20)<br />
     <code>GDK_KEY_KP_Space</code> (0xFF80)<br />
     <code>Qt::Key_Space</code> (0x20)</p>
   </td>
   <td><code>KEYCODE_SPACE</code> (62)</td>
  </tr>
 </tbody>
</table>

<p>[1] Older browsers may return "Spacebar" instead of " " for the <kbd>Space Bar</kbd> key. Firefox did so until version 37, as did Internet Explorer 9.</p>

<h3 id="Navigation_keys">Navigation keys</h3>

<table class="standard-table">
 <thead>
  <tr>
   <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> Value</th>
   <th rowspan="2" scope="col" style="text-align: left;">Description</th>
   <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
  </tr>
  <tr>
   <th scope="col" style="text-align: left;">Windows</th>
   <th scope="col" style="text-align: left;">Mac</th>
   <th scope="col" style="text-align: left;">Linux</th>
   <th scope="col" style="text-align: left;">Android</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td><code>"ArrowDown"</code> [1]</td>
   <td>The down arrow key.</td>
   <td><code>VK_DOWN</code> (0x28)</td>
   <td><code>kVK_DownArrow</code> (0x7D)</td>
   <td><code>GDK_KEY_Down</code> (0xFF54)<br />
    <code>GDK_KEY_KP_Down</code> (0xFF99)<br />
    <code>Qt::Key_Down</code> (0x01000015)</td>
   <td><code>KEYCODE_DPAD_DOWN</code> (20)</td>
  </tr>
  <tr>
   <td><code>"ArrowLeft"</code> [1]</td>
   <td>The left arrow key.</td>
   <td><code>VK_LEFT</code> (0x25)</td>
   <td><code>kVK_LeftArrow</code> (0x7B)</td>
   <td><code>GDK_KEY_Left</code> (0xFF51)<br />
    <code>GDK_KEY_KP_Left</code> (0xFF96)<br />
    <code>Qt::Key_Left</code> (0x01000012)</td>
   <td><code>KEYCODE_DPAD_LEFT</code> (21)</td>
  </tr>
  <tr>
   <td><code>"ArrowRight"</code> [1]</td>
   <td>The right arrow key.</td>
   <td><code>VK_RIGHT</code> (0x27)</td>
   <td><code>kVK_RightArrow</code> (0x7C)</td>
   <td><code>GDK_KEY_Right</code> (0xFF53)<br />
    <code>GDK_KEY_KP_Right</code> (0xFF98)<br />
    <code>Qt::Key_Right</code> (0x01000014)</td>
   <td><code>KEYCODE_DPAD_RIGHT</code> (22)</td>
  </tr>
  <tr>
   <td><code>"ArrowUp"</code> [1]</td>
   <td>The up arrow key.</td>
   <td><code>VK_UP</code><code> (0x26)</code></td>
   <td><code>kVK_UpArrow</code> (0x7E)</td>
   <td><code>GDK_KEY_Up</code> (0xFF52)<br />
    <code>GDK_KEY_KP_Up</code> (0xFF97)<br />
    <code>Qt::Key_Up</code> (0x01000013)</td>
   <td><code>KEYCODE_DPAD_UP</code> (19)</td>
  </tr>
  <tr>
   <td><code>"End"</code></td>
   <td>The <kbd>End</kbd> key. Moves to the end of content.</td>
   <td><code>VK_END</code> (0x23)</td>
   <td><code>kVK_End</code> (0x77)</td>
   <td><code>GDK_KEY_End</code> (0xFF57)<br />
    <code>GDK_KEY_KP_End</code> (0xFF9C)<br />
    <code>Qt::Key_End</code> (0x01000011)</td>
   <td><code>KEYCODE_MOVE_END</code> (123)</td>
  </tr>
  <tr>
   <td><code>"Home"</code></td>
   <td>The <kbd>Home</kbd> key. Moves to the start of content.</td>
   <td><code>VK_HOME</code> (0x24)</td>
   <td><code>kVK_Home</code> (0x73)</td>
   <td><code>GDK_KEY_Home</code> (0xFF50)<br />
    <code>GDK_KEY_KP_Home</code> (0xFF95)<br />
    <code>Qt::Key_Home</code> (0x01000010)</td>
   <td><code>KEYCODE_MOVE_HOME</code> (122)</td>
  </tr>
  <tr>
   <td><code>"PageDown"</code></td>
   <td>The <kbd>Page Down</kbd> (or <kbd>PgDn</kbd>) key. Scrolls down or displays the next page of content.</td>
   <td><code>VK_NEXT</code> (0x22)</td>
   <td><code>kVK_PageDown</code><code> (0x79)</code></td>
   <td><code>GDK_KEY_Page_Down</code> (0xFF56)<br />
    <code>GDK_KEY_KP_Page_Down</code> (0xFF9B)<br />
    <code>Qt::Key_PageDown</code> (0x01000017)</td>
   <td><code>KEYCODE_PAGE_DOWN</code> (93)</td>
  </tr>
  <tr>
   <td><code>"PageUp"</code></td>
   <td>The <kbd>Page Up</kbd> (or <kbd>PgUp</kbd>) key. Scrolls up or displays the previous page of content.</td>
   <td><code>VK_PRIOR</code> (0x21)</td>
   <td><code>kVK_PageUp</code> (0x74)</td>
   <td><code>GDK_KEY_Page_Up</code> (0xFF55)<br />
    <code>GDK_KEY_KP_Page_Up</code> (0xFF9A)<br />
    <code>Qt::Key_PageUp</code> (0x01000016)</td>
   <td><code>KEYCODE_PAGE_UP</code> (92)</td>
  </tr>
 </tbody>
</table>

<p>[1] Internet Explorer 9 and Firefox 36 and earlier return "Left", "Right", "Up", and "Down" for the arrow keys, instead of "ArrowLeft", "ArrowRight", "ArrowUp", and "ArrowDown".</p>

<h3 id="Editing_keys">Editing keys</h3>

<table class="standard-table">
 <thead>
  <tr>
   <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> Value</th>
   <th rowspan="2" scope="col" style="text-align: left;">Description</th>
   <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
  </tr>
  <tr>
   <th scope="col" style="text-align: left;">Windows</th>
   <th scope="col" style="text-align: left;">Mac</th>
   <th scope="col" style="text-align: left;">Linux</th>
   <th scope="col" style="text-align: left;">Android</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td><code>"Backspace"</code></td>
   <td>The <kbd>Backspace</kbd> key. This key is labeled <kbd>Delete</kbd> on Mac keyboards.</td>
   <td><code>VK_BACK</code> (0x08)</td>
   <td><code>kVK_Delete</code> (0x33)</td>
   <td><code>GDK_KEY_BackSpace</code> (0xFF08)<br />
    <code>Qt::Key_Backspace</code> (0x01000003)</td>
   <td><code>KEYCODE_DEL</code> (67)</td>
  </tr>
  <tr>
   <td><code>"Clear"</code></td>
   <td>The <kbd>Clear</kbd> key. Removes the currently selected input.</td>
   <td><code>VK_CLEAR</code> (0x0C)<br />
    <code>VK_OEM_CLEAR</code> (0xFE)</td>
   <td><code>kVK_ANSI_KeypadClear</code> (0x47)</td>
   <td><code>GDK_KEY_Clear</code> (0xFF0B)<br />
    <code>Qt::Key_Clear</code> (0x0100000B)</td>
   <td><code>KEYCODE_CLEAR</code> (28)</td>
  </tr>
  <tr>
   <td><code>"Copy"</code></td>
   <td>The <kbd>Copy</kbd> key (on certain extended keyboards).</td>
   <td><code>APPCOMMAND_COPY</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Copy</code> (0x1008FF57)<br />
    <code>Qt::Key_Copy</code> (0x010000CF)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"CrSel"</code> [3]</td>
   <td>The Cursor Select key, <kbd>CrSel</kbd>.</td>
   <td><code>VK_CRSEL</code> (0xF7)</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_3270_CursorSelect</code> (0xFD1C)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"Cut"</code></td>
   <td>The <kbd>Cut</kbd> key (on certain extended keyboards).</td>
   <td><code>APPCOMMAND_CUT</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Cut</code> (0x1008FF58)<br />
    <code>Qt::Key_Cut</code> (0x010000D0)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"Delete"</code> [2]</td>
   <td>The Delete key, <kbd>Del</kbd>.</td>
   <td><code>VK_DELETE</code> (0x2E)</td>
   <td><code>kVK_ForwardDelete</code> (0x75) [1]</td>
   <td><code>GDK_KEY_Delete</code> (0xFFFF)<br />
    <code>GDK_KEY_KP_Delete</code> (0xFF9F)<br />
    <code>Qt::Key_Delete</code> (0x01000007)</td>
   <td><code>KEYCODE_FORWARD_DEL</code> (112)</td>
  </tr>
  <tr>
   <td><code>"EraseEof"</code></td>
   <td>Erase to End of Field. Deletes all characters from the current cursor position to the end of the current field.</td>
   <td><code>VK_EREOF</code> (0xF9)</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_3270_ExSelect</code> (0xFD1B)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"ExSel"</code> [4]</td>
   <td>The <kbd>ExSel</kbd> (Extend Selection) key.</td>
   <td><code>VK_EXSEL</code> (0xF8)</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_3270_ExSelect</code> (0xFD1B)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"Insert"</code></td>
   <td>The Insert key, <kbd>Ins</kbd>. Toggles&nbsp; between inserting and overwriting text.</td>
   <td><code>VK_INSERT</code> (0x2D)</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Insert</code> (0xFF63)<br />
    <code>GDK_KEY_KP_Insert</code> (0xFF9E)<br />
    <code>Qt::Key_Insert</code> (0x01000006)</td>
   <td><code>KEYCODE_INSERT</code> (124)</td>
  </tr>
  <tr>
   <td><code>"Paste"</code></td>
   <td>Paste from the clipboard.</td>
   <td><code>APPCOMMAND_PASTE</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Paste</code> (0x1008FF6D)<br />
    <code>Qt::Key_Paste</code> (0x010000E2)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"Redo"</code></td>
   <td>Redo the last action.</td>
   <td><code>APPCOMMAND_REDO</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Redo</code> (0xFF66)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"Undo"</code></td>
   <td>Undo the last action.</td>
   <td><code>APPCOMMAND_UNDO</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Undo</code> (0xFF65)</td>
   <td>&nbsp;</td>
  </tr>
 </tbody>
</table>

<p>[1] On keyboards without a dedicated <kbd>Del</kbd> key, the Mac generates the <code>"Delete"</code> value when <kbd>Fn</kbd> is pressed in tandem with <kbd>Delete</kbd> (which is <kbd>Backspace</kbd> on other platforms).</p>

<p>[2] Internet Explorer 9 and Firefox 36 and earlier use "Del" instead of "Delete" for the <kbd>Del</kbd> key.</p>

<p>[3] Internet Explorer 9 and Firefox 36 and earlier generate the value <code>"Crsel"</code> instead of <code>"CrSel"</code> when the <kbd>CrSel</kbd> key is pressed.</p>

<p>[4] Internet Explorer 9 and Firefox 36 and earlier generate the value <code>"Exsel"</code> instead of <code>"ExSel"</code> when the <kbd>ExSel</kbd> key is pressed.</p>

<p>[5] Prior to Firefox 37, this key generated the value <code>"Unidentified"</code>.</p>

<h3 id="UI_keys">UI keys</h3>

<table class="standard-table">
 <thead>
  <tr>
   <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> Value</th>
   <th rowspan="2" scope="col" style="text-align: left;">Description</th>
   <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
  </tr>
  <tr>
   <th scope="col" style="text-align: left;">Windows</th>
   <th scope="col" style="text-align: left;">Mac</th>
   <th scope="col" style="text-align: left;">Linux</th>
   <th scope="col" style="text-align: left;">Android</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td><code>"Accept"</code></td>
   <td>The <kbd>Accept</kbd>, <kbd>Commit</kbd>, or <kbd>OK</kbd> key or button. Accepts the currently selected option or input method sequence conversion.</td>
   <td><code>VK_ACCEPT</code> (0x1E)</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_DPAD_CENTER</code> (23)</td>
  </tr>
  <tr>
   <td><code>"Again"</code></td>
   <td>The <kbd>Again</kbd> key. Redoes or repeats a previous action.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Redo</code> (0xFF66)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"Attn"</code> [4]</td>
   <td>The <kbd>Attn</kbd> (Attention) key.</td>
   <td><code>VK_OEM_ATTN</code> (0xF0)</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_3270_Attn</code> (0xFD0E)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"Cancel"</code> [1]</td>
   <td>The <kbd>Cancel</kbd> key.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Cancel</code> (0xFF69)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"ContextMenu"</code> [3]</td>
   <td>Shows the context menu. Typically found between the <kbd>Windows</kbd> (or <kbd>OS</kbd>) key and the <kbd>Control</kbd> key on the right side of the keyboard.</td>
   <td><code>VK_APPS</code> (0x5D)</td>
   <td><code>kVK_PC_ContextMenu</code> (0x6E)</td>
   <td><code>GDK_KEY_Menu</code> (0xFF67)<br />
    <code>Qt::Key_Menu</code> (0x01000055)</td>
   <td><code>KEYCODE_MENU</code> (82)</td>
  </tr>
  <tr>
   <td><code>"Escape"</code> [2]</td>
   <td>The <kbd>Esc</kbd> (Escape) key. Typically used as an exit, cancel, or "escape this oepration" button. Historically, the Escape character was used to signal the start of a special control sequence of characters called an "escape sequence."</td>
   <td><code>VK_ESCAPE</code> (0x1B)</td>
   <td><code>kVK_Escape</code> (0x35)</td>
   <td><code>GDK_KEY_Escape</code> (0xFF1B)<br />
    <code>Qt::Key_Escape</code> (0x01000000)</td>
   <td><code>KEYCODE_ESCAPE</code> (111)</td>
  </tr>
  <tr>
   <td><code>"Execute"</code></td>
   <td>The <kbd>Execute</kbd> key.</td>
   <td><code>VK_EXECUTE</code> (0x2B)</td>
   <td>&nbsp;</td>
   <td><code>Qt::Key_Execute</code> (0x01020003)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"Find"</code></td>
   <td>The <kbd>Find</kbd> key. Opens an interface (typically a dialog box) for performing a find/search operation.</td>
   <td><code>APPCOMMAND_FIND</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Find</code> (0xFF68)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"Finish"</code> [5]</td>
   <td>The <kbd>Finish</kbd> key.</td>
   <td><code>VK_OEM_FINISH</code> (0xF1)</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"Help"</code></td>
   <td>The <kbd>Help</kbd> key. Opens or toggles the display of help information.</td>
   <td><code>VK_HELP</code> (0x2F)<br />
    <code>APPCOMMAND_HELP</code></td>
   <td><code>kVK_Help</code> (0x72)</td>
   <td><code>GDK_KEY_Help</code> (0xFF6A)<br />
    <code>Qt::Key_Help</code> (0x01000058)</td>
   <td><code>KEYCODE_HELP</code> (259)</td>
  </tr>
  <tr>
   <td><code>"Pause"</code></td>
   <td>The <kbd>Pause</kbd> key. Pauses the current application or state, if applicable.
    <div class="note">This shouldn't be confused with the <code>"MediaPause"</code> key value, which is used for media controllers, rather than to control applications and processes.</div>
   </td>
   <td><code>VK_PAUSE</code> (0x13)</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Pause</code> (0xFF13)<br />
    <code>GDK_KEY_Break</code> (0xFF6B)<br />
    <code>Qt::Key_Pause</code> (0x01000008)</td>
   <td><code>KEYCODE_BREAK</code> (121)</td>
  </tr>
  <tr>
   <td><code>"Play"</code></td>
   <td>The <kbd>Play</kbd> key. Resumes a previously paused application, if applicable.
    <div class="note">This shouldn't be confused with the <code>"MediaPlay"</code> key value, which is used for media controllers, rather than to control applications and processes.</div>
   </td>
   <td><code>VK_PLAY</code> (0xFA)</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_3270_Play</code> (0xFD16)<br />
    <code>Qt::Key_Play</code> (0x01020005)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"Props"</code></td>
   <td>The <kbd>Props</kbd> (Properties) key.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"Select"</code></td>
   <td>The <kbd>Select</kbd> key.</td>
   <td><code>VK_SELECT</code> (0x29)</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Select</code> (0xFF60)</td>
   <td><code>KEYCODE_BUTTON_SELECT</code> (109)</td>
  </tr>
  <tr>
   <td><code>"ZoomIn"</code> [6]</td>
   <td>The <kbd>ZoomIn</kbd> key.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_ZoomIn</code> (0x1008FF8B)<br />
    <code>Qt::Key_ZoomIn</code> (0x010000F6)</td>
   <td><code>KEYCODE_ZOOM_IN</code> (168)</td>
  </tr>
  <tr>
   <td><code>"ZoomOut"</code> [6]</td>
   <td>The <kbd>ZoomOut</kbd> key.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_ZoomOut</code> (0x1008FF8C)<br />
    <code>Qt::Key_ZoomOut</code> (0x010000F7)</td>
   <td><code>KEYCODE_ZOOM_OUT</code> (169)</td>
  </tr>
 </tbody>
</table>

<p>[1] In Google Chrome 52, the <kbd>Cancel</kbd> key incorrectly returns the key code <code>"Pause"</code>. This is fixed in Chrome 53. See Chrome bug {{ChromeBug(612749)}} for details.</p>

<p>[2] In Internet Explorer 9 and Firefox 36 and earlier, the <kbd>Esc</kbd> key returns <code>"Esc"</code> instead of <code>"Escape"</code>.</p>

<p>[3] Internet Explorer 9 and Firefox 36 and earlier report <code>"Apps"</code> instead of <code>"ContextMenu"</code> for the context menu key.</p>

<p>[4] The <kbd>Attn</kbd> key generates the key code <code>"Unidentified"</code> on Internet Explorer 9. Firefox and Google Chrome report the same, unless the Japanese keyboard layout is in effect, in which case it generates <code>"KanaMode"</code> instead.</p>

<p>[5] The <kbd>Finish</kbd> key gemerates the key code <code>"Unidentified"</code> on Internet Explorer 9. Firefox reports the same, unless the Japanese keyboard layout is in effect, in which case it generates <code>"Katakana"</code> instead.</p>

<p>[6] Firefox didn't support the <code>"ZoomIn"</code> and <code>"ZoomOut"</code> keys until Firefox 37.</p>

<h3 id="Device_keys">Device keys</h3>

<table class="standard-table">
 <thead>
  <tr>
   <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> Value</th>
   <th rowspan="2" scope="col" style="text-align: left;">Description</th>
   <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
  </tr>
  <tr>
   <th scope="col" style="text-align: left;">Windows</th>
   <th scope="col" style="text-align: left;">Mac</th>
   <th scope="col" style="text-align: left;">Linux</th>
   <th scope="col" style="text-align: left;">Android</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td><code>"BrightnessDown"</code></td>
   <td>The Brightness Down key. Typically used to reduce the brightness of the display.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_MonBrightnessDown</code> (0x1008FF03)<br />
    <code>Qt::Key_MonBrightnessDown</code> (0x010000B3)</td>
   <td><code>KEYCODE_BRIGHTNESS_DOWN</code> (220)</td>
  </tr>
  <tr>
   <td><code>"BrightnessUp"</code></td>
   <td>The Brightness Up key. Typically increases the brightness of the display.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_MonBrightnessUp</code> (0x1008FF02)<br />
    <code>Qt::Key_MonBrightnessUp</code> (0x010000B2)</td>
   <td><code>KEYCODE_BRIGHTNESS_UP</code> (221)</td>
  </tr>
  <tr>
   <td><code>"Eject"</code></td>
   <td>The <kbd>Eject</kbd> key. Ejects removable media (or toggles an optical storage device tray open and closed).</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Eject</code> (0x1008FF2C)<br />
    <code>Qt::Key_Eject</code> (0x010000B9)</td>
   <td><code>KEYCODE_MEDIA_EJECT</code> (129)</td>
  </tr>
  <tr>
   <td><code>"LogOff"</code> [2]f</td>
   <td>The <kbd>LogOff</kbd> key.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_LogOff</code> (0x1008FF61)<br />
    <code>Qt::Key_LogOff</code> (0x010000D9)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"Power"</code></td>
   <td>The <kbd>Power</kbd> button or key, to toggle power on and off.
    <div class="note">Not all systems pass this key through to to the user agent.</div>
   </td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_POWER</code> (26)</td>
  </tr>
  <tr>
   <td><code>"PowerOff"</code></td>
   <td>The <kbd>PowerOff</kbd> or <kbd>PowerDown</kbd> key. Shuts off the system.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_PowerDown</code> (0x1008FF21)<br />
    <code>GDK_KEY_PowerOff</code> (0x1008FF2A)<br />
    <code>Qt::Key_PowerDown</code> (0x0100010B)<br />
    <code>Qt::Key_PowerOff</code> (0x010000B7)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"PrintScreen"</code></td>
   <td>The <kbd>PrintScreen</kbd> or <kbd>PrtScr</kbd> key. Sometimes <kbd>SnapShot</kbd>. Captures the screen and prints it or saves it to disk.</td>
   <td><code>VK_SNAPSHOT</code> (0x2C)</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_3270_PrintScreen</code> (0xFD1D)<br />
    <code>GDK_KEY_Print</code> (0xFF61)<br />
    <code>GDK_KEY_Sys_Req</code> (0xFF15)<br />
    <code>Qt::Key_Print</code> (0x01000009)<br />
    <code>Qt::Key_SysReq</code> (0x0100000A)</td>
   <td><code>KEYCODE_SYSRQ</code> (120)</td>
  </tr>
  <tr>
   <td><code>"Hibernate"</code> [2]</td>
   <td>The <kbd>Hibernate</kbd> key. This saves the state of the computer to disk and then shuts down; the computer can be returned to its previous state by restoring the saved state information.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Hibernate</code> (0x1008FFA8)<br />
    <code>Qt::Key_Hibernate</code> (0x01000108)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"Standby"</code> [1]</td>
   <td>The <kbd>Standby</kbd> key; also known as <kbd>Suspend</kbd> or <kbd>Sleep</kbd>. This turns off the display and puts the computer in a low power consumption mode, without completely powering off.</td>
   <td><code>VK_SLEEP</code> (0x5F)</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Standby</code> (0x1008FF10)<br />
    <code>GDK_KEY_Suspend</code> (0x1008FFA7)<br />
    <code>GDK_KEY_Sleep</code> (0x1008FF2F)<br />
    <code>Qt::Key_Standby</code> (0x01000093)<br />
    <code>Qt::Key_Suspend</code> (0x0100010C)<br />
    <code>Qt::Key_Sleep</code> (0x01020004)</td>
   <td><code>KEYCODE_SLEEP</code> (223)</td>
  </tr>
  <tr>
   <td><code>"WakeUp"</code> [2]</td>
   <td>The <kbd>WakeUp</kbd> key; used to wake the computer from the hibernation or standby modes.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_WakeUp</code> (0x1008FF2B)<br />
    <code>Qt::Key_WakeUp</code> (0x010000B8)</td>
   <td><code>KEYCODE_WAKEUP</code> (224)</td>
  </tr>
 </tbody>
</table>

<p>[1] The <kbd>Standby</kbd> key is not supported by Internet Explorer 9 and Firefox 36 and earlier, so it is reported as <code>"Unidentified"</code>.</p>

<p>[2] Prior to Firefox 37, this key generated the value <code>"Unidentified"</code>.</p>

<h3 id="IME_and_composition_keys">IME and composition keys</h3>

<p>Keys used when using an Input Method Editor (IME) to input text which can't readily be entered by simple keypresses, such as text in languages such as those which have more graphemes than there are character entry keys on the keyboard; common examples include Chinese, Japanese, Korean, and Hindi.</p>

<p>Some keys are common across multiple languages, while others exist only on keyboards targeting specific languages. In addition, not all keyboards have all of these keys.</p>

<h4 id="Common_IME_keys">Common IME keys</h4>

<table class="standard-table">
 <thead>
  <tr>
   <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> Value</th>
   <th rowspan="2" scope="col" style="text-align: left;">Description</th>
   <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
  </tr>
  <tr>
   <th scope="col" style="text-align: left;">Windows</th>
   <th scope="col" style="text-align: left;">Mac</th>
   <th scope="col" style="text-align: left;">Linux</th>
   <th scope="col" style="text-align: left;">Android</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td><code>"AllCandidates"</code></td>
   <td>The <kbd>All Candidates</kbd> key, which starts multi-candidate mode, in which multiple candidates are displayed for the ongoing input.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_MultipleCandidate</code> (0xFF3D<br />
    <code>Qt::Key_MultipleCandidate</code> (0x0100113D)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"Alphanumeric"</code></td>
   <td>The <kbd>Alphanumeric</kbd> key.</td>
   <td><code>VK_OEM_ATTN</code> (0xF0)</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Eisu_Shift</code> (0xFF2F)<br />
    <code>GDK_KEY_Eisu_toggle</code> (0xFF30)<br />
    <code>Qt::Key_Eisu_Shift</code> (0x0100112f)<br />
    <code>Qt::Key_Eisu_toggle</code> (0x01001130)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"CodeInput"</code></td>
   <td>The <kbd>Code Input</kbd> key, which enables code input mode, which lets the user enter characters by typing their code points (their Unicode character numbers, typically).</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Codeinput</code> (0xFF37)<br />
    <code>Qt::Key_Codeinput</code> (0x01001137)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"Compose"</code></td>
   <td>The <kbd>Compose</kbd> key.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Multi_key</code> (0xFF20) [1]<br />
    <code>Qt::Key_Multi_key</code> (0x01001120)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"Convert"</code> [4]</td>
   <td>The <kbd>Convert</kbd> key, which instructs the IME to convert the current input method sequence into the resulting character.</td>
   <td><code>VK_CONVERT</code> (0x1C)</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Henkan</code> (0xFF23)<br />
    <code>Qt::Key_Henkan</code> (0x01001123)</td>
   <td><code>KEYCODE_HENKAN</code> (214)</td>
  </tr>
  <tr>
   <td><code>"Dead"</code></td>
   <td>A dead "combining" key; that is, a key which is used in tandem with other keys to generate accented and other modified characters. If pressed by itself, it doesn't generate a character. If you wish to identify which specific dead key was pressed (in cases where more than one exists), you can do so by examining the {{domxref("KeyboardEvent")}}'s associated {{event("compositionupdate")}} event's&nbsp; {{domxref("CompositionEvent.data", "data")}} property.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>See {{anch("Dead keycodes for Linux")}} below</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"FinalMode"</code></td>
   <td>The <kbd>Final</kbd> (Final Mode) key is used on some Asian keyboards to enter final mode when using IMEs.</td>
   <td><code>VK_FINAL</code> (0x18)</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"GroupFirst"</code></td>
   <td>Switches to the first character group on an <a href="https://en.wikipedia.org/wiki/ISO/IEC_9995">ISO/IEC 9995 keyboard</a>. Each key may have multiple groups of characters, each in its own column. Pressing this key instructs the device to interpret keypresses as coming from the first column on subsequent keystrokes.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_ISO_First_Group</code> (0xFE0C)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"GroupLast"</code></td>
   <td>Switches to the last character group on an <a href="https://en.wikipedia.org/wiki/ISO/IEC_9995">ISO/IEC 9995 keyboard</a>.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_ISO_Last_Group</code> (0xFE0E)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"GroupNext"</code> [4]</td>
   <td>Switches to the next character group on an <a href="https://en.wikipedia.org/wiki/ISO/IEC_9995">ISO/IEC 9995 keyboard</a>.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_ISO_Next_Group</code> (0xFE08)</td>
   <td><code>KEYCODE_LANGUAGE_SWITCH</code> (204)</td>
  </tr>
  <tr>
   <td><code>"GroupPrevious"</code></td>
   <td>Switches to the previous character group on an <a href="https://en.wikipedia.org/wiki/ISO/IEC_9995">ISO/IEC 9995 keyboard</a>.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_ISO_Prev_Group</code> (0xFE0A)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"ModeChange"</code> [5]</td>
   <td>The Mode Change key. Toggles or cycles among input modes of IMEs.</td>
   <td><code>VK_MODECHANGE</code> (0x1F)</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Mode_switch</code> (0xFF7E)<br />
    <code>GDK_KEY_script_switch</code> (0xFF7E)<br />
    <code>Qt::Key_Mode_switch</code> (0x0100117E)</td>
   <td><code>KEYCODE_SWITCH_CHARSET</code> (95)</td>
  </tr>
  <tr>
   <td><code>"NextCandidate"</code></td>
   <td>The Next Candidate function key. Selects the next possible match for the ongoing input.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"NonConvert"</code> [2]</td>
   <td>The <kbd>NonConvert</kbd> ("Don't convert") key. This accepts the current input method sequence without running conversion when using an IME.</td>
   <td><code>VK_NONCONVERT</code> (0x1D)</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Muhenkan</code> (0xFF22)<br />
    <code>Qt::Key_Muhenkan</code> (0x01001122)<br />
    &nbsp;</td>
   <td><code>KEYCODE_MUHENKAN</code> (213)</td>
  </tr>
  <tr>
   <td><code>"PreviousCandidate"</code></td>
   <td>The Previous Candidate key. Selects the previous possible match for the ongoing input.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_PreviousCandidate</code> (0xFF3E)<br />
    <code>Qt::Key_PreviousCandidate</code> (0x0100113E)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"Process"</code> [3]</td>
   <td>The <kbd>Process</kbd> key. Instructs the IME to process the conversion.</td>
   <td><code>VK_PROCESSKEY</code> (0xE5)</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"SingleCandidate"</code> [4]</td>
   <td>The Single Candidate key. Enables single candidate mode (as opposed to multi-candidate mode); in this mode, only one candidate is displayed at a time.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_SingleCandidate</code> (0xFF3C)<br />
    <code>Qt::Key_SingleCandidate</code> (0x0100113C)</td>
   <td>&nbsp;</td>
  </tr>
 </tbody>
</table>

<p>[1] On the <em>X Window System</em>, the <kbd>Compose</kbd> key is called the <kbd>Multi</kbd> key.</p>

<p>[2] The <kbd>NonConvert</kbd> key is reported as <code>"Nonconvert"</code> instead of the correct <code>"NonConvert"</code> by Internet Explorer 9 and Firefox versions 36 and earlier.</p>

<p>[3] The <kbd>Process</kbd> key currently returns <code>"Unidentified"</code> in Firefox and Internet Explorer. Google Chrome returns the value of the key as if IME were not in use.</p>

<p>[4] Prior to Firefox 37, these keys were <code>"Unidentified"</code>.</p>

<p>[5] Firefox generates the key value <code>"AltGraph"</code> instead of <code>"ModeChange"</code>.</p>

<h4 id="Korean_keyboards_only">Korean keyboards only</h4>

<p>These keys are only available on Korean keyboards. There are other keys defined by various platforms for Korean keyboards, but these are the most common and are the ones identified by the UI Events specification.</p>

<table class="standard-table">
 <thead>
  <tr>
   <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> Value</th>
   <th rowspan="2" scope="col" style="text-align: left;">Description</th>
   <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
  </tr>
  <tr>
   <th scope="col" style="text-align: left;">Windows</th>
   <th scope="col" style="text-align: left;">Mac</th>
   <th scope="col" style="text-align: left;">Linux</th>
   <th scope="col" style="text-align: left;">Android</th>
  </tr>
  <tr>
   <td><code>"HangulMode"</code></td>
   <td>The <kbd>Hangul</kbd> (Korean character set) mode key, which toggles between Hangul and English entry modes.</td>
   <td><code>VK_HANGUL</code> (0x15) [1]</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Hangul</code> (0xFF31)<br />
    <code>Qt::Key_Hangul</code> (0x01001131)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"HanjaMode"</code></td>
   <td>Selects the Hanja mode, for converting Hangul characters to the more specific Hanja characters.</td>
   <td><code>VK_HANJA</code> (0x19) [1]</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Hangul_Hanja</code> (0xFF34)<br />
    <code>Qt::Key_Hangul_Hanja</code> (0x01001134)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"JunjaMode"</code></td>
   <td>Selects the Junja mode, in which Korean is represented using single-byte Latin characters.</td>
   <td><code>VK_JUNJA</code> (0x17)</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Hangul_Jeonja</code> (0xFF38)<br />
    <code>Qt::Key_Hangul_Jeonja</code> (0x01001138)</td>
   <td>&nbsp;</td>
  </tr>
 </thead>
</table>

<p>[1] <code>VK_HANGUL</code> and <code>VK_KANA</code> share the same numeric key value on Windows, as do <code>VK_HANJA</code> and <code>VK_KANJI</code>.</p>

<h4 id="Japanese_keyboards_only">Japanese keyboards only</h4>

<p>These keys are only available on Japanese keyboards.</p>

<table class="standard-table">
 <thead>
  <tr>
   <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> Value</th>
   <th rowspan="2" scope="col" style="text-align: left;">Description</th>
   <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
  </tr>
  <tr>
   <th scope="col" style="text-align: left;">Windows</th>
   <th scope="col" style="text-align: left;">Mac</th>
   <th scope="col" style="text-align: left;">Linux</th>
   <th scope="col" style="text-align: left;">Android</th>
  </tr>
  <tr>
   <td><code>"Eisu"</code> [1]</td>
   <td>The <kbd>Eisu</kbd> key. This key's purpose is defined by the IME, but may be used to close the IME.</td>
   <td>&nbsp;</td>
   <td><code>kVK_JIS_Eisu</code> (0x66)</td>
   <td><code>GDK_KEY_Eisu_toggle</code> (0xFF2F)<br />
    <code>Qt::Key_Eisu_toggle</code> (0x01001130)</td>
   <td><code>KEYCODE_EISU</code> (212)</td>
  </tr>
  <tr>
   <td><code>"Hankaku"</code> [3]</td>
   <td>The <kbd>Hankaku</kbd> (half-width characters) key.</td>
   <td><code>VK_OEM_AUTO</code> (0xF3)</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Hankaku</code> (0xFF29)<br />
    <code>Qt::Key_Hankaku</code> (0x01001129)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"Hiragana"</code></td>
   <td>The <kbd>Hiragana</kbd> key; selects Kana characters mode.</td>
   <td><code>VK_OEM_COPY</code> (0xF2)</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Hiragana</code> (0xFF25)<br />
    <code>Qt::Key_Hiragana</code> (0x01001125)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"HiraganaKatakana"</code> [6]</td>
   <td>Toggles between the Hiragana and Katakana writing systems.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Hiragana_Katakana</code> (0xFF27)<br />
    <code>Qt::Key_Hiragana_Katakana</code> (0x01001127)</td>
   <td><code>KEYCODE_KATAKANA_HIRAGANA</code> (215)</td>
  </tr>
  <tr>
   <td><code>"KanaMode"</code></td>
   <td>The <kbd>Kana Mode</kbd> (Kana Lock) key.</td>
   <td><code>VK_KANA</code> (0x15) [2]<br />
    <code>VK_ATTN</code> (0xF6)</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Kana_Lock</code> (0xFF2D)<br />
    <code>GDK_KEY_Kana_Shift</code> (0xFF2E)<br />
    <code>Qt::Key_Kana_Lock</code> (0x0100112D)<br />
    <code>Qt::Key_Kana_Shift</code> (0x0100112E)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"KanjiMode"</code></td>
   <td>The <kbd>Kanji Mode</kbd> key. Enables entering Japanese text using the ideographic characters of Chinese origin.</td>
   <td><code>VK_KANJI</code> [2]</td>
   <td><code>kVK_JIS_Kana</code> (0x68)</td>
   <td><code>GDK_KEY_Kanji</code> (0xFF21)<br />
    <code>Qt::Key_Kanji</code> (0x01001121)</td>
   <td><code>KEYCODE_KANA</code> (218)</td>
  </tr>
  <tr>
   <td><code>"Katakana"</code></td>
   <td>The <kbd>Katakana</kbd> key.</td>
   <td><code>VK_OEM_FINISH</code> (0xF1)</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Katakana</code> (0xFF26)<br />
    <code>Qt::Key_Katakana</code> (0x01001126)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"Romaji"</code> [5]</td>
   <td>The <kbd>Romaji</kbd> key; selects the Roman character set.</td>
   <td><code>VK_OEM_BACKTAB</code> (0xF5)</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Romaji</code> (0xFF24)<br />
    <code>Qt::Key_Romaji</code> (0x01001124)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"Zenkaku"</code> [4]</td>
   <td>The <kbd>Zenkaku</kbd> (full width) characters key.</td>
   <td><code>VK_OEM_ENLW</code> (0xF4)</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Zenkaku</code> (0xFF28)<br />
    <code>Qt::Key_Zenkaku</code> (0x01001128)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"ZenkakuHanaku"</code> [6]</td>
   <td>The <kbd>Zenkaku/Hankaku</kbd> (full width/half width) toggle key.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Zenkaku_Hankaku</code> (0xFF2A)<br />
    <code>Qt::Zenkaku_Hankaku</code> (0x0100112A)</td>
   <td>
    <p><code>KEYCODE_ZENKAKU_HANKAKU</code> (211)</p>
   </td>
  </tr>
 </thead>
</table>

<p>[1] Prior to Firefox 37, the <kbd>Eisu</kbd> key was mapped to <code>"RomanCharacters"</code> by mistake.</p>

<p>[2] <code>VK_HANGUL</code> and <code>VK_KANA</code> share the same numeric key value on Windows, as do <code>VK_HANJA</code> and <code>VK_KANJI</code>.</p>

<p>[3] Prior to Firefox 37, the <kbd>Hankaku</kbd> (half-width) key generated the key value <code>"HalfWidth"</code> on Firefox. Also, this key generates the value <code>"Unidentified"</code> on Internet Explorer 9.</p>

<p>[4] Internet Explorer 9 reports <code>"Unidentified"</code> for the <kbd>Zenkaku</kbd> key; Firefox 36 and earlier identify this key as <code>"FullWidth"</code> on Japanese keyboard layouts and <code>"Unidentified"</code> on all other keyboard layouts. Firefox 37 and later, and all versions of Google Chrome, correctly return <code>"Zenkaku"</code>.</p>

<p>[5] <code>"Unidentified"</code> in Internet Explorer 9. Firefox 36 and earlier identify the <kbd>Romaji</kbd> key as <code>"RomanCharacters"</code> on Japanese keyboards and <code>"Unidentified"</code> for other keyboards; this is corrected to return <code>"Romaji"</code> in Firefox 37 and later.</p>

<p>[6] This key is reported as <code>"Unidentified"</code> prior to Firefox 37.</p>

<h4 id="Dead_keycodes_for_Linux">Dead keycodes for Linux</h4>

<p>Linux generates accented characters using special <strong>dead keys</strong>; these are keys which are pressed in combination with character keys to generate accented forms of those characters. You can identify which specific dead key was used (if more than one exists) by examining the&nbsp; {{domxref("KeyboardEvent")}}'s associated {{event("compositionupdate")}} event's&nbsp; {{domxref("CompositionEvent.data", "data")}} property.</p>

<p>You can find a table of the dead keys and the characters they can be used with to generate accented or otherwise special characters on Linux using GTK</p>

<p>The value of&nbsp;{{domxref("CompositionEvent.data", "data")}} will be one of the following:</p>

<table class="standard-table">
 <tbody>
  <tr>
   <td><strong><code>CompositionEvent.data</code></strong> value</td>
   <td>Symbol</td>
   <td>Comments</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_grave</code> (0xFE50)<br />
    <code>Qt::Key_Dead_Grave</code> (0x01001250)</td>
   <td>`</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_acute</code> (0xFE51)<br />
    <code>Qt::Key_Dead_Acute</code> (0x01001251)</td>
   <td>´</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_circumflex</code> (0xFE52)<br />
    <code>Qt::Key_Dead_Circumflex</code> (0x01001252)</td>
   <td>ˆ</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_tilde</code> (0xFE53)<br />
    <code>Qt::Key_Dead_Tilde</code> (0x01001253)</td>
   <td>˜</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_perispomeni</code> (0xFE53)</td>
   <td>&nbsp;͂</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_macron</code> (0xFE54)<br />
    <code>Qt::Key_Dead_Macron</code> (0x01001254)</td>
   <td>¯</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_breve</code> (0xFE55)<br />
    <code>Qt::Key_Dead_Breve</code> (0x01001255)</td>
   <td>˘</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_abovedot</code> (0xFE56)<br />
    <code>Qt::Key_Dead_Abovedot</code> (0x01001256)</td>
   <td>˙</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_diaeresis</code> (0xFE57)<br />
    <code>Qt::Key_Dead_Diaeresis</code> (0x01001257)</td>
   <td>¨</td>
   <td>Also called an umlaut.</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_abovering</code> (0xFE58)<br />
    <code>Qt::Key_Dead_Abovering</code> (0x01001258)</td>
   <td>˚</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_doubleacute</code> (0xFE59)<br />
    <code>Qt::Key_Dead_Doubleacute</code> (0x01001259)</td>
   <td>˝</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_caron</code> (0xFE5A)<br />
    <code>Qt::Key_Dead_Caron</code> (0x0100125A)</td>
   <td>ˇ</td>
   <td>Also called a háček; used in Czech among other languages.</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_cedilla</code> (0xFE5B)<br />
    <code>Qt::Key_Dead_Cedilla</code> (0x0100125B)</td>
   <td>¸</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_ogonek</code> (0xFE5C)<br />
    <code>Qt::Key_Dead_Ogonek</code> (0x0100125C)</td>
   <td>˛</td>
   <td>Also called a nosinė; used in Polish and Old Irish.</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_iota</code> (0xFE5D)<br />
    <code>Qt::Key_Dead_Iota</code> (0x0100125D)</td>
   <td>&nbsp;ͅ</td>
   <td>Iota subscript.</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_voiced_sound</code> (0xFE5E)<br />
    <code>Qt::Key_Dead_Voiced_Sound</code> (0x0100125E)</td>
   <td>゙</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_semivoiced_sound</code> (0xFE5F)<br />
    <code>Qt::Key_Dead_Semivoiced_Sound</code> (0x0100125F)</td>
   <td>゚</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_belowdot</code> (0xFE60)<br />
    <code>Qt::Key_Dead_Belowdot</code> (0x01001260)</td>
   <td>̣̣</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_hook</code> (0xFE61)<br />
    <code>Qt::Key_Dead_Hook</code> (0x01001261)</td>
   <td>&nbsp; ̡</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_horn</code> (0xFE62)<br />
    <code>Qt::Key_Dead_Horn</code> (0x01001262)</td>
   <td>&nbsp;̛</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_stroke</code> (0xFE63)</td>
   <td>&nbsp;̶̶</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_abovecomma</code> (0xFE64)</td>
   <td>&nbsp;̓̓</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_psili</code> (0xFE64)</td>
   <td>&nbsp;᾿</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_abovereversedcomma</code> (0xFE65)</td>
   <td>ʽ</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_dasia</code> (0xFE65)</td>
   <td>῾</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_doublegrave</code> (0xFE66)</td>
   <td>&nbsp;̏</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_belowring</code> (0xFE67)</td>
   <td>˳</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_belowmacron</code> (0xFE68)</td>
   <td>&nbsp;̱</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_belowcircumflex</code> (0xFE69)</td>
   <td>ꞈ</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_belowtilde</code> (0xFE6A)</td>
   <td>̰</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_belowbreve</code> (0xFE6B)</td>
   <td>̮</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_belowdiaeresis</code> (0xFE6C)</td>
   <td>&nbsp;̤</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_invertedbreve</code> (0xFE6D)</td>
   <td>̯</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_belowcomma</code> (0xFE6E)</td>
   <td>̦</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_currency</code> (0xFE6F)</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_a</code> (0xFE80)</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_A</code> (0xFE81)</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_e</code> (0xFE82)</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_E</code> (0xFE83)</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_i</code> (0xFE84)</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_I</code> (0xFE85)</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_o</code> (0xFE86)</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_O</code> (0xFE87)</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_u</code> (0xFE88)</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_U</code> (0xFE89)</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_small_schwa</code> (0xFE8A)</td>
   <td>ə</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_capital_schwa</code> (0xFE8B)</td>
   <td>Ə</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>GDK_KEY_dead_greek</code> (0xFE8C)</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
 </tbody>
</table>

<h3 id="Function_keys">Function keys</h3>

<p>While various platforms support different numbers of the general-purpose function keys, such as <kbd>F1</kbd>-<kbd>F12</kbd> (or <kbd>F1</kbd>-<kbd>F10</kbd>, or <kbd>F1</kbd>-<kbd>F15</kbd>, or...), the first few are specifically defined as follows. If more function keys are available, their names continue the pattern here by continuing to increment the numeric portion of each key's name, so that, for example, <code>"F24"</code> is a valid key value.</p>

<table class="standard-table">
 <thead>
  <tr>
   <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> value</th>
   <th rowspan="2" scope="col" style="text-align: left;">Description</th>
   <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
  </tr>
  <tr>
   <th scope="col" style="text-align: left;">Windows</th>
   <th scope="col" style="text-align: left;">Mac</th>
   <th scope="col" style="text-align: left;">Linux</th>
   <th scope="col" style="text-align: left;">Android</th>
  </tr>
  <tr>
   <td><code>"F1"</code></td>
   <td>The first general-purpose function key, <kbd>F1</kbd>.</td>
   <td><code>VK_F1</code> (0x70)</td>
   <td><code>kVK_F1</code> (0x7A)</td>
   <td><code>GDK_KEY_F1</code> (0xFFBE)<br />
    <code>GDK_KEY_KP_F1</code> (0xFF91)<br />
    <code>Qt::Key_F1</code> (0x01000030)</td>
   <td><code>KEYCODE_F1</code> (131)</td>
  </tr>
  <tr>
   <td><code>"F2"</code></td>
   <td>The <kbd>F2</kbd> key.</td>
   <td><code>VK_F2</code> (0x71)</td>
   <td><code>kVK_F2</code> (0x78)</td>
   <td><code>GDK_KEY_F2</code> (0xFFBF)<br />
    <code>GDK_KEY_KP_F2</code> (0xFF92)<br />
    <code>Qt::Key_F2</code> (0x01000031)</td>
   <td><code>KEYCODE_F2</code> (132)</td>
  </tr>
  <tr>
   <td><code>"F3"</code></td>
   <td>The <kbd>F3</kbd> key.</td>
   <td><code>VK_F3</code> (0x72)</td>
   <td><code>kVK_F3</code> (0x63)</td>
   <td><code>GDK_KEY_F3</code> (0xFFC0)<br />
    <code>GDK_KEY_KP_F3</code> (0xFF93)<br />
    <code>Qt::Key_F3</code> (0x01000032)</td>
   <td><code>KEYCODE_F3</code> (133)</td>
  </tr>
  <tr>
   <td><code>"F4"</code></td>
   <td>The <kbd>F4</kbd> key.</td>
   <td><code>VK_F4</code> (0x73)</td>
   <td><code>kVK_F4</code> (0x76)</td>
   <td><code>GDK_KEY_F4</code> (0xFFC1)<br />
    <code>GDK_KEY_KP_F4</code> (0xFF94)<br />
    <code>Qt::Key_F4</code> (0x01000033)</td>
   <td><code>KEYCODE_F4</code> (134)</td>
  </tr>
  <tr>
   <td><code>"F5"</code></td>
   <td>The <kbd>F5</kbd> key.</td>
   <td><code>VK_F5</code> (0x74)</td>
   <td><code>kVK_F5</code> (0x60)</td>
   <td><code>GDK_KEY_F5</code> (0xFFC2)<br />
    <code>Qt::Key_F5</code> (0x01000034)</td>
   <td><code>KEYCODE_F5</code> (135)</td>
  </tr>
  <tr>
   <td><code>"F6"</code></td>
   <td>The <kbd>F6</kbd> key.</td>
   <td><code>VK_F6</code> (0x75)</td>
   <td><code>kVK_F6</code> (0x61)</td>
   <td><code>GDK_KEY_F6</code> (0xFFC3)<br />
    <code>Qt::Key_F6</code> (0x01000035)</td>
   <td><code>KEYCODE_F6</code> (136)</td>
  </tr>
  <tr>
   <td><code>"F7"</code></td>
   <td>The <kbd>F7</kbd> key.</td>
   <td><code>VK_F7</code> (0x76)</td>
   <td><code>kVK_F7</code> (0x62)</td>
   <td><code>GDK_KEY_F7</code> (0xFFC4)<br />
    <code>Qt::Key_F7</code> (0x01000036)</td>
   <td><code>KEYCODE_F7</code> (137)</td>
  </tr>
  <tr>
   <td><code>"F8"</code></td>
   <td>The <kbd>F8</kbd> key.</td>
   <td><code>VK_F8</code> (0x77)</td>
   <td><code>kVK_F8</code> (0x64)</td>
   <td><code>GDK_KEY_F8</code> (0xFFC5)<br />
    <code>Qt::Key_F8</code> (0x01000037)</td>
   <td><code>KEYCODE_F8</code> (138)</td>
  </tr>
  <tr>
   <td><code>"F9"</code></td>
   <td>The <kbd>F9</kbd> key.</td>
   <td><code>VK_F9</code> (0x78)</td>
   <td><code>kVK_F9</code> (0x65)</td>
   <td><code>GDK_KEY_F9</code> (0xFFC6)<br />
    <code>Qt::Key_F9</code> (0x01000038)</td>
   <td><code>KEYCODE_F9</code> (139)</td>
  </tr>
  <tr>
   <td><code>"F10"</code></td>
   <td>The <kbd>F10</kbd> key.</td>
   <td><code>VK_F10</code> (0x79)</td>
   <td><code>kVK_F10</code> (0x6D)</td>
   <td><code>GDK_KEY_F10</code> (0xFFC7)<br />
    <code>Qt::Key_F10</code> (0x01000039)</td>
   <td><code>KEYCODE_F10</code> (140)</td>
  </tr>
  <tr>
   <td><code>"F11"</code></td>
   <td>The <kbd>F11</kbd> key.</td>
   <td><code>VK_F11</code> (0x7A)</td>
   <td><code>kVK_F11</code> (0x67)</td>
   <td><code>GDK_KEY_F11</code> (0xFFC8)<br />
    <code>Qt::Key_F11</code> (0x0100003A)</td>
   <td><code>KEYCODE_F11</code> (141)</td>
  </tr>
  <tr>
   <td><code>"F12"</code></td>
   <td>The <kbd>F12</kbd> key.</td>
   <td><code>VK_F12</code> (0x7B)</td>
   <td><code>kVK_F12</code> (0x6F)</td>
   <td><code>GDK_KEY_F12</code> (0xFFC9)<br />
    <code>Qt::Key_F12</code> (0x0100003B)</td>
   <td><code>KEYCODE_F12</code> (142)</td>
  </tr>
  <tr>
   <td><code>"F13"</code></td>
   <td>The <kbd>F13</kbd> key.</td>
   <td><code>VK_F13</code> (0x7C)</td>
   <td><code>kVK_F13</code> (0x69)</td>
   <td><code>GDK_KEY_F13</code> (0xFFCA)<br />
    <code>Qt::Key_F13</code> (0x0100003C)</td>
   <td><code>KEYCODE_F13</code></td>
  </tr>
  <tr>
   <td><code>"F14"</code></td>
   <td>The <kbd>F14</kbd> key.</td>
   <td><code>VK_F14</code> (0x7D)</td>
   <td><code>kVK_F14</code> (0x6B)</td>
   <td><code>GDK_KEY_F14</code> (0xFFCB)<br />
    <code>Qt::Key_F1</code>4 (0x0100003D)</td>
   <td><code>KEYCODE_F14</code></td>
  </tr>
  <tr>
   <td><code>"F15"</code></td>
   <td>The <kbd>F15</kbd> key.</td>
   <td><code>VK_F15</code> (0x7E)</td>
   <td><code>kVK_F15</code> (0x71)</td>
   <td><code>GDK_KEY_F15</code> (0xFFCC)<br />
    <code>Qt::Key_F1</code>5 (0x0100003E)</td>
   <td><code>KEYCODE_F15</code></td>
  </tr>
  <tr>
   <td><code>"F16"</code></td>
   <td>The <kbd>F16</kbd> key.</td>
   <td><code>VK_F16</code> (0x7F)</td>
   <td><code>kVK_F16</code> (0x6A)</td>
   <td><code>GDK_KEY_F16</code> (0xFFCD)<br />
    <code>Qt::Key_F1</code>6 (0x0100003F)</td>
   <td><code>KEYCODE_F16</code></td>
  </tr>
  <tr>
   <td><code>"F17"</code></td>
   <td>The <kbd>F17</kbd> key.</td>
   <td><code>VK_F17</code> (0x80)</td>
   <td><code>kVK_F17</code> (0x40)</td>
   <td><code>GDK_KEY_F17</code> (0xFFCE)<br />
    <code>Qt::Key_F1</code>7 (0x01000040)</td>
   <td><code>KEYCODE_F17</code></td>
  </tr>
  <tr>
   <td><code>"F18"</code></td>
   <td>The <kbd>F18</kbd> key.</td>
   <td><code>VK_F18</code> (0x81)</td>
   <td><code>kVK_F18</code> (0x4F)</td>
   <td><code>GDK_KEY_F18</code> (0xFFCF)<br />
    <code>Qt::Key_F1</code>8 (0x01000041)</td>
   <td><code>KEYCODE_F18</code></td>
  </tr>
  <tr>
   <td><code>"F19"</code></td>
   <td>The <kbd>F19</kbd> key.</td>
   <td><code>VK_F19</code> (0x82)</td>
   <td><code>kVK_F19</code> (0x50)</td>
   <td><code>GDK_KEY_F19</code> (0xFFD0)<br />
    <code>Qt::Key_F1</code>9 (0x01000042)</td>
   <td><code>KEYCODE_F19</code></td>
  </tr>
  <tr>
   <td><code>"F20"</code></td>
   <td>The <kbd>F20</kbd> key.</td>
   <td><code>VK_F20</code> (0x83)</td>
   <td><code>kVK_F20</code> (0x5A)</td>
   <td><code>GDK_KEY_F20</code> (0xFFD1)<br />
    <code>Qt::Key_F20</code> (0x01000043)</td>
   <td><code>KEYCODE_F20</code></td>
  </tr>
  <tr>
   <td><code>"Soft1"</code></td>
   <td>The first general-purpose virtual function key.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>Qt::Key_Context1</code> (0x01100000)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"Soft2"</code></td>
   <td>The second general-purpose virtual function key.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>Qt::Key_Context2</code> (0x01100001)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"Soft3"</code></td>
   <td>The third general-purpose virtual function key.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>Qt::Key_Context3</code> (0x01100002)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"Soft4"</code></td>
   <td>The fourth general-purpose virtual function key.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>Qt::Key_Context4</code> (0x01100003)</td>
   <td>&nbsp;</td>
  </tr>
 </thead>
</table>

<h3 id="Phone_keys">Phone keys</h3>

<p>These keys represent buttons which commonly exist on modern smartphones.</p>

<table class="standard-table">
 <thead>
  <tr>
   <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> Value</th>
   <th rowspan="2" scope="col" style="text-align: left;">Description</th>
   <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
  </tr>
  <tr>
   <th scope="col" style="text-align: left;">Windows</th>
   <th scope="col" style="text-align: left;">Mac</th>
   <th scope="col" style="text-align: left;">Linux</th>
   <th scope="col" style="text-align: left;">Android</th>
  </tr>
  <tr>
   <td><code>"AppSwitch"</code></td>
   <td>Presents a list of recently-used applications which lets the user change apps quickly.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_APP_SWITCH</code> (181)</td>
  </tr>
  <tr>
   <td><code>"Call"</code></td>
   <td>The <kbd>Call</kbd> key; dials the number which has been entered.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>Qt::Key_Call</code> (0x01100004)</td>
   <td><code>KEYCODE_CALL</code> (5)</td>
  </tr>
  <tr>
   <td><code>"Camera"</code></td>
   <td>The <kbd>Camera</kbd> key; activates the camera.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>Qt::Key_Camera</code> (0x01100020)</td>
   <td><code>KEYCODE_CAMERA</code> (27)</td>
  </tr>
  <tr>
   <td><code>"CameraFocus"</code></td>
   <td>The <kbd>Focus</kbd> key; focuses the camera.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>Qt::Key_CameraFocus</code> (0x01100021)</td>
   <td><code>KEYCODE_FOCUS</code> (80)</td>
  </tr>
  <tr>
   <td><code>"EndCall"</code></td>
   <td>The <kbd>End Call</kbd> or <kbd>Hang Up</kbd> button.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>Qt::Key_Hangup</code> (0x01100005)</td>
   <td><code>KEYCODE_ENDCALL</code> (6)</td>
  </tr>
  <tr>
   <td><code>"GoBack"</code></td>
   <td>The <kbd>Back</kbd> button.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_BACK</code> (4)</td>
  </tr>
  <tr>
   <td><code>"GoHome"</code> [1]</td>
   <td>The <kbd>Home</kbd> button, which takes the user to the phone's main screen (usually an application launcher).</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_HOME</code> (3)</td>
  </tr>
  <tr>
   <td><code>"HeadsetHook"</code></td>
   <td>The <kbd>Headset Hook</kbd> key. This is typically actually a button on the headset which is used to hang up calls and play or pause media.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>Qt::Key_ToggleCallHangup</code> (0x01100007)</td>
   <td><code>KEYCODE_HEADSETHOOK</code> (79)</td>
  </tr>
  <tr>
   <td><code>"LastNumberRedial"</code></td>
   <td>The <kbd>Redial</kbd> button, which redials the last-called number.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>Qt::Key_LastNumberRedial</code> (0x01100009)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"Notification"</code></td>
   <td>The <kbd>Notification</kbd> key.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_NOTIFICATION</code> (83)</td>
  </tr>
  <tr>
   <td><code>"MannerMode"</code></td>
   <td>A button which cycles among the notification modes: silent, vibrate, ring, and so forth.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_MANNER_MODE</code> (205)</td>
  </tr>
  <tr>
   <td><code>"VoiceDial"</code></td>
   <td>The <kbd>Voice Dial</kbd> key. Initiates voice dialing.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>Qt::Key_VoiceDial</code> (0x01100008)</td>
   <td><code>KEYCODE_VOICE_ASSIST</code> (231)</td>
  </tr>
 </thead>
</table>

<p>[1] Prior to Firefox 37, the Home button generated a key code of <code>"Exit"</code>. Starting in Firefox 37, the button generates the key code <code>"MozHomeScreen"</code>.</p>

<h3 id="Multimedia_keys">Multimedia keys</h3>

<p>The multimedia keys are extra buttons or keys for controlling media devices, found on some keyboards.</p>

<table class="standard-table">
 <thead>
  <tr>
   <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> Value</th>
   <th rowspan="2" scope="col" style="text-align: left;">Description</th>
   <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
  </tr>
  <tr>
   <th scope="col" style="text-align: left;">Windows</th>
   <th scope="col" style="text-align: left;">Mac</th>
   <th scope="col" style="text-align: left;">Linux</th>
   <th scope="col" style="text-align: left;">Android</th>
  </tr>
  <tr>
   <td><code>"ChannelDown"</code></td>
   <td>Switches to the previous channel.</td>
   <td><code>APPCOMMAND_MEDIA_CHANNEL_DOWN</code></td>
   <td>&nbsp;</td>
   <td><code>Qt::Key_ChannelDown</code> (0x01000119)</td>
   <td><code>KEYCODE_CHANNEL_DOWN</code> (167)</td>
  </tr>
  <tr>
   <td><code>"ChannelUp"</code></td>
   <td>Switches to the next channel.</td>
   <td><code>APPCOMMAND_MEDIA_CHANNEL_UP</code></td>
   <td>&nbsp;</td>
   <td><code>Qt::Key_ChannelUp</code> (0x01000118)</td>
   <td><code>KEYCODE_CHANNEL_UP</code> (166)</td>
  </tr>
  <tr>
   <td><code>"MediaFastForward"</code> [2]</td>
   <td>Starts, continues, or increases the speed of fast forwarding the media.</td>
   <td><code>APPCOMMAND_MEDIA_FAST_FORWARD</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_AudioForward (0x1008FF97)<br />
    Qt:Key_AudioForward</code> (0x01000102)</td>
   <td><code>KEYCODE_MEDIA_FAST_FORWARD</code> (90)</td>
  </tr>
  <tr>
   <td><code>"MediaPause"</code></td>
   <td>Pauses the currently playing media. Some older applications use simply "Pause" but this is not correct.</td>
   <td><code>APPCOMMAND_MEDIA_PAUSE</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_AudioPause</code> (0x1008FF31)<br />
    <code>Qt::Key_MediaPause</code> (0x1000085)</td>
   <td><code>KEYCODE_MEDIA_PAUSE</code> (127)</td>
  </tr>
  <tr>
   <td><code>"MediaPlay"</code></td>
   <td>Starts or continues playing media at normal speed, if not already doing so. Has no effect otherwise.</td>
   <td><code>APPCOMMAND_MEDIA_PLAY</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_AudioPlay</code> (0x1008FF14)</td>
   <td><code>KEYCODE_MEDIA_PLAY</code><code> (126)</code></td>
  </tr>
  <tr>
   <td><code>"MediaPlayPause"</code></td>
   <td>Toggles between playing and pausing the current media.</td>
   <td><code>VK_MEDIA_PLAY_PAUSE</code> (0xB3)<br />
    <code>APPCOMMAND_MEDIA_PLAY_PAUSE</code></td>
   <td>&nbsp;</td>
   <td><code>Qt::Key_MediaTogglePlayPause</code> (0x1000086)</td>
   <td><code>KEYCODE_MEDIA_PLAY_PAUSE</code> (85)</td>
  </tr>
  <tr>
   <td><code>"MediaRecord"</code></td>
   <td>Starts or resumes recording media.</td>
   <td><code>APPCOMMAND_MEDIA_RECORD</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_AudioRecord</code> (0x1008FF1C)<br />
    <code>Qt::Key_MediaRecord</code> (0x01000084)</td>
   <td><code>KEYCODE_MEDIA_RECORD</code><code> (130)</code></td>
  </tr>
  <tr>
   <td><code>"MediaRewind"</code></td>
   <td>Starts, continues, or increases the speed of rewinding the media.</td>
   <td><code>APPCOMMAND_MEDIA_REWIND</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_AudioRewind</code> (0x1008FF3E)<br />
    <code>Qt::Key_AudioRewind</code> (0x010000C5)</td>
   <td><code>KEYCODE_MEDIA_REWIND</code><code> (89)</code></td>
  </tr>
  <tr>
   <td><code>"MediaStop"</code></td>
   <td>Stops the current media activity (such as playing, recording, pausing, forwarding, or rewinding). Has no effect if the media is currently stopped already.</td>
   <td><code>VK_MEDIA_STOP</code> (0xB2)<br />
    <code>APPCOMMAND_MEDIA_STOP</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_AudioStop</code> (0x1008FF15)<br />
    <code>Qt::Key_MediaStop</code> (0x01000081)</td>
   <td><code>KEYCODE_MEDIA_STOP</code> (86)</td>
  </tr>
  <tr>
   <td><code>"MediaTrackNext"</code> [1]</td>
   <td>Seeks to the next media or program track.</td>
   <td><code>VK_MEDIA_NEXT_TRACK</code> (0xB0)<br />
    <code>APPCOMMAND_MEDIA_NEXTTRACK</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_AudioNext</code> (0x1008FF17)<br />
    <code>Qt::Key_MediaNext</code> (0x01000083)</td>
   <td><code>KEYCODE_MEDIA_NEXT</code> (87)</td>
  </tr>
  <tr>
   <td><code>"MediaTrackPrevious"</code> [1]</td>
   <td>Seeks to the previous media or program track.</td>
   <td><code>VK_MEDIA_PREV_TRACK</code> (0xB1)<br />
    <code>APPCOMMAND_MEDIA_PREVIOUSTRACK</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_AudioPrev</code> (0x1008FF16)<br />
    <code>Qt::Key_MediaPrevious</code> (0x01000082)</td>
   <td><code>KEYCODE_MEDIA_PREVIOUS</code> (88)</td>
  </tr>
 </thead>
</table>

<p>[1] Internet Explorer 9 and Firefox 36 and earlier use <code>"MediaNextTrack"</code> and <code>"MediaPreviousTrack"</code> instead of <code>"MediaTrackNext"</code> and <code>"MediaTrackPrevious"</code>.</p>

<p>[2] Prior to Firefox 37, Firefox generated the key code <code>"FastFwd"</code> on some platforms and <code>"Unidentified"</code> on others instead of <code>"MediaFastForward"</code>.</p>

<h3 id="Audio_control_keys">Audio control keys</h3>

<p>These media keys are used specifically for controlling audio.</p>

<table class="standard-table">
 <thead>
  <tr>
   <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> Value</th>
   <th rowspan="2" scope="col" style="text-align: left;">Description</th>
   <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
  </tr>
  <tr>
   <th scope="col" style="text-align: left;">Windows</th>
   <th scope="col" style="text-align: left;">Mac</th>
   <th scope="col" style="text-align: left;">Linux</th>
   <th scope="col" style="text-align: left;">Android</th>
  </tr>
  <tr>
   <td><code>"AudioBalanceLeft"</code></td>
   <td>Adjusts audio balance toward the left.</td>
   <td><code>VK_AUDIO_BALANCE_LEFT</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"AudioBalanceRight"</code></td>
   <td>Adjusts audio balance twoard the right.</td>
   <td><code>VK_AUDIO_BALANCE_RIGHT</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"AudioBassDown"</code></td>
   <td>Decreases the amount of bass.</td>
   <td><code>APPCOMMAND_BASS_DOWN</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"AudioBassBoostDown"</code></td>
   <td>Reduces bass boosting or cycles downward through bass boost modes or states.</td>
   <td><code>VK_BASS_BOOST_DOWN</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"AudioBassBoostToggle"</code></td>
   <td>Toggles bass boosting on and off.</td>
   <td><code>APPCOMMAND_BASS_BOOST</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"AudioBassBoostUp"</code></td>
   <td>Increases the amoung of bass boosting, or cycles upward through a set of bass boost modes or states.</td>
   <td><code>VK_BASS_BOOST_UP</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"AudioBassUp"</code></td>
   <td>Increases the amount of bass.</td>
   <td><code>APPCOMMAND_BASS_UP</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"AudioFaderFront"</code></td>
   <td>Adjusts the audio fader toward the front.</td>
   <td><code>VK_FADER_FRONT</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"AudioFaderRear"</code></td>
   <td>Adjustts the audio fader toward the rear.</td>
   <td><code>VK_FADER_REAR</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"AudioSurroundModeNext"</code></td>
   <td>Selects the next available surround sound mode.</td>
   <td><code>VK_SURROUND_MODE_NEXT</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"AudioTrebleDown"</code></td>
   <td>Decreases the amount of treble.</td>
   <td><code>APPCOMMAND_TREBLE_DOWN</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"AudioTrebleUp"</code></td>
   <td>Increases the amount of treble.</td>
   <td><code>APPCOMMAND_TREBLE_UP</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"AudioVolumeDown" [1]</code></td>
   <td>Decreases the audio volume.</td>
   <td><code>VK_VOLUME_DOWN</code> (0xAE)<br />
    <code>APPCOMMAND_VOLUME_DOWN</code></td>
   <td><code>kVK_VolumeDown</code> (0x49)</td>
   <td><code>GDK_KEY_AudioLowerVolume</code> (0x1008FF11)<br />
    <code>Qt::Key_VolumeDown</code> (0x01000070)</td>
   <td><code>KEYCODE_VOLUME_DOWN</code> (25)</td>
  </tr>
  <tr>
   <td><code>"AudioVolumeMute" [1]</code></td>
   <td>Mutes the audio.</td>
   <td><code>VK_VOLUME_MUTE</code> (0xAD)<br />
    <code>APPCOMMAND_VOLUME_MUTE</code></td>
   <td><code>kVK_Mute</code> (0x4A)</td>
   <td><code>GDK_KEY_AudioMute</code> (0x1008FF12)<br />
    <code>Qt::Key_VolumeMute</code> (0x01000071)</td>
   <td><code>KEYCODE_VOLUME_MUTE</code> (164)</td>
  </tr>
  <tr>
   <td><code>"AudioVolumeUp" [1]</code></td>
   <td>Increases the audio volume.</td>
   <td><code>VK_VOLUME_UP</code> (0xAF)<br />
    <code>APPCOMMAND_VOLUME_UP</code></td>
   <td><code>kVK_VolumeUp</code> (0x48)</td>
   <td><code>GDK_KEY_AudioRaiseVolume</code> (0x1008FF13)<br />
    <code>Qt::Key_VolumeUp</code> (0x01000072)</td>
   <td><code>KEYCODE_VOLUME_UP</code> (24)</td>
  </tr>
  <tr>
   <td><code>"MicrophoneToggle"</code></td>
   <td>Toggles the microphone on and off.</td>
   <td><code>APPCOMMAND_MIC_ON_OFF_TOGGLE</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"MicrophoneVolumeDown"</code></td>
   <td>Decreases the microphone's input volume.</td>
   <td><code>APPCOMMAND_MICROPHONE_VOLUME_DOWN</code></td>
   <td>&nbsp;</td>
   <td><code>Qt::Key_MicVolumeDown</code> (0x0100011E)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"MicrophoneVolumeMute"</code></td>
   <td>Mutes the microphone input.</td>
   <td><code>APPCOMMAND_MICROPHONE_VOLUME_MUTE</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_AudioMicMute</code> (0x1008FFB2)<br />
    <code>Qt::Key_MicMute</code> (0x01000113)</td>
   <td><code>KEYCODE_MUTE</code> (91)</td>
  </tr>
  <tr>
   <td><code>"MicrophoneVolumeUp"</code></td>
   <td>Increases the microphone's input volume.</td>
   <td><code>APPCOMMAND_MICROPHONE_VOLUME_UP</code></td>
   <td>&nbsp;</td>
   <td><code>Qt::Key_MicVolumeUp</code> (0x0100011D)</td>
   <td>&nbsp;</td>
  </tr>
 </thead>
</table>

<p>[1]In Internet Explorer 9, and prior to Firefox 49, <code>"AudioVolumeUp"</code>, <code>"AudioVolumeDown"</code>, and <code>"AudioVolumeMute"</code> were <code>"VolumeUp"</code>, <code>"VolumeDown"</code>, and <code>"VolumeMute"</code>. In Firefox 49 they were updated to match the latest specification. The old names are still used on <a href="/en-US/docs/Mozilla/B2G_OS">Boot to Gecko</a>.</p>

<h3 id="TV_control_keys">TV control keys</h3>

<p>These key values represent buttons or keys present on television devices, or computers or phones which have TV support.</p>

<table class="standard-table">
 <thead>
  <tr>
   <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> Value</th>
   <th rowspan="2" scope="col" style="text-align: left;">Description</th>
   <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
  </tr>
  <tr>
   <th scope="col" style="text-align: left;">Windows</th>
   <th scope="col" style="text-align: left;">Mac</th>
   <th scope="col" style="text-align: left;">Linux</th>
   <th scope="col" style="text-align: left;">Android</th>
  </tr>
  <tr>
   <td><code>"TV"</code> [1]</td>
   <td>Switches into TV viewing mode.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_TV</code> (170)</td>
  </tr>
  <tr>
   <td><code>"TV3DMode"</code></td>
   <td>Toggles 3D TV mode on and off.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_3D_MODE</code> (206)</td>
  </tr>
  <tr>
   <td><code>"TVAntennaCable"</code></td>
   <td>Toggles between antenna and cable inputs.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_TV_ANTENNA_CABLE</code> (242)</td>
  </tr>
  <tr>
   <td><code>"TVAudioDescription"</code></td>
   <td>Toggles audio description mode on and off.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_TV_AUDIO_DESCRIPTION</code> (252)</td>
  </tr>
  <tr>
   <td><code>"TVAudioDescriptionMixDown"</code></td>
   <td>Decreases trhe audio description's mixing volume; reduces the volume of the audio descriptions relative to the program sound.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_TV_AUDIO_DESCRIPTION_MIX_DOWN</code> (254)</td>
  </tr>
  <tr>
   <td><code>"TVAudioDescriptionMixUp"</code></td>
   <td>Increases the audio description's mixing volume; increases the volume of the audio descriptions relative to the program sound.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_TV_AUDIO_DESCRIPTION_MIX_UP</code> (253)</td>
  </tr>
  <tr>
   <td><code>"TVContentsMenu"</code></td>
   <td>Displays or hides the media contents available for playback (this may be a channel guide showing the currently airing programs, or a list of media files to play).</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_TV_CONTENTS_MENU</code> (256)</td>
  </tr>
  <tr>
   <td><code>"TVDataService"</code></td>
   <td>Displays or hides the TV's data service menu.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_TV_DATA_SERVICE</code> (230)</td>
  </tr>
  <tr>
   <td><code>"TVInput"</code> [2]</td>
   <td>Cycles the input mode on an external TV.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_TV_INPUT</code> (178)</td>
  </tr>
  <tr>
   <td><code>"TVInputComponent1"</code></td>
   <td>Switches to the input "Component 1."</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_TV_INPUT_COMPONENT_1</code> (249)</td>
  </tr>
  <tr>
   <td><code>"TVInputComponent1"</code></td>
   <td>Switches to the input "Component 2."</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_TV_INPUT_COMPONENT_2</code> (250)</td>
  </tr>
  <tr>
   <td><code>"TVInputComposite1"</code></td>
   <td>Switches to the input "Composite 1."</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_TV_INPUT_COMPOSITE_1</code> (247)</td>
  </tr>
  <tr>
   <td><code>"TVInputComposite2"</code></td>
   <td>Switches to the input "Composite 2."</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_TV_INPUT_COMPOSITE_2</code> (248)</td>
  </tr>
  <tr>
   <td><code>"TVInputHDMI1"</code></td>
   <td>Switches to the input "HDMI 1."</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_TV_INPUT_HDMI_1</code> (243)</td>
  </tr>
  <tr>
   <td><code>"TVInputHDMI4"</code></td>
   <td>Switches to the input "HDMI 2."</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_TV_INPUT_HDMI_2</code> (244)</td>
  </tr>
  <tr>
   <td><code>"TVInputHDMI4"</code></td>
   <td>Switches to the input "HDMI 3."</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_TV_INPUT_HDMI_3</code> (245)</td>
  </tr>
  <tr>
   <td><code>"TVInputHDMI4"</code></td>
   <td>Switches to the input "HDMI 4."</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_TV_INPUT_HDMI_4</code> (246)</td>
  </tr>
  <tr>
   <td><code>"TVInputVGA1"</code></td>
   <td>Switches to the input "VGA 1."</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_TV_INPUT_VGA_1</code> (251)</td>
  </tr>
  <tr>
   <td><code>"TVMediaContext"</code></td>
   <td>The Media Context menu key.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_TV_MEDIA_CONTEXT_MENU</code> (257)</td>
  </tr>
  <tr>
   <td><code>"TVNetwork"</code></td>
   <td>Toggle the TV's network connection on and off.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_TV_NETWORK</code> (241)</td>
  </tr>
  <tr>
   <td><code>"TVNumberEntry"</code></td>
   <td>Put the TV into number entry mode.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_TV_NUMBER_ENTRY</code> (234)</td>
  </tr>
  <tr>
   <td><code>"TVPower"</code> [2]</td>
   <td>The device's power button.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_TV_POWER</code> (177)</td>
  </tr>
  <tr>
   <td><code>"TVRadioService"</code></td>
   <td>Radio button.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_TV_RADIO_SERVICE</code> (232)</td>
  </tr>
  <tr>
   <td><code>"TVSatellite"</code></td>
   <td>Satellite button.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_TV_SATELLITE</code> (237)</td>
  </tr>
  <tr>
   <td><code>"TVSatelliteBS"</code></td>
   <td>Broadcast Satellite button.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_TV_SATELLITE_BS</code> (238)</td>
  </tr>
  <tr>
   <td><code>"TVSatelliteCS"</code></td>
   <td>Communication Satellite button.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_TV_SATELLITE_CS</code> (239)</td>
  </tr>
  <tr>
   <td><code>"TVSatelliteToggle"</code></td>
   <td>Toggles among available satellites.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_TV_SATELLITE_SERVICE</code> (240)</td>
  </tr>
  <tr>
   <td><code>"TVTerrestrialAnalog"</code></td>
   <td>Selects analog terrestrial television service (analog cable or antenna reception).</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_TV_TERRESTRIAL_ANALOG</code> (235)</td>
  </tr>
  <tr>
   <td><code>"TVTerrestrialDigital"</code></td>
   <td>Selects digital terrestrial television service (digital cable or antenna receiption).</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_TV_TERRESTRIAL_DIGITAL</code> (236)</td>
  </tr>
  <tr>
   <td><code>"TVTimer"</code></td>
   <td>Timer programming button.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_TV_TIMER_PROGRAMMING</code> (258)</td>
  </tr>
 </thead>
</table>

<p>[1] Firefox added proper support for the <code>"TV"</code> key in Firefox 37; before that, this key generated the key code <code>"Live"</code>.</p>

<p>[2] These keys were <code>"Unidentified"</code> until Firefox 37.</p>

<h3 id="Media_controller_keys">Media controller keys</h3>

<p>Because modern remote controls for media devices often include buttons beyond the basic controls covered elsewhere in this document, key values are defined for a broad array of these additional buttons.</p>

<p>The values below are derived in part form a number of consumer electronics technical specifications:</p>

<ul>
 <li><a href="https://atsc.org/standard/a100-dtv-application-software-environment-level-1-dase-1/">DTV Application Software Environment</a> (part of the {{interwiki("wikipedia", "ATSC")}} specification)</li>
 <li><a href="https://www.cablelabs.com/specifications/OC-SP-OCAP1.1.3-100603.pdf">Open Cable Application Platform 1.1.3</a></li>
 <li><a href="https://www.ce.org/Standards/Standard-Listings/R7-Home-Network-Committee/CEA-2014-B-(ANSI%29.aspx">ANSI/CEA-2014-B</a>: Web-based Protocol and Framework for Remote User Interface on UPnP™ Networks and the Internet</li>
 <li><a href="https://developer.android.com/reference/android/view/KeyEvent.html">Android KeyEvent key code values</a></li>
</ul>

<div class="note">
<p>Remote controls typically include keys whose values are already defined elsewhere, such as under {{anch("Multimedia keys")}} or {{anch("Audio control keys")}}. Those keys' values will match what's documented in those tables.</p>
</div>

<table class="standard-table">
 <thead>
  <tr>
   <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> Value</th>
   <th rowspan="2" scope="col" style="text-align: left;">Description</th>
   <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
  </tr>
  <tr>
   <th scope="col" style="text-align: left;">Windows</th>
   <th scope="col" style="text-align: left;">Mac</th>
   <th scope="col" style="text-align: left;">Linux</th>
   <th scope="col" style="text-align: left;">Android</th>
  </tr>
  <tr>
   <td><code>"AVRInput"</code> [3]</td>
   <td>Changes the input mode on an external audio/video receiver (AVR) unit.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_AVR_INPUT</code> (182)</td>
  </tr>
  <tr>
   <td><code>"AVRPower"</code> [3]</td>
   <td>Toggles the power on an external AVR unit.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_AVR_POWER</code> (181)</td>
  </tr>
  <tr>
   <td><code>"ColorF0Red"</code> [3]</td>
   <td>General-purpose media function key, color-coded red; this has index 0 among the colored keys.</td>
   <td><code>VK_COLORED_KEY_0</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_PROG_RED</code> (183)</td>
  </tr>
  <tr>
   <td><code>"ColorF1Green"</code> [3]</td>
   <td>General-purpose media funciton key, color-coded green; this has index 1 among the colored keys.</td>
   <td><code>VK_COLORED_KEY_1</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_PROG_GREEN</code> (184)</td>
  </tr>
  <tr>
   <td><code>"ColorF2Yellow"</code> [3]</td>
   <td>General-purpose media funciton key, color-coded yellow; this has index 2 among the colored keys.</td>
   <td><code>VK_COLORED_KEY_2</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_PROG_YELLOW</code> (185)</td>
  </tr>
  <tr>
   <td><code>"ColorF3Blue"</code> [3]</td>
   <td>General-purpose media funciton key, color-coded blue; this has index 3 among the colored keys.</td>
   <td><code>VK_COLORED_KEY_3</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_PROG_BLUE</code> (186)</td>
  </tr>
  <tr>
   <td><code>"ColorF4Grey"</code></td>
   <td>General-purpose media funciton key, color-coded grey; this has index 4 among the colored keys.</td>
   <td><code>VK_COLORED_KEY_4</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_PROG_GREY</code></td>
  </tr>
  <tr>
   <td><code>"ColorF5Brown"</code></td>
   <td>General-purpose media funciton key, color-coded brown; this has index 5 among the colored keys.</td>
   <td><code>VK_COLORED_KEY_5</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_PROG_BROWN</code></td>
  </tr>
  <tr>
   <td><code>"ClosedCaptionToggle"</code></td>
   <td>Toggles closed captioning on and off.</td>
   <td><code>VK_CC</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_CAPTIONS</code> (175)</td>
  </tr>
  <tr>
   <td><code>"Dimmer"</code></td>
   <td>Adjusts the brightness of the device by toggling between two brightness levels <em>or</em> by cycling among multiple brightness levels.</td>
   <td><code>VK_DIMMER</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_BrightnessAdjust</code> (0x1008FF3B)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"DisplaySwap"</code></td>
   <td>Cycles among video sources.</td>
   <td><code>VK_DISPLAY_SWAP</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"DVR"</code></td>
   <td>Switches the input source to the Digital Video Recorder (DVR).</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_DVR</code> (173)</td>
  </tr>
  <tr>
   <td><code>"Exit"</code></td>
   <td>The Exit button, which exits the curreent application or menu.</td>
   <td><code>VK_EXIT</code></td>
   <td>&nbsp;</td>
   <td><code>Qt::Key_Exit</code> (0x0102000a)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"FavoriteClear0"</code></td>
   <td>Clears the program or content stored in the first favorites list slot.</td>
   <td><code>VK_CLEAR_FAVORITE_0</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"FavoriteClear1"</code></td>
   <td>Clears the program or content stored in the second favorites list slot.</td>
   <td><code>VK_CLEAR_FAVORITE_1</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"FavoriteClear2"</code></td>
   <td>Clears the program or content stored in the third favorites list slot.</td>
   <td><code>VK_CLEAR_FAVORITE_2</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"FavoriteClear3"</code></td>
   <td>Clears the program or content stored in the fourth favorites list slot.</td>
   <td><code>VK_CLEAR_FAVORITE_3</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"FavoriteRecall0"</code></td>
   <td>Selects (recalls) the program or content stored in the first favorites list slot.</td>
   <td><code>VK_RECALL_FAVORITE_0</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"FavoriteRecall1"</code></td>
   <td>Selects (recalls) the program or content stored in the second favorites list slot.</td>
   <td><code>VK_RECALL_FAVORITE_1</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"FavoriteRecall2"</code></td>
   <td>Selects (recalls) the program or content stored in the third favorites list slot.</td>
   <td><code>VK_RECALL_FAVORITE_2</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"FavoriteRecall3"</code></td>
   <td>Selects (recalls) the program or content stored in the fourth favorites list slot.</td>
   <td><code>VK_RECALL_FAVORITE_3</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"FavoriteStore0"</code></td>
   <td>Stores the current program or content into the first favorites list slot.</td>
   <td><code>VK_STORE_FAVORITE_0</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"FavoriteStore1"</code></td>
   <td>Stores the current program or content into the second favorites list slot.</td>
   <td><code>VK_STORE_FAVORITE_1</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"FavoriteStore2"</code></td>
   <td>Stores the current program or content into the third favorites list slot.</td>
   <td><code>VK_STORE_FAVORITE_2</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"FavoriteStore3"</code></td>
   <td>Stores the current program or content into the fourth favorites list slot.</td>
   <td><code>VK_STORE_FAVORITE_3</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"Guide"</code></td>
   <td>Toggles the display of the program or content guide.</td>
   <td><code>VK_GUIDE</code></td>
   <td>&nbsp;</td>
   <td><code>Qt::Key_Guide</code> (0x0100011A)</td>
   <td><code>KEYCODE_GUIDE</code> (172)</td>
  </tr>
  <tr>
   <td><code>"GuideNextDay"</code></td>
   <td>If the guide is currently displayed, this button tells the guide to display the next day's content.</td>
   <td><code>VK_NEXT_DAY</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"GuidePreviousDay"</code></td>
   <td>If the guide is currently displayed, this button tells the guide to display the previous day's content.</td>
   <td><code>VK_PREV_DAY</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"Info"</code></td>
   <td>Toggles the display of information about the currently selected content, program, or media.</td>
   <td><code>VK_INFO</code></td>
   <td>&nbsp;</td>
   <td><code>Qt::Key_Info</code> (0x0100011B)</td>
   <td><code>KEYCODE_INFO</code> (165)</td>
  </tr>
  <tr>
   <td><code>"InstantReplay"</code></td>
   <td>Tellls the device to perform an instant replay (typically some form of jumping back a short amount of time then playing it again, possibly but not usually in slow motion).</td>
   <td><code>VK_INSTANT_REPLAY</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"Link"</code></td>
   <td>Opens content liniked to the current program, if available and possible.</td>
   <td><code>VK_LINK</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"ListProgram"</code></td>
   <td>Lists the current program.</td>
   <td><code>VK_LIST</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"LiveContent"</code></td>
   <td>Toggles a display listing currently available live content or programs.</td>
   <td><code>VK_LIVE</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"Lock"</code></td>
   <td>Locks or unlocks the currently selected content or pgoram.</td>
   <td><code>VK_LOCK</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"MediaApps"</code></td>
   <td>Presents a list of media applications, such as photo viewers, audio and video players, and games. [1]</td>
   <td><code>VK_APPS</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"MediaAudioTrack"</code></td>
   <td>The Audio Track key.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>GDK_KEY_AudioCycleTrack (0x1008FF9B)<br />
    <code>Qt::Key_AudioCycleTrack</code> (0x01000106)</td>
   <td><code>KEYCODE_MEDIA_AUDIO_TRACK</code> (222)</td>
  </tr>
  <tr>
   <td><code>"MediaLast"</code></td>
   <td>Jumps back to the last-viewed content, program, or other media.</td>
   <td><code>VK_LAST</code></td>
   <td>&nbsp;</td>
   <td><code>Qt::Key_MediaLast</code> (0x0100FFFF)</td>
   <td><code>KEYCODE_LAST_CHANNEL</code> (229)</td>
  </tr>
  <tr>
   <td><code>"MediaSkipBackward"</code></td>
   <td>Skips backward to the previous content or program.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_MEDIA_SKIP_BACKWARD</code></td>
  </tr>
  <tr>
   <td><code>"MediaSkipForward"</code></td>
   <td>Skips forward to the next content or program.</td>
   <td><code>VK_SKIP</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_MEDIA_SKIP_FORWARD</code></td>
  </tr>
  <tr>
   <td><code>"MediaStepBackward"</code></td>
   <td>Steps backward to the previous content or program.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_MEDIA_STEP_BACKWARD</code></td>
  </tr>
  <tr>
   <td><code>"MediaStepForward"</code></td>
   <td>Steps forward to the next content or program.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_MEDIA_SKIP_FORWARD</code></td>
  </tr>
  <tr>
   <td><code>"MediaTopMenu"</code></td>
   <td>Top Menu button; opens the media's main menu, such as on a DVD or Blu-Ray disc.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>Qt::Key_TopMenu</code> (0x0100010A)</td>
   <td><code>KEYCODE_MEDIA_TOP_MENU</code></td>
  </tr>
  <tr>
   <td><code>"NavigateIn"</code></td>
   <td>Navigates into a submenu or option.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_NAVIGATE_IN</code></td>
  </tr>
  <tr>
   <td><code>"NavigateNext"</code></td>
   <td>Navigates to the next item.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_NAVIGATE_NEXT</code></td>
  </tr>
  <tr>
   <td><code>"NavigateOut"</code></td>
   <td>Navigates out of the current screen or menu.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_NAVIGATE_OUT</code></td>
  </tr>
  <tr>
   <td><code>"NavigatePrevious"</code></td>
   <td>Navigates to the previous item.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_NAVIGATE_PREVIOUS</code></td>
  </tr>
  <tr>
   <td><code>"NextFavoriteChannel"</code></td>
   <td>Cycles to the next channel in the favorites list.</td>
   <td><code>VK_NEXT_FAVORITE_CHANNEL</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"NextUserProfile"</code></td>
   <td>Cycles to the next saved user profile, if this feature is supported and multiple profiles exist.</td>
   <td><code>VK_USER</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"OnDemand"</code></td>
   <td>Opens the user interface for selecting on demand content or programs to watch.</td>
   <td><code>VK_ON_DEMAND</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"Pairing"</code></td>
   <td>Starts the process of pairing the remote with a device to be controlled.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_PAIRING</code> (225)</td>
  </tr>
  <tr>
   <td><code>"PinPDown"</code></td>
   <td>A button to move the picture-in-picture view downward.</td>
   <td><code>VK_PINP_DOWN</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"PinPMove"</code></td>
   <td>A button to control moving the picture-in-picture view.</td>
   <td><code>VK_PINP_MOVE</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"PinPToggle"</code></td>
   <td>Toggles display of th epicture-in-picture view on and off.</td>
   <td><code>VK_PINP_TOGGLE</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"PinPUp"</code></td>
   <td>A button to move the picture-in-picture view upward.</td>
   <td><code>VK_PINP_UP</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"PlaySpeedDown"</code></td>
   <td>Decreases the media playback rate.</td>
   <td><code>VK_PLAY_SPEED_DOWN</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"PlaySpeedReset"</code></td>
   <td>Returns the media playback rate to normal.</td>
   <td><code>VK_PLAY_SPEED_RESET</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"PlaySpeedUp"</code></td>
   <td>Increases the media playback rate.</td>
   <td><code>VK_PLAY_SPEED_UP</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"RandomToggle"</code></td>
   <td>Toggles random media (also known as "shuffle mode") on and off.</td>
   <td><code>VK_RANDOM_TOGGLE</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_AudioRandomPlay</code> (0x1008FF99)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"RcLowBattery"</code></td>
   <td>A code sent when the remote control's battery is low. This doesn't actually correspond to a physical key at all.</td>
   <td><code>VK_RC_LOW_BATTERY</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"RecordSpeedNext"</code></td>
   <td>Cycles among the available media recording speeds.</td>
   <td><code>VK_RECORD_SPEED_NEXT</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"RfBypass"</code></td>
   <td>Toggles radio frequency (RF) input bypass mode on and off. RF bypass mode passes RF input directly to the RF output without any processing or filtering.</td>
   <td><code>VK_RF_BYPASS</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"ScanChannelsToggle"</code></td>
   <td>Toggles the channel scan mode on and off; this is a mode which flips through channels automatically until the user stops the scan.</td>
   <td><code>VK_SCAN_CHANNELS_TOGGLE</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"ScreenModeNext"</code></td>
   <td>Cycles through the available screen display modes.</td>
   <td><code>VK_SCREEN_MODE_NEXT</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"Settings"</code></td>
   <td>Toggles display of the device's settings screen on and off.</td>
   <td><code>VK_SETTINGS</code></td>
   <td>&nbsp;</td>
   <td><code>Qt::Key_Settings</code> (0x0100011C)</td>
   <td><code>KEYCODE_SETTINGS</code></td>
  </tr>
  <tr>
   <td><code>"SplitScreenToggle"</code></td>
   <td>Toggles split screen display mode on and off.</td>
   <td><code>VK_SPLIT_SCREEN_TOGGLE</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_SplitScreen (</code>0x1008FF7D)<br />
    <code>Qt::Key_SplitScreen</code> (0x010000ED)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"STBInput"</code> [3]</td>
   <td>Cycles among input modes on an external set-top box (STB).</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_STB_INPUT</code> (180)</td>
  </tr>
  <tr>
   <td><code>"groupnext"</code> [3]</td>
   <td>Toggles on and off an external STB.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_STB_POWER</code> (179)</td>
  </tr>
  <tr>
   <td><code>"Subtitle"</code></td>
   <td>Toggles the display of subtitles on and off if they're available.</td>
   <td><code>VK_SUBTITLE</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Subtitle</code> (0x1008FF9A)</td>
   <td><code>KEYCODE_CAPTIONS</code> (175)</td>
  </tr>
  <tr>
   <td><code>"Teletext"</code></td>
   <td>Toggles display of {{interwiki("wikipedia", "teletext")}}, if available.</td>
   <td><code>VK_TELETEXT</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_TV_TELETEXT</code> (233)</td>
  </tr>
  <tr>
   <td><code>"VideoModeNext"</code> [3]</td>
   <td>Cycles through the available video modes.</td>
   <td><code>VK_VIDEO_MODE_NEXT</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Next_VMode</code> (0x1008FE22)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"Wink"</code></td>
   <td>Causes the device to identify itself in some fashion, such as by flashing a light, briefly changing the brightness of indicator lights, or emitting a tone.</td>
   <td><code>VK_WINK</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"ZoomToggle"</code> [2]</td>
   <td>Toggles between full-screen and scaled content display, or otherwise change the magnification level.</td>
   <td><code>VK_ZOOM</code> (0xFB)</td>
   <td>&nbsp;</td>
   <td><code>Qt::Key_Zoom</code> (0x01020006)</td>
   <td><code>KEYCODE_TV_ZOOM_MODE</code> (255)</td>
  </tr>
 </thead>
</table>

<p>[1] Don't confuse the media controller <code>VK_APPS</code> key with the Windows <code>VK_APPS</code> key, which is also known as <code>VK_CONTEXT_MENU</code>. That key is encoded as <code>"ContextMenu"</code>.</p>

<p>[2] Internet Explorer 9 and Firefox 36 and earlier identify the zoom toggle button as <code>"Zoom"</code>. Firefox 37 corrects this to <code>"ZoomToggle"</code>.</p>

<p>[3] These keys were <code>"Unidentified"</code> until Firefox 37.</p>

<h3 id="Speech_recognition_keys">Speech recognition keys</h3>

<p>These special multimedia keys are used to control speech recognition features.</p>

<table class="standard-table">
 <thead>
  <tr>
   <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> Value</th>
   <th rowspan="2" scope="col" style="text-align: left;">Description</th>
   <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
  </tr>
  <tr>
   <th scope="col" style="text-align: left;">Windows</th>
   <th scope="col" style="text-align: left;">Mac</th>
   <th scope="col" style="text-align: left;">Linux</th>
   <th scope="col" style="text-align: left;">Android</th>
  </tr>
  <tr>
   <td><code>"SpeechCorrectionList"</code> [1]</td>
   <td>Presents a list of possible corrections for a word which was incorrectly identified.</td>
   <td><code>APPCOMMAND_CORRECTION_LIST</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"SpeechInputToggle"</code> [2]</td>
   <td>Toggles between dictation mode and command/control mode. This lets the speech engine know whether to interpret spoken words as input text or as commands.</td>
   <td><code>APPCOMMAND_DICTATE_OR_COMMAND_CONTROL_TOGGLE</code></td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
 </thead>
</table>

<p>[1] The <code>APPCOMMAND_CORRECTION_LIST</code> command on Windows generates <code>"Unidentified"</code> on Firefox.</p>

<p>[2] The <code>APPCOMMAND_DICTATE_OR_COMMAND_CONTROL_TOGGLE</code> command on Windows generates <code>"Unidentified"</code> on Firefox.</p>

<h3 id="Document_keys">Document keys</h3>

<p>These keys control documents. In the specification, they're included in other sets of keys, such as the media keys, but they make more sense when considered to be their own category.</p>

<table class="standard-table">
 <thead>
  <tr>
   <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> Value</th>
   <th rowspan="2" scope="col" style="text-align: left;">Description</th>
   <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
  </tr>
  <tr>
   <th scope="col" style="text-align: left;">Windows</th>
   <th scope="col" style="text-align: left;">Mac</th>
   <th scope="col" style="text-align: left;">Linux</th>
   <th scope="col" style="text-align: left;">Android</th>
  </tr>
  <tr>
   <td><code>"Close"</code> [1]</td>
   <td>Closes the current document or message. Must not exit the application.</td>
   <td><code>APPCOMMAND_CLOSE</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Close</code> (0x1008FF56)<br />
    <code>Qt::Key_Close</code> (0x010000CE)</td>
   <td><code>KEYCODE_MEDIA_CLOSE</code> (128)</td>
  </tr>
  <tr>
   <td><code>"New"</code> [1]</td>
   <td>Creates a new document or message.</td>
   <td><code>APPCOMMAND_NEW</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_New</code> (0x1008FF68)<br />
    <code>Qt::Key_New</code> (0x01000120)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"Open"</code> [1]</td>
   <td>Opens an existing document or message.</td>
   <td><code>APPCOMMAND_OPEN</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Open</code> (0x1008FF6B)<br />
    <code>Qt::Key_Open</code> (0x01000121)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"Print"</code></td>
   <td>Prints the current document or message.</td>
   <td><code>APPCOMMAND_PRINT</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Print</code> (0xFF61)<br />
    <code>Qt::Print</code> (0x01000009)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"Save"</code> [1]</td>
   <td>Saves the current document or message.</td>
   <td><code>APPCOMMAND_SAVE</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Save</code> (0x1008FF77)<br />
    <code>Qt::Key_Save</code> (0x010000EA)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"SpellCheck"</code> [1]</td>
   <td>Starts spell checking the current document.</td>
   <td><code>APPCOMMAND_SPELL_CHECK</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Spell</code> (0x1008FF7C)<br />
    <code>Qt::Key_Spell</code> (0x010000EC)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"MailForward"</code> [1]</td>
   <td>Opens the user interface to forward a message.</td>
   <td><code>APPCOMMAND_FORWARD_MAIL</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_MailForward</code> (0x1008FF90)<br />
    <code>Qt::Key_MailForward</code> (0x010000FB)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"MailReply"</code> [1]</td>
   <td>Opens the user interface to reply to a message.</td>
   <td><code>APPCOMMAND_REPLY_TO_MAIL</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Reply</code> (0x1008FF72)<br />
    <code>Qt::Key_Reply</code> (0x010000E5)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"MailSend"</code> [1]</td>
   <td>Sends the current message.</td>
   <td><code>APPCOMMAND_SEND_MAIL</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Send</code> (0x1008FF7B)<br />
    <code>Qt::Key_Send</code> (0x010000EB)</td>
   <td>&nbsp;</td>
  </tr>
 </thead>
</table>

<p>[1] Prior to Firefox 37, this key generated the key value <code>"Unidentified"</code>.</p>

<h3 id="Application_selector_keys">Application selector keys</h3>

<p>Some keyboards offer special keys for launching or switching to certain common applications. Key values for those are listed here.</p>

<table class="standard-table">
 <thead>
  <tr>
   <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> Value</th>
   <th rowspan="2" scope="col" style="text-align: left;">Description</th>
   <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
  </tr>
  <tr>
   <th scope="col" style="text-align: left;">Windows</th>
   <th scope="col" style="text-align: left;">Mac</th>
   <th scope="col" style="text-align: left;">Linux</th>
   <th scope="col" style="text-align: left;">Android</th>
  </tr>
  <tr>
   <td><code>"LaunchCalculator"</code> [5]</td>
   <td>The <kbd>Calculator</kbd> key, often labeled with an icon such as <kbd>{{FontAwesomeIcon("icon-calculator")}}</kbd>. This is often used as a generic application launcher key (<code>APPCOMMAND_LAUNCH_APP2</code>).</td>
   <td><code>APPCOMMAND_LAUNCH_APP2</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Calculator</code> (0x1008FF1D)<br />
    <code>Qt::Key_Calculator</code> (0x010000CB)</td>
   <td><code>KEYCODE_CALCULATOR</code> (210)</td>
  </tr>
  <tr>
   <td><code>"LaunchCalendar"</code> [5]</td>
   <td>The <kbd>Calendar</kbd> key, often labeled with an icon like <kbd>{{FontAwesomeIcon("icon-calendar")}}</kbd>.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Calendar</code> (0x1008FF20)<br />
    <code>Qt::Key_Calendar</code> (0x010000E4)</td>
   <td><code>KEYCODE_CALENDAR</code> (208)</td>
  </tr>
  <tr>
   <td><code>"LaunchContacts"</code></td>
   <td>The <kbd>Contacts</kbd> key.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>KEYCODE_CONTACTS</code> (207)</td>
  </tr>
  <tr>
   <td><code>"LaunchMail"</code></td>
   <td>The <kbd>Mail</kbd> key. This is often displayed as <kbd>{{FontAwesomeIcon("icon-envelope-o")}}</kbd>.</td>
   <td><code>VK_LAUNCH_MAIL</code> (0xB4)<br />
    <code>APPCOMMAND_LAUNCH_MAIL</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Mail</code> (0x1008FF19)<br />
    <code>Qt::Key_LaunchMail</code> (0x010000A0)</td>
   <td><code>KEYCODE_ENVELOPE</code> (65)</td>
  </tr>
  <tr>
   <td><code>"LaunchMediaPlayer"</code> [1]</td>
   <td>The <kbd>Media Player</kbd> key.</td>
   <td><code>VK_LAUNCH_MEDIA_SELECT</code> (0xB5)<br />
    <code>APPCOMMAND_LAUNCH_MEDIA_SELECT</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_CD</code> (0x1008FF53)<br />
    <code>GDK_KEY_Video</code> (0x1008FF87)<br />
    <code>GDK_KEY_AudioMedia</code> (0x1008FF32)<br />
    <code>Qt::Key_LaunchMedia</code> (0x010000A1)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"LaunchMusicPlayer"</code> [5]</td>
   <td>The <kbd>Music Player</kbd> key, often labeled with an icon such as <kbd>{{FontAwesomeIcon("icon-music")}}</kbd>.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Music</code> (0x1008FF92)<br />
    <code>Qt::Key_Music</code> (0x010000FD)</td>
   <td><code>KEYCODE_MUSIC</code> (209)</td>
  </tr>
  <tr>
   <td><code>"LaunchMyComputer"</code> [5]</td>
   <td>The <kbd>My Computer</kbd> key on Windows keyboards. This is often used as a generic application launcher key (<code>APPCOMMAND_LAUNCH_APP1</code>).</td>
   <td><code>APPCOMMAND_LAUNCH_APP1</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_MyComputer</code> (0x1008FF33)<br />
    <code>GDK_KEY_Explorer</code> (0x1008FF5D)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"LaunchPhone"</code></td>
   <td>The <kbd>Phone</kbd> key, to open the phone dialer application if one is present.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Phone</code> (0x1008FF6E)<br />
    <code>Qt::Key_Phone</code> (0x010000E3)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"LaunchScreenSaver"</code> [5]</td>
   <td>The <kbd>Screen Saver</kbd> key.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_ScreenSaver</code> (0x1008FF2D)<br />
    <code>Qt::Key_ScreenSaver</code> (0x010000BA)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"LaunchSpreadsheet"</code> [4]</td>
   <td>The <kbd>Spreadsheet</kbd> key. This key may be labeled with an icon such as <kbd>{{FontAwesomeIcon("icon-table")}}</kbd> or that of a specific spreadsheet application.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Excel</code> (0x1008FF5C)<br />
    <code>Qt::Key_Excel</code> (0x010000D4)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"LaunchWebBrowser"</code> [4]</td>
   <td>The <kbd>Web Browser</kbd> key. This key is frequently labeled with an icon such as <kbd>{{FontAwesomeIcon("icon-globe")}}</kbd> or the icon of a specific browser, depending on the device manufacturer.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_WWW</code> (0x1008FF2E)<br />
    <code>Qt::Key_WWW</code> (0x010000BB)</td>
   <td><code>KEYCODE_EXPLORER</code> (64)</td>
  </tr>
  <tr>
   <td><code>"LaunchWebCam"</code> [5]</td>
   <td>The <kbd>WebCam</kbd> key. Opens the webcam application.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_WebCam</code> (0x1008FF8F)<br />
    <code>Qt::Key_WebCam</code> (0x010000FA)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"LaunchWordProcessor"</code> [5]</td>
   <td>The <kbd>Word Processor</kbd> key. This may be an icon of a specific word processor application, or a generic document icon.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Word</code> (0x1008FF89)<br />
    <code>Qt::Key_Word</code> (0x010000F4)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"LaunchApplication1"</code> [2]</td>
   <td>The first generic application launcher button.</td>
   <td><code>VK_LAUNCH_APP1</code> (0xB6)<br />
    <code>APPCOMMAND_LAUNCH_APP1</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Launch0</code> (0x1008FF40)<br />
    <code>Qt::Key_Launch0</code> (0x010000A2)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"LaunchApplication2"</code> [3]</td>
   <td>The second generic application launcher button.</td>
   <td><code>VK_LAUNCH_APP2</code> (0xB7)<br />
    <code>APPCOMMAND_LAUNCH_APP2</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Launch1</code> (0x1008FF41)<br />
    <code>Qt::Key_Launch1</code> (0x010000A3)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"LaunchApplication3"</code></td>
   <td>The third generic application launcher button.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Launch2</code> (0x1008FF42)<br />
    <code>Qt::Key_Launch2</code> (0x010000A4)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"LaunchApplication4"</code></td>
   <td>The fourth generic application launcher button.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Launch3</code> (0x1008FF43)<br />
    <code>Qt::Key_Launch3</code> (0x010000A5)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"LaunchApplication5"</code></td>
   <td>The fifth generic application launcher button.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Launch4</code> (0x1008FF44)<br />
    <code>Qt::Key_Launch4</code> (0x010000A6)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"LaunchApplication6"</code></td>
   <td>The sixth generic application launcher button.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Launch5</code> (0x1008FF45)<br />
    <code>Qt::Key_Launch5</code> (0x010000A7)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"LaunchApplication7"</code></td>
   <td>The seventh generic application launcher button.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Launch6</code> (0x1008FF46)<br />
    <code>Qt::Key_Launch6</code> (0x010000A8)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"LaunchApplication8"</code></td>
   <td>The eighth generic application launcher button.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Launch7</code> (0x1008FF47)<br />
    <code>Qt::Key_Launch7</code> (0x010000A9)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"LaunchApplication9"</code></td>
   <td>The ninth generic application launcher button.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Launch8</code> (0x1008FF48)<br />
    <code>Qt::Key_Launch8</code> (0x010000AA)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"LaunchApplication10"</code></td>
   <td>The 10th generic application launcher button.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Launch9</code> (0x1008FF49)<br />
    <code>Qt::Key_Launch9</code> (0x010000AB)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"LaunchApplication11"</code></td>
   <td>The 11th generic application launcher button.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_LaunchA</code> (0x1008FF4A)<br />
    <code>Qt::Key_LaunchA</code> (0x010000AC)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"LaunchApplication12"</code></td>
   <td>The 12th generic application launcher button.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_LaunchB</code> (0x1008FF4B)<br />
    <code>Qt::Key_LaunchB</code> (0x010000AD)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"LaunchApplication13"</code></td>
   <td>The 13th generic application launcher button.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_LaunchC</code> (0x1008FF4C)<br />
    <code>Qt::Key_LaunchC</code> (0x010000AE)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"LaunchApplication14"</code></td>
   <td>The 14th generic application launcher button.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_LaunchD</code> (0x1008FF4D)<br />
    <code>Qt::Key_LaunchD</code> (0x010000AF)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"LaunchApplication15"</code></td>
   <td>The 15th generic application launcher button.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_LaunchE</code> (0x1008FF4E)<br />
    <code>Qt::Key_LaunchE</code> (0x010000B0)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"LaunchApplication16"</code></td>
   <td>The 16th generic application launcher button.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_LaunchF</code> (0x1008FF4F)<br />
    <code>Qt::Key_LaunchF</code> (0x010000B1)</td>
   <td>&nbsp;</td>
  </tr>
 </thead>
</table>

<p>[1] Internet Explorer 9 and Firefox 36 and earlier use <code>"SelectMedia"</code> instead of <code>"LaunchMediaPlayer"</code>. Firefox 37 through Firefox 48 use <code>"MediaSelect"</code>. Firefox 49 has been updated to match the latest specification, and to return <code>"LaunchMediaPlayer"</code>.</p>

<p>[2] Google Chrome returns <code>"LaunchCalculator"</code> instead of <code>"LaunchApplication1"</code>. See {{ChromeBug(612743)}} for more information.</p>

<p>[3] Google Chrome returns <code>"LaunchMyComputer"</code> instead of <code>"LaunchApplication2"</code>. See {{ChromeBug(612743)}} for more information.</p>

<p>[4] Prior to Firefox 37, Firefox returned the key code <code>"LaunchApplication1"</code> instead of "<code>LaunchWebBrowser"</code> for the Web browser key.</p>

<p>[5] Firefox introduced support for this key in Firefox 37; prior to that, this key was reported as <code>"Unidentified"</code>.</p>

<h3 id="Browser_control_keys">Browser control keys</h3>

<p>Some keyboards include special keys for controlling Web browsers. Those keys follow.</p>

<table class="standard-table">
 <thead>
  <tr>
   <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> Value</th>
   <th rowspan="2" scope="col" style="text-align: left;">Description</th>
   <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
  </tr>
  <tr>
   <th scope="col" style="text-align: left;">Windows</th>
   <th scope="col" style="text-align: left;">Mac</th>
   <th scope="col" style="text-align: left;">Linux</th>
   <th scope="col" style="text-align: left;">Android</th>
  </tr>
  <tr>
   <td><code>"BrowserBack"</code></td>
   <td>Navigates to the previous content or page in the current Web view's history.</td>
   <td><code>VK_BROWSER_BACK</code> (0xA6)<br />
    <code>APPCOMMAND_BROWSER_BACKWARD</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Back</code> (0x1008FF26)<br />
    <code>Qt::Key_Back</code> (0x01000061)</td>
   <td><code>KEYCODE_BACK</code> (4)</td>
  </tr>
  <tr>
   <td><code>"BrowserFavorites"</code> [1]</td>
   <td>Opens the user's list of bookmarks/favorites.</td>
   <td><code>VK_BROWSER_FAVORITES</code> (0xAB)<br />
    <code>APPCOMMAND_BROWSER_FAVORITES</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Favorites</code> (0x1008FF30)<br />
    <code>GDK_KEY_MySites</code> (0x1008FF67)<br />
    <code>Qt::Favorites</code> (0x01000091)</td>
   <td><code>KEYCODE_BOOKMARK</code> (174)</td>
  </tr>
  <tr>
   <td><code>"BrowserForward"</code></td>
   <td>Navigates to the next content or page in the current Web view's history.</td>
   <td><code>VK_BROWSER_FORWARD</code> (0xA7)<br />
    <code>APPCOMMAND_BROWSER_FORWARD</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Forward</code> (0x1008FF27)<br />
    <code>Qt::Key_Forward</code> (0x01000062)</td>
   <td><code>KEYCODE_FORWARD</code> (125)</td>
  </tr>
  <tr>
   <td><code>"BrowserHome"</code></td>
   <td>Navigates to the user's preferred home page.</td>
   <td><code>VK_BROWSER_HOME</code> (0xAC)<br />
    <code>APPCOMMAND_BROWSER_HOME</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_HomePage</code> (0x1008FF18)<br />
    <code>Qt::Key_HomePage</code> (0x01000090)</td>
   <td><code>KEYCODE_HOME</code> (3)</td>
  </tr>
  <tr>
   <td><code>"BrowserRefresh"</code></td>
   <td>Refreshes the current page or contentl.</td>
   <td><code>VK_BROWSER_REFRESH</code> (0xA8)<br />
    <code>APPCOMMAND_BROWSER_REFRESH</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Refresh</code> (0x1008FF29)<br />
    <code>GDK_KEY_Reload</code> (0x1008FF73)</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"BrowserSearch"</code></td>
   <td>Activates the user's preferred search engine or the search interface within their browser.</td>
   <td><code>VK_BROWSER_SEARCH</code> (0xAA)<br />
    <code>APPCOMMAND_BROWSER_SEARCH</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Search</code> (0x1008FF1B)<br />
    <code>Qt::Key_Search</code> (0x01000092)</td>
   <td><code>KEYCODE_SEARCH</code> (84)</td>
  </tr>
  <tr>
   <td><code>"BrowserStop"</code></td>
   <td>Stops loading the currently displayed Web view or content.</td>
   <td><code>VK_BROWSER_STOP</code> (0xA9)<br />
    <code>APPCOMMAND_BROWSER_STOP</code></td>
   <td>&nbsp;</td>
   <td><code>GDK_KEY_Stop</code> (0x1008FF28)<br />
    <code>Qt::Key_Search</code> (0x01000063)</td>
   <td>&nbsp;</td>
  </tr>
 </thead>
</table>

<p>[1] Prior to Firefox 37, this key's value was reported as <code>"Unidentified"</code>.</p>

<h3 id="Numeric_keypad_keys">Numeric keypad keys</h3>

<p>These keys are found on the keyboard's numeric keypad. However, not all are present on every keyboard. Although typical numeric keypads have numeric keys from <kbd>0</kbd> to <kbd>9</kbd> (encoded as <code>"0"</code> through <code>"9"</code>), some multimedia keyboards include additional number keys for higher numbers.</p>

<div class="note">
<p>The <kbd>10</kbd> key, if present, generates events with the <code>key</code> value of <code>"0"</code>.</p>
</div>

<table class="standard-table">
 <thead>
  <tr>
   <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> Value</th>
   <th rowspan="2" scope="col" style="text-align: left;">Description</th>
   <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
  </tr>
  <tr>
   <th scope="col" style="text-align: left;">Windows</th>
   <th scope="col" style="text-align: left;">Mac</th>
   <th scope="col" style="text-align: left;">Linux</th>
   <th scope="col" style="text-align: left;">Android</th>
  </tr>
  <tr>
   <td><code>"Decimal"</code> [1] {{obsolete_inline}}</td>
   <td>The decimal point key (typically <kbd>.</kbd> or <kbd>,</kbd> depending on the region. In newer browsers, this value to simply be the character generated by the decimal key (one of those two characters). [1]</td>
   <td><code>VK_DECIMAL</code> (0x6E)</td>
   <td><code>kVK_ANSI_KeypadDecimal</code> (0x41)</td>
   <td><code>GDK_KEY_KP_Decimal</code> (0xFFAE)<br />
    &nbsp;</td>
   <td><code>KEYCODE_NUMPAD_DOT</code> (158)</td>
  </tr>
  <tr>
   <td><code>"Key11"</code></td>
   <td>The <kbd>11</kbd> key found on certain media numeric keypads.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"Key12"</code></td>
   <td>The <kbd>12</kbd> key found on certain media numeric keypads.</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td><code>"Multiply"</code> [1] {{obsolete_inline}}</td>
   <td>The numeric keypad's multiplication key, <kbd>*</kbd>.</td>
   <td><code>VK_MULTIPLY</code> (0x6A)</td>
   <td><code>kVK_ANSI_KeypadMultiply</code> (0x43)</td>
   <td><code>GDK_KEY_KP_Multiply</code> (0xFFAA)<br />
    <code>Qt::Key_Multiply</code> (0x0D7)</td>
   <td><code>KEYCODE_NUMPAD_MULTIPLY</code> (155)</td>
  </tr>
  <tr>
   <td><code>"Add"</code> [1] {{obsolete_inline}}</td>
   <td>The numeric keypad's addition key, <kbd>+</kbd>.</td>
   <td><code>VK_ADD</code> (0x6B)</td>
   <td><code>kVK_ANSI_KeypadPlus</code> (0x45)</td>
   <td><code>GDK_KEY_KP_Add</code> (0xFFAB)</td>
   <td><code>KEYCODE_NUMPAD_ADD</code> (157)</td>
  </tr>
  <tr>
   <td><code>"Clear"</code></td>
   <td>The numeric keypad's <kbd>Clear</kbd> key.</td>
   <td>&nbsp;</td>
   <td><code>kVK_ANSI_KeypadClear</code> (0x47)</td>
   <td><code>GDK_KEY_Clear</code> (0xFF0B)<br />
    <code>Qt::Key_Clear</code> (0x0100000B)</td>
   <td><code>KEYCODE_CLEAR</code> (28)</td>
  </tr>
  <tr>
   <td><code>"Divide"</code> [1] {{obsolete_inline}}</td>
   <td>The numeric keypad's division key, /.</td>
   <td><code>VK_DIVIDE</code> (0x6F)</td>
   <td><code>kVK_ANSI_KeypadDivide</code> (0x4B)</td>
   <td><code>GDK_KEY_KP_Divide</code> (0xFFAF)<br />
    <code>Qt::Key_Slash</code> (0x2F)</td>
   <td><code>KEYCODE_NUMPAD_DIVIDE</code> (154)</td>
  </tr>
  <tr>
   <td><code>"Subtract"</code> [1] {{obsolete_inline}}</td>
   <td>The numeric keypad's subtraction key, -.</td>
   <td><code>VK_SUBTRACT</code> (0x6D)</td>
   <td><code>kVK_ANSI_KeypadMinus</code> (0x4E)</td>
   <td><code>GDK_KEY_KP_Subtract</code> (0xFFAD)</td>
   <td><code>KEYCODE_NUMPAD_SUBTRACT</code> (156)</td>
  </tr>
  <tr>
   <td><code>"Separator"</code> [1]</td>
   <td>The numeric keypad's places separator character (in the United States, this is a comma, but elsewhere it is frequently a period).</td>
   <td><code>VK_SEPARATOR</code> (0x6C)</td>
   <td><code>kVK_JIS_KeypadComma</code> (0x5F)</td>
   <td><code>GDK_KEY_KP_Separator</code> (0xFFAC)<br />
    &nbsp;</td>
   <td><code>KEYCODE_NUMPAD_COMMA</code> (159)</td>
  </tr>
  <tr>
   <td>"0" through "9"</td>
   <td>The actual digit keys on the numeric keypad.</td>
   <td><code>VK_NUMPAD0</code> (0x60) - <code>VK_NUMPAD9</code> (0x69)</td>
   <td><code>kVK_Keypad0</code> (0x52) - <code>kVK_Keypad9</code> (0x5C)</td>
   <td><code>GDK_KEY_KP_0</code> (0xFFB0) - <code>GDK_KEY_KP_9</code> (0xFFB9)</td>
   <td><code>KEYCODE_NUMPAD_0</code> (144) - <code>KEYCODE_NUMPAD_9</code> (153)</td>
  </tr>
 </thead>
</table>

<p>[1] While older browsers used words like <code>"Add"</code>, <code>"Decimal"</code>, <code>"Multiply"</code>, and so forth modern browsers identify these using the actual character (<code>"+"</code>, <code>"."</code>, <code>"*"</code>, and so forth).</p>
Revert to this revision