code: def get_console_info(kernel32, handle):
      
      # Query Win32 API.
      csbi = ConsoleScreenBufferInfo()  # Populated by GetConsoleScreenBufferInfo.
      lpcsbi = ctypes.byref(csbi)
      dword = ctypes.c_ulong()  # Populated by GetConsoleMode.
      lpdword = ctypes.byref(dword)
      if not kernel32.GetConsoleScreenBufferInfo(handle, lpcsbi) or not kernel32.GetConsoleMode(handle, lpdword):
          raise ctypes.WinError()
  
      # Parse data.
      # buffer_width = int(csbi.dwSize.X - 1)
      # buffer_height = int(csbi.dwSize.Y)
      # terminal_width = int(csbi.srWindow.Right - csbi.srWindow.Left)
      # terminal_height = int(csbi.srWindow.Bottom - csbi.srWindow.Top)
      fg_color = csbi.wAttributes % 16
      bg_color = csbi.wAttributes & 240
      native_ansi = bool(dword.value & ENABLE_VIRTUAL_TERMINAL_PROCESSING)
  
      return fg_color, bg_color, native_ansi
docs: Get information about this current console window.
  
      http://msdn.microsoft.com/en-us/library/windows/desktop/ms683231
      https://code.google.com/p/colorama/issues/detail?id=47
      https://bitbucket.org/pytest-dev/py/src/4617fe46/py/_io/terminalwriter.py
  
      Windows 10 Insider since around February 2016 finally introduced support for ANSI colors. No need to replace stdout
      and stderr streams to intercept colors and issue multiple SetConsoleTextAttribute() calls for these consoles.
  
      :raise OSError: When GetConsoleScreenBufferInfo or GetConsoleMode API calls fail.
  
      :param ctypes.windll.kernel32 kernel32: Loaded kernel32 instance.
      :param int handle: stderr or stdout handle.
  
      :return: Foreground and background colors (integers) as well as native ANSI support (bool).
      :rtype: tuple