Check all the keys of a keyboard Write the shortest program that waits for every key of a Standard 101 key US Keyboard* to be pressed and then exits writing OK!

Every time a key is pressed the program displays on a new line the remaining number of unpressed unique keys that need to be pressed until all key are pressed at least once. The program should be able to test a 101 keyboard and see if every key works. So pressing twice a key or enter is to be allowed as long as this is specified to the user. 

Pressing same key twice or more should not disrupt the code nor change the displayed number of remaining unpressed keys.

All keys (Left Shift, Right Shift, Right Control, Esc, Enter, etc.) should be included.

The actual keyboard keys are important in this challenge so from the perspective of the program (A and a, are the same and so are 6 and ^).

Combined keys will not be registered as a combined command and only the individual keys will be registered if Ctrl + Alt + Del is pressed that will count for all the individual keys in the combination being pressed. So no need to press also the capital letters if you pressed already the lowercase and vice-versa. 

Numeric keys on the numeric keypad are different from the perspective of the program, so they are still needed to be pressed for the program to finish, if you have a laptop or any other keyboard that doesn't have the US Standard 101 keyboard layout you cannot fulfill the challenge unless you plugin a compatible keyboard.

*Keyboards having Fn key and laptop key will not be supported to keep this challenge doable

This is the list of keys for a US Standard 101 keyboard layout:

backspace
tab
enter
right shift
right ctrl
right alt
left shift
left ctrl
left alt
print screen
pause/break
caps lock
escape
page up
page down
end
home
left arrow
up arrow
right arrow
down arrow
insert
delete
0
1
2
3
4
5
6
7
8
9
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
numpad 0
numpad 1
numpad 2
numpad 3
numpad 4
numpad 5
numpad 6
numpad 7
numpad 8
numpad 9
multiply
add
subtract
decimal point
numpad enter
divide
f1
f2
f3
f4
f5
f6
f7
f8
f9
f10
f11
f12
num lock
scroll lock
semi-colon
equal sign
comma
dash
period
forward slash
grave accent
open bracket
back slash
close braket
single quote
space
Javascript, 524 bytes
Hi, this is my first ever post here, so excuse me if I'm still ignorant on some stuff, I think I stayed within the rules though.
k=[8,9,&quot;130&quot;,&quot;133&quot;,&quot;161&quot;,&quot;162&quot;,&quot;171&quot;,&quot;172&quot;,&quot;181&quot;,&quot;182&quot;,19,20,27,44,45,46,48,49,50,51,52,53,54,55,56,57,144,145,186,187,188,189,190,191,192,219,220,221,222];for(i=32;i&lt;124;i+=1){i&lt;41?k.push(i):i&gt;64?i&lt;91?k.push(i):i&gt;95?i!=108?k.push(i):0:0:0}d=[13,16,17,18];m=document.addEventListener;c=console.log;m(&quot;keydown&quot;,e=&gt;{e.preventDefault()});m(&quot;keyup&quot;,e=&gt;{c(e.code);if(d.includes(e.which)){l=e.which+&quot;&quot;+e.location;if(k.includes(l)){k.splice(k.indexOf(l),1)}}else if(k.includes(e.which)){k.splice(k.indexOf(e.which),1)}c(k.length)})

It seems buggy if I don't use Chrome, but you can try it out here.
(be sure to open the console before you focus on the example window, as the default functionality of F12 is prevented)
Overview
The program makes an array of all the 101 &quot;keycodes&quot;. Some are written explicitly, some sequences are added with a for loop and some are stored as strings. I have a seperate array for the &quot;double&quot; keycodes, since left and right control for instance give the same keycode. They also give a location, however, so I combine the keycodes with the locations as strings in the array. From there it's just an eventlistener that prevents default keydown functionality (don't wanna refresh with F5 in this case) and a seperate eventlistener for keyup, because every single key can be detected on keydown, EXCEPT FOR PRINTSCREEN.
After every keyup event the remaining keys (aka the length of the array) gets logged, as well as the name of the keycode (so there is the distinction between left and right shift, etc). I wasn't sure if that was a requirement, if not you can subtract another 10 bytes from the score.
Limitations

It only seems to work well in Chrome

I hope this answer is appreciated and please let me know if I've done anything wrong.