Also modified it to use ConsoleKey for both displayable and non-displayable scancodes in addition to using char.
Non-displayable scancodes have char '\0'. Non-ConsoleKey-able scancodes have 'ConsoleKey.NoName'.
Added KeyboardTest in my playground which displays scancode, char, and ConsoleKey of keys pressed on the keyboard.