监控用户输入设备

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]))

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java从SVG中提取层   java通过蓝牙将文件从手机传输到其他手机   java如何使网络化JavaFX应用程序正确退出?   java Android Open GL不绘制正方形   java为什么使用泛型得到编译器警告?   多集群的Java Hazelcast问题   java OpenCV库配置正确,安卓应用程序可以正常运行一段时间,直到出现错误,表明不再加载该库   java字节好友通知中断Eclipse调试器   java JavaMail不会从发件人(Google除外)检索邮件   java使用MOXy将JsonObject属性映射到XML   java在FilteredTree中搜索“隐藏数据”   Javafx:用鼠标在ImageView上绘图   垃圾收集如何确定Java应用程序年轻gc的原因   java如何维护每个请求打开的Hibernate会话?   java gzip输入文件中的hadoop mapreduce   Java新手:Swing和显示ASCII文件   java RxJava异步订阅   java向editText添加搜索功能   java JavaFX TableViewTextField绑定