Ejemplo n.º 1
0
 def _inject_mouse(screen, x, y, button):
     """
     Inject a mouse event into the input buffers.
     """
     if sys.platform == "win32":
         event = win32console.PyINPUT_RECORDType(win32console.MOUSE_EVENT)
         event.MousePosition.X = x
         event.MousePosition.Y = y
         if button & MouseEvent.LEFT_CLICK != 0:
             event.ButtonState |= win32con.FROM_LEFT_1ST_BUTTON_PRESSED
         if button & MouseEvent.RIGHT_CLICK != 0:
             event.ButtonState |= win32con.RIGHTMOST_BUTTON_PRESSED
         if button & MouseEvent.DOUBLE_CLICK != 0:
             event.EventFlags |= win32con.DOUBLE_CLICK
         screen._stdin.WriteConsoleInput([event])
     else:
         # Curses doesn't like no value in some cases - use a dummy button
         # click which we don't use instead.
         bstate = curses.BUTTON4_CLICKED
         if button & MouseEvent.LEFT_CLICK != 0:
             bstate |= curses.BUTTON1_CLICKED
         if button & MouseEvent.RIGHT_CLICK != 0:
             bstate |= curses.BUTTON3_CLICKED
         if button & MouseEvent.DOUBLE_CLICK != 0:
             bstate |= curses.BUTTON1_DOUBLE_CLICKED
         curses.ungetmouse(0, x, y, 0, bstate)
Ejemplo n.º 2
0
        def internal_checks(screen):
            # Not much we can do here as refresh will draw to a screen we can't
            # query. Check that we don't hit an Exception on refresh().
            if sys.platform == "win32":
                # Strictly speaking, this doesn't test catching ctrl-c as
                # it isn't possible to trigger the control handler (even if
                # we don't catch interrupts).  Still a good basic check for
                # input, though.
                event = win32console.PyINPUT_RECORDType(win32console.KEY_EVENT)
                event.Char = u"\03"
                event.KeyDown = 1
                event.RepeatCount = 1
                event.ControlKeyState = win32con.LEFT_CTRL_PRESSED
                event.VirtualKeyCode = 67
                event.VirtualScanCode = 46
                screen._stdin.WriteConsoleInput([event])
                event.KeyDown = 0
                screen._stdin.WriteConsoleInput([event])
                ch = screen.get_event()
                self.assertEqual(ch.key_code, 3)
                self.assertIsNone(screen.get_event())
            else:
                # Check Ctrl-c (and no other input)
                os.kill(os.getpid(), signal.SIGINT)
                ch = screen.get_event()
                self.assertEqual(ch.key_code, 3)
                self.assertIsNone(screen.get_event())

                # Check Ctrl-z (and no other input)
                os.kill(os.getpid(), signal.SIGTSTP)
                ch = screen.get_event()
                self.assertEqual(ch.key_code, 26)
                self.assertIsNone(screen.get_event())
Ejemplo n.º 3
0
 def _inject_key(screen, char):
     """
     Inject a specified character into the input buffers.
     """
     if sys.platform == "win32":
         event = win32console.PyINPUT_RECORDType(win32console.KEY_EVENT)
         event.RepeatCount = 1
         event.ControlKeyState = 0
         event.VirtualScanCode = 0
         if char >= 0:
             event.Char = chr(char)
             event.VirtualKeyCode = ord(chr(char).upper())
         else:
             # Lookup in mapping dicts
             reverse = dict(
                 (v, k) for k, v in screen._EXTRA_KEY_MAP.items())
             if char in reverse:
                 event.VirtualKeyCode = reverse[char]
             else:
                 # Fudge key state required for BACK_TAB if needed.
                 if char == Screen.KEY_BACK_TAB:
                     char = Screen.KEY_TAB
                     event.ControlKeyState = win32con.SHIFT_PRESSED
                 reverse = dict((v, k) for k, v in screen._KEY_MAP.items())
                 event.VirtualKeyCode = reverse[char]
         event.KeyDown = 1
         screen._stdin.WriteConsoleInput([event])
         event.KeyDown = 0
         screen._stdin.WriteConsoleInput([event])
     else:
         curses.ungetch(char)
