What is a Scan Code?

12 February 2013 by DaBoss

https://www.cknow.com/cms/articles /what-is-a-scan-code.html

Scan codes refer to codes generated by the keyboard hardware.
Click here for the corresponding Virtual-Key Codes used in Windows programming ever since Windows 95 (in 1995).

In the keyboard are little switches. When you press a key one of the switches is activated and when you release that key the switch is activated again. The keyboard makes note of these happenings and stores them in a small buffer (memory area) in the keyboard while it notifies the computer that something has happened at the keyboard (an interrupt). The computer, once notified of keyboard activity reads the buffer and takes the necessary action.

Each key on the keyboard has its own code that it sends when pressed and when released; this is called its scan code. When listing scan codes here we’ll list the "press" scan code. The "release" scan code was originally that number plus 128 (80 hex).

While the original scan code specification (in 1981) allowed for a single byte, later keyboards (after 1985) with their movement keys repeated in the center of the keyboard forced a change, and those keys carried a two-byte scan code with the first number always being hex E0 (so programs reading scan codes first test for the E0 character; if not found process the code directly, if found, process the next code as one of the center movement keys).

At first blush the release code may seem redundant but when you think about how often you might press and hold the shift, control, or alt keys down while typing something else it becomes clear why it’s needed.

The FN key, first introduced with the IBM Thinkpad in 1992, does not have an individual scan code, and Windows does not report the modified scan code of any FN key combination, just the virtual-key code that it generates.

That said, below are the various scan codes originally defined by IBM (you can see from the layout these were defined for the very first keyboard in 1981)…


hex 01 = Escape key
hex 02 = 1 or ! key
hex 03 = 2 or @ key
hex 04 = 3 or # key
hex 05 = 4 or $ key
hex 06 = 5 or % key
hex 07 = 6 or ^ key
hex 08 = 7 or & key
hex 09 = 8 or * key
hex 0A = 9 or ( key
hex 0B = 0 or ) key
hex 0C = – or _ key
hex 0D = = or + key
hex 0E = Backspace key
hex 0F = Tab key
hex 10 = q or Q key
hex 11 = w or W key
hex 12 = e or E key
hex 13 = r or R key
hex 14 = t or T key
hex 15 = y or Y key
hex 16 = u or U key
hex 17 = i or I key
hex 18 = o or O key
hex 19 = p or P key
hex 1A = [ or { key
hex 1B = ] or } key
hex 1C = Enter key
hex 1D = Control key (Left if two)
hex 1E = a or A key
hex 1F = s or S key
hex 20 = d or D key
hex 21 = f or F key
hex 22 = g or G key
hex 23 = h or H key
hex 24 = j or J key
hex 25 = k or K key
hex 26 = l or L key
hex 27 = ; or : key
hex 28 = ‘ or " key
hex 29 = ` or ~ key
hex 2A = Left shift key
hex 2B = \ or | key
hex 2C = z or Z key
hex 2D = x or X key
hex 2E = c or C key
hex 2F = v or V key
hex 30 = b or B key
hex 31 = n or N key
hex 32 = m or M key
hex 33 = , or < key
hex 34 = . or > key
hex 35 = / or ? key
hex 36 = Right shift key
hex 37 = * or Prt Sc key
hex 38 = Alt key (Left)
hex 39 = Space bar
hex 3A = Caps Lock key
hex 3B = F1 key
hex 3C = F2 key
hex 3D = F3 key
hex 3E = F4 key
hex 3F = F5 key
hex 40 = F6 key
hex 41 = F7 key
hex 42 = F8 key
hex 43 = F9 key
hex 44 = F10 key
hex 45 = Num Lock key on numeric keypad
hex 46 = Scroll Lock key on numeric keypad
hex 47 = 7 or Home key on numeric keypad
hex 48 = 8 or Cursor Up key on numeric keypad
hex 49 = 9 or Pg Up key on numeric keypad
hex 4A = – key on numeric keypad
hex 4B = 4 or Cursor Left key on numeric keypad
hex 4C = 5 key on numeric keypad
hex 4D = 6 or Cursor Right key on numeric keypad
hex 4E = + key on numeric keypad
hex 4F = 1 or End key on numeric keypad
hex 50 = 2 or Cursor Down kay on numeric keypad
hex 51 = 3 or Pg Dn key on numeric keypad
hex 52 = 0 or Insert key on numeric keypad
hex 53 = . or Delete key on numeric keypad
hex 54 = Sys Rq (or Print Screen) key
hex 57 = F11
hex 58 = F12
hex E1 = Pause key (on 101-key keyboard)


The following scan codes are preceded by hex E0…

hex 1C = Enter key on numeric keypad
hex 1D = Control (Right if two)
hex 35 = / key on numeric keypad
hex 38 = Alt Gr (Right)
hex 47 = Home
hex 48 = Up arrow
hex 49 = Pg Up
hex 4B = Left arrow
hex 4D = Right arrow
hex 4F = End
hex 50 = Down arrow
hex 51 = Pg Dn
hex 52 = Insert
hex 53 = Delete
hex 5B = ⊞ Windows L
hex 5C = ⊞ Windows R
hex 5D = ≣ Menu

Go Top

** End of page