Python control keyboard and mouse: pynput
Address: https://pypi.python.org/pypi/pynput
This library allows you to control and monitor input devices.
For each input device, it contains a sub package to control and monitor the input device:
-
pynput.mouse: a class that controls and monitors the mouse or touchpad.
-
pynput.keyboard: a class that contains the control and monitoring keyboard.
Introduction to basic usage:
from pynput.mouse import Button, Controller import time mouse = Controller() print(mouse.position) time.sleep(3) print('The current pointer position is {0}'.format(mouse.position)) #set pointer positon mouse.position = (277, 645) print('now we have moved it to {0}'.format(mouse.position)) #Mouse movement (x,y) distance mouse.move(5, -5) print(mouse.position) mouse.press(Button.left) mouse.release(Button.left) #Double click mouse.click(Button.left, 1) #scroll two steps down mouse.scroll(0, 500)
Monitor mouse events:
from pynput import mouse def on_move(x, y ): print('Pointer moved to {o}'.format( (x,y))) def on_click(x, y , button, pressed): print('{0} at {1}'.format('Pressed' if pressed else 'Released', (x, y))) if not pressed: return False def on_scroll(x, y ,dx, dy): print('scrolled {0} at {1}'.format( 'down' if dy < 0 else 'up', (x, y))) while True: with mouse.Listener( no_move = on_move,on_click = on_click,on_scroll = on_scroll) as listener: listener.join()
Keyboard input usage:
from pynput.keyboard import Key, Controller keyboard = Controller() #Press and release space keyboard.press(Key.space) keyboard.release(Key.space) #Type a lower case A ;this will work even if no key on the physical keyboard is labelled 'A' keyboard.press('a') keyboard.release('a') #Type two upper case As keyboard.press('A') keyboard.release('A') # or with keyboard .pressed(Key.shift): keyboard.press('a') keyboard.release('a') #type 'hello world ' using the shortcut type method keyboard.type('hello world')
Keyboard monitoring:
from pynput import keyboard def on_press(key): try: print('alphanumeric key {0} pressed'.format(key.char)) except AttributeError: print('special key {0} pressed'.format(key)) def on_release(key): print('{0} released'.format(key)) if key == keyboard.Key.esc: return False while True: with keyboard.Listener( on_press = on_press, on_release = on_release) as listener: listener.join()