text: import win32console, win32con
  import traceback, time
  
  virtual_keys={}
  for k,v in list(win32con.__dict__.items()):
      if k.startswith('VK_'):
          virtual_keys[v]=k 
  
  free_console=True
  try:
      win32console.AllocConsole()
  except win32console.error as exc:
      if exc.winerror!=5:
          raise
      ## only free console if one was created successfully
      free_console=False
  
  stdout=win32console.GetStdHandle(win32console.STD_OUTPUT_HANDLE)
  stdin=win32console.GetStdHandle(win32console.STD_INPUT_HANDLE)
  newbuffer=win32console.CreateConsoleScreenBuffer()
  newbuffer.SetConsoleActiveScreenBuffer()
  newbuffer.SetConsoleTextAttribute(win32console.FOREGROUND_RED|win32console.FOREGROUND_INTENSITY
          |win32console.BACKGROUND_GREEN|win32console.BACKGROUND_INTENSITY)
  newbuffer.WriteConsole('This is a new screen buffer\n')
  
  ## test setting screen buffer and window size
  ## screen buffer size cannot be smaller than window size
  window_size=newbuffer.GetConsoleScreenBufferInfo()['Window']
  coord=win32console.PyCOORDType(X=window_size.Right+20, Y=window_size.Bottom+20)
  newbuffer.SetConsoleScreenBufferSize(coord)
  
  window_size.Right+=10
  window_size.Bottom+=10
  newbuffer.SetConsoleWindowInfo(Absolute=True,ConsoleWindow=window_size)
  
  ## write some records to the input queue 
  x=win32console.PyINPUT_RECORDType(win32console.KEY_EVENT)
  x.Char='X'
  x.KeyDown=True
  x.RepeatCount=1
  x.VirtualKeyCode=0x58
  x.ControlKeyState=win32con.SHIFT_PRESSED
  
  z=win32console.PyINPUT_RECORDType(win32console.KEY_EVENT)
  z.Char='Z'
  z.KeyDown=True
  z.RepeatCount=1
  z.VirtualKeyCode=0x5a
  z.ControlKeyState=win32con.SHIFT_PRESSED
  
  stdin.WriteConsoleInput([x,z,x])
  
  newbuffer.SetConsoleTextAttribute(win32console.FOREGROUND_RED|win32console.FOREGROUND_INTENSITY
          |win32console.BACKGROUND_GREEN|win32console.BACKGROUND_INTENSITY)
  newbuffer.WriteConsole('Press some keys, click some characters with the mouse\n')
  
  newbuffer.SetConsoleTextAttribute(win32console.FOREGROUND_BLUE|win32console.FOREGROUND_INTENSITY
          |win32console.BACKGROUND_RED|win32console.BACKGROUND_INTENSITY)
  newbuffer.WriteConsole('Hit "End" key to quit\n')
                      
  breakout=False
  while not breakout:
      input_records=stdin.ReadConsoleInput(10)
      for input_record in input_records:
          if input_record.EventType==win32console.KEY_EVENT:
              if input_record.KeyDown:
                  if input_record.Char=='\0':
                      newbuffer.WriteConsole(virtual_keys.get(input_record.VirtualKeyCode, 'VirtualKeyCode: %s' %input_record.VirtualKeyCode))
                  else:
                      newbuffer.WriteConsole(input_record.Char)
                  if input_record.VirtualKeyCode==win32con.VK_END:
                      breakout=True
                      break
          elif input_record.EventType==win32console.MOUSE_EVENT:
              if input_record.EventFlags==0:  ## 0 indicates a button event
                  if input_record.ButtonState!=0:   ## exclude button releases
                      pos=input_record.MousePosition
                      # switch the foreground and background colors of the character that was clicked
                      attr=newbuffer.ReadConsoleOutputAttribute(Length=1, ReadCoord=pos)[0]
                      new_attr=attr
                      if attr&win32console.FOREGROUND_BLUE:
                          new_attr=(new_attr&~win32console.FOREGROUND_BLUE)|win32console.BACKGROUND_BLUE
                      if attr&win32console.FOREGROUND_RED:
                          new_attr=(new_attr&~win32console.FOREGROUND_RED)|win32console.BACKGROUND_RED
                      if attr&win32console.FOREGROUND_GREEN:
                          new_attr=(new_attr&~win32console.FOREGROUND_GREEN)|win32console.BACKGROUND_GREEN
  
                      if attr&win32console.BACKGROUND_BLUE:
                          new_attr=(new_attr&~win32console.BACKGROUND_BLUE)|win32console.FOREGROUND_BLUE
                      if attr&win32console.BACKGROUND_RED:
                          new_attr=(new_attr&~win32console.BACKGROUND_RED)|win32console.FOREGROUND_RED
                      if attr&win32console.BACKGROUND_GREEN:
                          new_attr=(new_attr&~win32console.BACKGROUND_GREEN)|win32console.FOREGROUND_GREEN
                      newbuffer.WriteConsoleOutputAttribute((new_attr,),pos)
          else:
              newbuffer.WriteConsole(str(input_record))
      time.sleep(0.1)
  
  stdout.SetConsoleActiveScreenBuffer()
  newbuffer.Close()
  if free_console:
       win32console.FreeConsole()
  
  