require 'curses'
def get_char_now();
   Curses.init_screen
   char = Curses.getch
   Curses.close_screen
   return char
end

---
warning - code is approximate, you have to lookup Curses docs.
Depending on your application, it might make sense just to use curses
for everything, then there is no need to start/stop it every time.

Curses work on windows in cygwin, I haven't tried the native installer.