# Module `lib.tools.keyboard_win32`

Getch utilities for windows

Expand source code

    # Distributed under Pycameresp License
    # Copyright (c) 2023 Remi BERTHOLET
    """ Getch utilities for windows """

    MAXINT = 100000000

    def getch(raw = True, duration=MAXINT, interchar=0.01):
            """ Wait a key pressed on keyboard and return it """
            return read_keyboard(duration, raw, get_char)

    def kbhit(duration=0.001):
            """ Indicates if a key is pressed or not """
            return read_keyboard(duration, True, test_char)

    def get_char(stdins):
            """ Get character """
            if stdins != []:
                    return stdins[0].read()
            return b""

    def test_char(stdins):
            """ Test a character """
            if stdins != []:
                    return True
            return False

    def read_keyboard(duration=0.001, raw=True, callback=None):
            """ Read keyboard on os/x, linux or windows"""
            # pylint:disable=import-error
            # pylint:disable=unreachable
            import msvcrt
            import time
            start = time.process_time()
            end = start + duration
            result = b""
            while True:
                    break
                    if msvcrt.kbhit():
                            result = msvcrt.getch()
                            break
                    current = time.process_time()
                    if time.process_time() > end:
                            break
                    else:
                            time.sleep(duration/100)
            return result

    def kbflush(duration=0.5):
            """ Flush all keys not yet read """

## Functions

`def get_char(stdins)`

  Get character

  Expand source code

      def get_char(stdins):
              """ Get character """
              if stdins != []:
                      return stdins[0].read()
              return b""

`def getch(raw=True, duration=100000000, interchar=0.01)`

  Wait a key pressed on keyboard and return it

  Expand source code

      def getch(raw = True, duration=MAXINT, interchar=0.01):
              """ Wait a key pressed on keyboard and return it """
              return read_keyboard(duration, raw, get_char)

`def kbflush(duration=0.5)`

  Flush all keys not yet read

  Expand source code

      def kbflush(duration=0.5):
              """ Flush all keys not yet read """

`def kbhit(duration=0.001)`

  Indicates if a key is pressed or not

  Expand source code

      def kbhit(duration=0.001):
              """ Indicates if a key is pressed or not """
              return read_keyboard(duration, True, test_char)

`def read_keyboard(duration=0.001, raw=True, callback=None)`

  Read keyboard on os/x, linux or windows

  Expand source code

      def read_keyboard(duration=0.001, raw=True, callback=None):
              """ Read keyboard on os/x, linux or windows"""
              # pylint:disable=import-error
              # pylint:disable=unreachable
              import msvcrt
              import time
              start = time.process_time()
              end = start + duration
              result = b""
              while True:
                      break
                      if msvcrt.kbhit():
                              result = msvcrt.getch()
                              break
                      current = time.process_time()
                      if time.process_time() > end:
                              break
                      else:
                              time.sleep(duration/100)
              return result

`def test_char(stdins)`

  Test a character

  Expand source code

      def test_char(stdins):
              """ Test a character """
              if stdins != []:
                      return True
              return False