Ejemplo n.º 4
0
 def generate_windows_keypress(character):
     """ Generate an 'Enter' keypress to terminate Windows training """
     buf = win32console.PyINPUT_RECORDType(  # pylint:disable=c-extension-no-member
         win32console.KEY_EVENT)  # pylint:disable=c-extension-no-member
     buf.KeyDown = 1
     buf.RepeatCount = 1
     buf.Char = character
     return buf
Ejemplo n.º 5
0
    def createKeyEvent(self, char):
        """Creates a single key record corrosponding to
            the ascii character char."""

        evt = win32console.PyINPUT_RECORDType(win32console.KEY_EVENT)
        evt.KeyDown = True
        evt.Char = char
        evt.RepeatCount = 1
        return evt
Ejemplo n.º 6
0
def sendkeys(string=""):
    keys = []
    for c in str(string):
        evt = win32console.PyINPUT_RECORDType(win32console.KEY_EVENT)
        evt.Char = c
        evt.RepeatCount = 1
        evt.KeyDown = True
        keys.append(evt)

    _stdin.WriteConsoleInput(keys)
Ejemplo n.º 7
0
 def rlinput(prompt, prefill=''):
     keys = []
     for c in prefill:
         evt = win32console.PyINPUT_RECORDType(win32console.KEY_EVENT)
         evt.Char = c
         evt.RepeatCount = 1
         evt.KeyDown = True
         keys.append(evt)
     _stdin.WriteConsoleInput(keys)
     return input(prompt)
Ejemplo n.º 8
0
def input_def(prompt, default='Hola'):
    keys = []
    for c in unicode(default):
        evt = win32console.PyINPUT_RECORDType(win32console.KEY_EVENT)
        evt.Char = c
        evt.RepeatCount = 1
        evt.KeyDown = True
        keys.append(evt)

    _stdin.WriteConsoleInput(keys)
    return raw_input(prompt)
Ejemplo n.º 9
0
def make_input_key(c, control_key_state=None):
    input_key = win32console.PyINPUT_RECORDType(win32console.KEY_EVENT)
    try:
        input_key.Char = unicode(c)
    except:
        input_key.Char = unicode(' ')
    input_key.VirtualKeyCode = user32.VkKeyScanA(ord(c))
    input_key.KeyDown = True
    input_key.RepeatCount = 1
    if control_key_state:
        input_key.ControlKeyState = control_key_state
    return input_key
 def __call__(self, prompt, prefill=''):
     import win32console
     
     _stdin = win32console.GetStdHandle(win32console.STD_INPUT_HANDLE)
     keys = []
     for c in str(prefill):
         evt = win32console.PyINPUT_RECORDType(win32console.KEY_EVENT)
         evt.Char = c
         evt.RepeatCount = 1
         evt.KeyDown = True
         keys.append(evt)
 
     _stdin.WriteConsoleInput(keys)
     return input(prompt)
Ejemplo n.º 11
0
    def status(self):
        if not self.session_status in ["Paused", "Running"]:
            return

        if os.name == 'nt':
            evt = win32console.PyINPUT_RECORDType(win32console.KEY_EVENT)
            evt.Char = 's'
            evt.RepeatCount = 1
            evt.KeyDown = True
            evt.VirtualKeyCode=0x0
            self.win_stdin.WriteConsoleInput([evt])
        else:
            try:
                self.session_process.stdin.write(b's')
                self.session_process.stdin.flush()
            except BrokenPipeError:
                pass
Ejemplo n.º 12
0
def make_input_key(c, control_key_state=None):
    kc = win32console.PyINPUT_RECORDType(win32console.KEY_EVENT)
    kc.KeyDown = True
    kc.RepeatCount = 1
    cnum = ord(c)
    if cnum == 3:
        pid_list = win32console.GetConsoleProcessList()
        win32console.GenerateConsoleCtrlEvent(win32con.CTRL_C_EVENT, 0)
        return
    else:
        kc.Char = unicode(c)
        if str(cnum) in CONQUE_WINDOWS_VK:
            kc.VirtualKeyCode = CONQUE_WINDOWS_VK[str(cnum)]
        else:
            kc.VirtualKeyCode = ctypes.windll.user32.VkKeyScanA(cnum)
            #kc.VirtualKeyCode = ctypes.windll.user32.VkKeyScanA(cnum+96)
            #kc.ControlKeyState = win32con.LEFT_CTRL_PRESSED

    return kc
