监控用户输入设备
pynput的Python项目详细描述
Pynput
此库允许您控制和监视输入设备。
目前,支持鼠标和键盘输入及监控。
有关完整信息,请参见此处的 文档。
控制鼠标
像这样使用pynput.mouse.controller
from pynput.mouse import Button, Controller mouse = Controller() # Read pointer position print('The current pointer position is {0}'.format( mouse.position)) # Set pointer position mouse.position = (10, 20) print('Now we have moved it to {0}'.format( mouse.position)) # Move pointer relative to current position mouse.move(5, -5) # Press and release mouse.press(Button.left) mouse.release(Button.left) # Double click; this is different from pressing and releasing # twice on Mac OSX mouse.click(Button.left, 2) # Scroll two steps down mouse.scroll(0, 2)
监视鼠标
像这样使用pynput.mouse.listener
from pynput import mouse def on_move(x, y): print('Pointer moved to {0}'.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: # Stop listener return False def on_scroll(x, y, dx, dy): print('Scrolled {0} at {1}'.format( 'down' if dy < 0 else 'up', (x, y))) # Collect events until released with mouse.Listener( on_move=on_move, on_click=on_click, on_scroll=on_scroll) as listener: listener.join() # ...or, in a non-blocking fashion: listener = mouse.Listener( on_move=on_move, on_click=on_click, on_scroll=on_scroll) listener.start()
鼠标侦听器是一个 线程.thread ,所有回调都将被调用 从线程。
从任何地方调用pynput.mouse.listener.stop,引发stopException或 从回调返回 false 以停止侦听器。
鼠标侦听器线程
侦听器回调直接从 平台,特别是windows
这意味着长时间运行的过程和阻塞操作不应该 从回调调用,因为这可能冻结所有进程的输入。
一种可能的解决方法是将传入消息分派到队列,然后 一个单独的线程处理它们。
处理鼠标侦听器错误
如果回调处理程序引发异常,则侦听器将停止。自从 回调在专用线程中运行,异常不会自动 重新播放。
要获得回调错误的通知,请在侦听器上调用thread.join 实例:
from pynput import mouse class MyException(Exception): pass def on_click(x, y, button, pressed): if button == mouse.Button.left: raise MyException(button) # Collect events until released with mouse.Listener( on_click=on_click) as listener: try: listener.join() except MyException as e: print('{0} was clicked'.format(e.args[0]))
控制键盘
使用pynput.keyboard.controller,如下所示:
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') with keyboard.pressed(Key.shift): keyboard.press('a') keyboard.release('a') # Type 'Hello World' using the shortcut type method keyboard.type('Hello World')
监视键盘
像这样使用pynput.keyboard.listener
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: # Stop listener return False # Collect events until released with keyboard.Listener( on_press=on_press, on_release=on_release) as listener: listener.join() # ...or, in a non-blocking fashion: listener = mouse.Listener( on_press=on_press, on_release=on_release) listener.start()
键盘侦听器是一个线程。线程,所有回调都是 从线程调用。
从任何地方调用pynput.keyboard.listener.stop,引发stopException 或者从回调返回 false 以停止侦听器。
传递给回调的 键 参数是一个 pynput.keyboard.key ,用于 特殊键,a pynput.keyboard.keycode 用于普通字母数字键,或 对于未知钥匙,只需 无 。
键盘侦听器线程
侦听器回调直接从 平台,特别是windows
这意味着长时间运行的过程和阻塞操作不应该 从回调调用,因为这可能冻结所有进程的输入。
一种可能的解决方法是将传入消息分派到队列,然后 一个单独的线程处理它们。
处理键盘侦听器错误
如果回调处理程序引发异常,则侦听器将停止。自从 回调在专用线程中运行,异常不会自动 重新播放。
要获得回调错误的通知,请在侦听器上调用thread.join 实例:
from pynput import keyboard class MyException(Exception): pass def on_press(key): if key == keyboard.Key.esc: raise MyException(key) # Collect events until released with keyboard.Listener( on_press=on_press) as listener: try: listener.join() except MyException as e: print('{0} was pressed'.format(e.args[0]))