700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 【Python】监听键盘鼠标 基于pynput库

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

时间:2019-03-05 04:41:11

相关推荐

【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,mousefrom pynput.keyboard import Keyfrom 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 keyboardfrom pynput import mousedef 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)# 监听写法1def listen_key_block():with keyboard.Listener(on_press=on_press, on_release=on_release) as listener:listener.join() # 加入线程池,阻塞写法# 监听写法2def 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博客

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。