Ejemplo n.º 13
0
 def _inject_key(screen, char):
     """
     Inject a specified character into the input buffers.
     """
     if sys.platform == "win32":
         event = win32console.PyINPUT_RECORDType(win32console.KEY_EVENT)
         event.RepeatCount = 1
         event.ControlKeyState = 0
         event.VirtualScanCode = 0
         if char >= 0:
             event.Char = chr(char)
             event.VirtualKeyCode = ord(chr(char).upper())
         else:
             # Lookup in mapping dicts
             reverse = dict((v, k) for k, v in
                            screen._EXTRA_KEY_MAP.items())
             if char in reverse:
                 event.VirtualKeyCode = reverse[char]
             else:
                 # Fudge key state required for BACK_TAB if needed.
                 if char == Screen.KEY_BACK_TAB:
                     char = Screen.KEY_TAB
                     event.ControlKeyState = win32con.SHIFT_PRESSED
                 reverse = dict((v, k) for k, v in
                                screen._KEY_MAP.items())
                 event.VirtualKeyCode = reverse[char]
         event.KeyDown = 1
         screen._stdin.WriteConsoleInput([event])
         event.KeyDown = 0
         screen._stdin.WriteConsoleInput([event])
     else:
         if char > 0:
             # Curses uses a LIFO stack for key injection, so reverse the
             # byte string to be injected.  Note that this still works for
             # ASCII as it is a single char subset of UTF-8.
             for c in reversed(bytes(chr(char).encode("utf-8"))):
                 curses.ungetch(c)
         else:
             reverse = dict((v, k) for k, v in
                            screen._KEY_MAP.items())
             curses.ungetch(reverse[char])
Ejemplo n.º 14
0
    def quit(self):
        if not self.session_status in ["Paused", "Running"]:
            return

        if os.name == 'nt':
            evt = win32console.PyINPUT_RECORDType(win32console.KEY_EVENT)
            evt.Char = 'q'
            evt.RepeatCount = 1
            evt.KeyDown = True
            evt.VirtualKeyCode=0x0
            self.win_stdin.WriteConsoleInput([evt])
        else:
            try:
                self.session_process.stdin.write(b'q')
                self.session_process.stdin.flush()
            except BrokenPipeError:
                pass

        print("Waiting for thread to end....")
        self.thread.join()
        print("Done")

        self.session_status = "Aborted"
        self.save()
Ejemplo n.º 15
0
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])
Ejemplo n.º 16
0
def make_input_key(c, control_key_state=None):
    input_key = win32console.PyINPUT_RECORDType(win32console.KEY_EVENT)
    try:
        input_key.Char = unicode(c)
    except:
        input_key.Char = unicode(' ')
    input_key.VirtualKeyCode = user32.VkKeyScanA(ord(c))
    input_key.KeyDown = True
    input_key.RepeatCount = 1
    if control_key_state:
        input_key.ControlKeyState = control_key_state
    return input_key


_input_key_return = win32console.PyINPUT_RECORDType(win32console.KEY_EVENT)
_input_key_return.Char = u'\r'
_input_key_return.VirtualKeyCode = win32con.VK_RETURN
_input_key_return.KeyDown = True
_input_key_return.RepeatCount = 1

_input_key_pause = win32console.PyINPUT_RECORDType(win32console.KEY_EVENT)
_input_key_pause.Char = unicode(chr(0))
_input_key_pause.VirtualKeyCode = win32con.VK_PAUSE
_input_key_pause.KeyDown = True
_input_key_pause.RepeatCount = 1

_input_key_escape = win32console.PyINPUT_RECORDType(win32console.KEY_EVENT)
_input_key_escape.Char = unicode(chr(27))
_input_key_escape.VirtualKeyCode = win32con.VK_ESCAPE
_input_key_escape.KeyDown = True