【Python】监听键盘鼠标,基于pynput库

目录

前言

首先放上官网链接

示例代码

模拟输入

监控输入

按键与鼠标宏

测试时的问题:按键按下不弹起的bug


前言

键盘输入我们第一时间会想到win32api,这货还行,就是稍微繁琐了点,底层了点

Windows平台Python编程必会模块之pywin32_顺其自然~的博客-CSDN博客_python pywin32

如果想监听键盘,网上大量的文章都是pyHook,但是这货是为python2服务的,然后python3要用就得经过复杂的途径,所以监听键盘用这个很难搞。

终于,我发现了pynput库,简直是救星!

对于键盘输入,pynput非常简洁,并且提供了组合键的简洁写法

对于键盘监听,pynput也非常简洁,关键是pynput一个库就实现了我们要的所有功能!

安装就pip即可,不会真有人搜到这里还不会用pip吧。

好,进入学习

首先放上官网链接

官网pynput Package Documentation — pynput 1.7.6 documentation

关于键盘Handling the keyboard — pynput 1.7.6 documentation

示例代码

模拟输入

from pynput import keyboard,mouse
from pynput.keyboard import Key
from pynput.mouse import Button

# 键盘
# 生成了一个控制器类
key_ctrl = keyboard.Controller()

# 简单按下放松
key_ctrl.press('a')
key_ctrl.release('a')

# 组合键写法1,顺序press,倒序release,比较麻烦
key_ctrl.press(Key.shift)
key_ctrl.press('a')
key_ctrl.release(Key.shift)
key_ctrl.release('a')

# 组合键写法2,使用with,自动释放,代码量缩小一半
with key_ctrl.pressed(Key.shift):
    key_ctrl.press('a')
    key_ctrl.release('a')

# 整段文字输入
key_ctrl.type('text')

# 鼠标
mouse_ctrl=mouse.Controller()
mouse_ctrl.scroll(0,-1) # 左右,上下,-1是往下滚,有小伙伴好奇,怎么能左右滚呢?
#当然是shift滚轮啦

print(mouse_ctrl.position)
mouse_ctrl.position=(0,0) # 绝对移动,直接设置坐标
mouse_ctrl.move(80,10) # 相对移动,通过函数实现
mouse_ctrl.click(Button.left,1) #选择键和次数
mouse_ctrl.press(Button.left) # 按下与释放,选择键
mouse_ctrl.release(Button.left)

监控输入

from pynput import keyboard
from pynput import mouse

def on_press(key):
    """定义按下时候的响应,参数传入key"""
    try:
        print(f'{key.char} down')
    except AttributeError:
        print(f'{key} down')


def on_release(key):
    """定义释放时候的响应"""
    print(f'{key} up')

def on_move(x,y):
    print('move to',x,y)

def on_click(x,y,button,pressed):
    print('click at',x,y,button,pressed)

def on_scroll(x,y,dx,dy):
    print('scroll at',x,y,'by',dx,dy)

# 监听写法1
def listen_key_block():
    with keyboard.Listener(
            on_press=on_press, on_release=on_release) as listener:
        listener.join()  # 加入线程池,阻塞写法


# 监听写法2
def listen_key_nblock():
    listener = keyboard.Listener(
        on_press=on_press, on_release=on_release
    )
    listener.start()  # 启动线程

def listen_mouse_nblock():
    listener = mouse.Listener(
        on_move=None, # 因为on_move太多输出了,就不放进来了,有兴趣可以加入
        on_click=on_click,
        on_scroll=on_scroll
    )
    listener.start()


if __name__ == '__main__':
    listen_mouse_nblock()
    listen_key_nblock()
    while True: # 这里应该用一个循环维持主线程,否则主线程结束了子线程就自动结束了
        pass

按键与鼠标宏

# 注意,按键类型有两种,一种是'pynput.keyboard._win32.KeyCode',另一种就是下面的枚举类

# 注意按键的模块是这个,'pynput.keyboard.Key',下面举出部分枚举,实际上还有更多

_MODIFIER_KEYS = (
    (Key.alt_gr, (Key.alt_gr.value,)),
    (Key.alt,    (Key.alt.value,   Key.alt_l.value,   Key.alt_r.value)),
    (Key.cmd,    (Key.cmd.value,   Key.cmd_l.value,   Key.cmd_r.value)),
    (Key.ctrl,   (Key.ctrl.value,  Key.ctrl_l.value,  Key.ctrl_r.value)),
    (Key.shift,  (Key.shift.value, Key.shift_l.value, Key.shift_r.value)))

测试时的问题:按键按下不弹起的bug

【Python】win32api调用后ctrl键弹不起,无法释放的原因_亦梦亦醒乐逍遥的博客-CSDN博客

  • 18
    点赞
  • 82
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我来回答您的问题。 pynput是Python的一个第三方,可以用来控制键盘鼠标。它提供了两个主要的模块:keyboard和mouse。以下是pynput的详细用法: 1. 安装pynput 在终端输入以下命令即可安装pynput: ``` pip install pynput ``` 2. 控制键盘 使用pynput控制键盘需要导入keyboard模块,然后创建一个Listener对象并定义回调函数来监听键盘事件。以下是一个示例代码: ```python from pynput import keyboard def on_press(key): try: print('Key {} pressed.'.format(key.char)) except AttributeError: print('Special key {} pressed.'.format(key)) def on_release(key): print('Key {} released.'.format(key)) with keyboard.Listener(on_press=on_press, on_release=on_release) as listener: listener.join() ``` 这个代码可以监听键盘按下和松开的事件,并打印出对应的键位信息。 3. 控制鼠标 使用pynput控制鼠标需要导入mouse模块,然后创建一个Controller对象来模拟鼠标操作。以下是一个示例代码: ```python from pynput.mouse import Button, Controller mouse = Controller() # 鼠标移动到(x, y)位置 mouse.position = (100, 200) # 鼠标左键单击 mouse.click(Button.left, 1) # 鼠标右键单击 mouse.click(Button.right, 1) # 鼠标滚轮向上滚动10个单位 mouse.scroll(0, 10) ``` 这个代码可以模拟鼠标移动、左键单击、右键单击和滚轮滚动操作。 以上就是pynput的详细用法,希望能对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亦梦亦醒乐逍遥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值