# pynput库自动操作键鼠 **Repository Path**: gusong125/pynput-auto ## Basic Information - **Project Name**: pynput库自动操作键鼠 - **Description**: pynput库自动操作键鼠,CSDN博主 ——发现你走远了 转载请说明原作者并放置链接 专栏传送门https://blog.csdn.net/u011027547/category_11976162.html 解读博文传送门https://blog.csdn.net/u011027547/article/details/126484234 - **Primary Language**: Python - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: https://blog.csdn.net/u011027547/article/details/126484234 - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2024-12-23 - **Last Updated**: 2024-12-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README @[toc](目录)
『python自动化』分享win32gui、cv2、easyocr等库相关的新手入门教程,目标是编写python程序进行自动化办公,解放双手。 > **欢迎关注 [『python自动化』 系列](https://blog.csdn.net/u011027547/category_11976162.html),持续更新中** > **欢迎关注 [『python自动化』 系列](https://blog.csdn.net/u011027547/category_11976162.html),持续更新中** ## 资源下载 拿来即用,所见即所得。 我的gitee仓库[pynput库自动操作键鼠](https://gitee.com/miao-zehao/pynput-auto/tree/master/) ![在这里插入图片描述](https://img-blog.csdnimg.cn/3bf1afe5e07e47a4a70d5363e2700015.png)
## 安装pynput库 ```python pip install pynput ``` ![在这里插入图片描述](https://img-blog.csdnimg.cn/8f44eb3c1ac1453ba2243fe09c8a3ac9.png)
## 实现思路 - pynput库比起之前的pywin32库提供了更简便的键鼠操作。 - 另一个区别是先初始化一个鼠标或是键盘的对象,对于这个对象进行操作,不同于面向窗口的win32。但是缺点是,导致了前台的问题,操作顶层的前台窗口。 ### API介绍 下面的代码实战会详细介绍每个方法的参数,也可以访问pywin32的官方文档查看。(建议这么做,因为以后我们自学其他库都要经历查看文档这个过程) ```python 官网网址 https://pythonhosted.org/pynput/ ```
# 代码实战 ## 一、鼠标控制 ### 1. 创建鼠标控制对象 ```python mouse = Controller() ``` ### 2. 获取一次当前鼠标位置 >原型:鼠标对象.position >实例:x,y=mouse.position ```python x,y=mouse.position#返回了一个位置坐标的元组 print("x方向鼠标位置:{},y方向鼠标位置:{}".format(x,y)) ``` ### 3. 修改鼠标位置 >原型:鼠标对象.position=(x坐标,y坐标) >实例:mouse.position=(666,666) ```python mousePosition=mouse.position print("修改前鼠标位置:{0}".format(mousePosition)) mouse.position=(666,666)#把鼠标位置设置为 (666,666) mouseposition=mouse.position print("修改后鼠标位置:{0}".format(mouseposition)) ``` ### 4. 鼠标执行点击与弹起 >原型:鼠标对象.press=(按键) >实例:mouse.press(Button.left) ```python print("3秒后点击鼠标停留的位置") win32api.Sleep(3000)#休眠等待3秒 # 模拟左键点击与弹起操作 mouse.position=(666,666)#把鼠标位置设置为 (666,666) mousePosition=mouse.position print("即将被左键点击与弹起的鼠标位置:{0}".format(mousePosition)) mouse.press(Button.left)#左键按下 win32api.Sleep(50)#有些要求点击有一些延迟 mouse.release(Button.left)#左键弹起 # 模拟右键点击与弹起操作 print("即将被右键点击与弹起的鼠标位置:{0}".format(mousePosition)) mouse.press(Button.right)#右键按下 win32api.Sleep(50)#有些要求点击有一些延迟 mouse.release(Button.right)#右键弹起 ``` ### 5. 鼠标点击封装调用 >官方现有的函数 >原型:mouse.click(操作的鼠标键位,点击次数) >示例:mouse.click(Button.left,1) >返回值:None ```python mouse.position=(888,888) mousePosition=mouse.position mouse.click(Button.left,1)#鼠标左键点击1次,第一个参数表示左右键,第二个参数表示点击次数 ``` >我们自己封装一个函数,新增了一个参数用于表示点击延迟 >原型:mzhClick(操作的鼠标键位,点击次数,点击延迟) >示例:mzhClick(Button.left,2,10) >返回值:None ```python def mzhClick(ButtonType,clickTimes,clickDelay): # 模拟左键点击延迟一段时间后再弹起的操作 for i in range(clickTimes): mouse.press(ButtonType)#左键按下 win32api.Sleep(clickDelay)#有些时候,我们的这个点击延迟可以加入随机数,这样看起来更接近真人的操作 mouse.release(ButtonType)#左键弹起 mouse.position=(629,254) mousePosition=mouse.position mzhClick(Button.left,2,10)#双击,每次点击弹起延时10毫秒 ```
## 二、鼠标监听 ### 1. 鼠标移动监听 这个程序运行后你的所有鼠标移动都会有显示提示,不移动则不会输出信息。 ```python import win32api import time from pynput.mouse import Listener, Button def mouseListener(on_move):#监听函数 with Listener(on_move=on_move) as listener:#定义on_move回调函数用于在鼠标移动时生效 listener.join()#添加监听器 def on_move(x, y): timeStruct = time.localtime(int(time.time())) # 获得当前时间时间戳后转化为本地时间 strTime = time.strftime("%Y-%m-%d %H:%M:%S", timeStruct) # 日期格式 2022-08-23 07:26:21 print("{}鼠标坐标:{}".format(strTime,(x, y))) #win32api.Sleep(100) #警告:不要取消注释这一行代码。不要尝试在这入延时,否则会真的让你的鼠标移动速度变慢,你可以类比理解为降低了你的鼠标DPI #也许你可以用上述特性来制作一个软件用于在fps游戏中压枪·······? mouseListener(on_move)#调用我们写好的监听函数 ``` ![在这里插入图片描述](https://img-blog.csdnimg.cn/02d0f7db2c3f462cbdc7d58e4dae8d56.png) ### 2. 鼠标点击监听 >原型:mouseListener(点击监听回调) >示例:mouseListener(on_click) ```python from pynput.mouse import Listener, Button def mouseListener(on_click): with Listener(on_click=on_click) as listener:#定义on_click回调函数用于在鼠标点击时生效 listener.join() def on_click(x, y, button, pressed): print("鼠标位置为:{},执行操作为:{},是否点击或松开:{}".format((x, y), button, pressed)) mouseListener(on_click) ``` ![在这里插入图片描述](https://img-blog.csdnimg.cn/7f8a9c1111aa4fdeb0f76edcc9f5fe6d.png) ### 3. 监听鼠标点击、滚动、拖动 >原型:mouseListener(移动监听回调, 点击监听回调, 滚动监听回调) >示例:mouseListener(on_move, on_click, on_scroll) ```python from pynput.mouse import Listener, Button from pynput import mouse def mouseListener(on_move, on_click, on_scroll): with Listener(on_move=on_move, on_click=on_click, on_scroll=on_scroll) as listener: listener.join() def on_move(x, y): pass def on_click(x, y, button, pressed): if button == mouse.Button.left: print('鼠标左键单击') elif button == mouse.Button.right: print('鼠标右键单击') else: print('鼠标滚轮按下,即将结束程序') print("鼠标坐标:{},鼠标操作为:{},鼠标按下弹起状态:{}".format((x, y), button, pressed)) if button == Button.middle: return False #其实这里滚动监听不知道为啥有点问题,我只能监听滚轮,大家有知道的可以评论区讨论分享一下 def on_scroll(x, y, dx, dy): print("鼠标位置为:{},滚轮上下滑动,1表示上滚,-1表示下滚:{}".format((x, y), (dx, dy))) mouseListener(on_move, on_click, on_scroll) ``` ![在这里插入图片描述](https://img-blog.csdnimg.cn/0d3231281860409296c9e19b277899d5.png)
## 三、键盘控制 ### 1. 创建键盘控制对象 ```python from pynput.keyboard import Controller, Key keyboard =Controller() ``` ### 2. 键盘单个键位按下与弹起 >一般按键按下 >原型:keyboard.press(按键字符串或是特殊键码) >示例:keyboard.press("a") >一般按键弹起 >原型:keyboard.release(按键字符串或是特殊键码) >示例:keyboard.release("a") - 特殊键位,所有的包括ctrl在内的键盘上的其他键位通过这种方式操作 >特殊按键按下 >原型:keyboard.release(按键字符串或是特殊键码) >示例:keyboard.press(Key.space)#按下 空格键位 >特殊按键弹起 >原型:keyboard.release(按键字符串或是特殊键码) >示例:keyboard.release(Key.space)#弹起空格键位 > 补充一下常见的特殊键位 ```python alt= 一个通用的 Alt 键。这是一个修饰符。 alt_gr= AltGr 键。这是一个修饰符。 alt_l= 左 Alt 键。这是一个修饰符。 alt_r= 右 Alt 键。这是一个修饰符。 backspace= 退格键。 caps_lock= 大写锁定键。 cmd= 一个通用的命令按钮。在PC平台上,这对应于 Super 键或 Windows 键,而在Mac上,它对应于 Command 键。这可能是一个修饰符。 cmd_l= 左侧命令按钮。在PC平台上,这对应于 Super 键或 Windows 键,而在Mac上,它对应于 Command 键。这可能是一个修饰符。 cmd_r= 右命令按钮。在PC平台上,这对应于 Super 键或 Windows 键,而在Mac上,它对应于 Command 键。这可能是一个修饰符。 ctrl= 一个通用的 Ctrl 键。这是一个修饰符。 ctrl_l= 左 Ctrl 键。这是一个修饰符。 ctrl_r= 右 Ctrl 键。这是一个修饰符。 delete= 删除键。 down= 向下箭头键。 end= 结束键。 enter= Enter 或 Return 键。 esc= Esc 键。 f1= 功能键。定义了 F1 到 F20。 home= 主页键。 insert= 插入键。对于某些平台,这可能是未定义的。 left= 一个左箭头键。 menu= 菜单键。对于某些平台,这可能是未定义的。 num_lock= NumLock 键。对于某些平台,这可能是未定义的。 page_down= PageDown 键。 page_up= PageUp 键。 pause= 暂停/中断键。对于某些平台,这可能是未定义的。 print_screen= PrintScreen 键。对于某些平台,这可能是未定义的。 right= 一个右箭头键。 scroll_lock= 滚动锁定键。对于某些平台,这可能是未定义的。 shift= 一个通用的 Shift 键。这是一个修饰符。 shift_l= 左 Shift 键。这是一个修饰符。 shift_r= 右 Shift 键。这是一个修饰符。 space= 空格键。 tab= Tab 键。 up= 向上箭头键。 ``` ```python import time from pynput.mouse import Controller,Button mouse = Controller()#创建鼠标控制对象 mouse.click(Button.left,1)#鼠标左键点击一次目的是为了激活输入窗口 time.sleep(1)#休眠1秒 from pynput.keyboard import Controller, Key keyboard =Controller()##创建键盘控制对象 #一般键位 keyboard.press("a")#按下 a键位 keyboard.release("a")#弹起 a键位 keyboard.press("A")#按下 A键位 keyboard.release("A")#弹起 A键位 time.sleep(1)#休眠1秒 #特殊键位,所有的包括ctrl在内的键盘上的其他键位通过这种方式操作 keyboard.press(Key.space)#按下 空格键位 keyboard.release(Key.space)#弹起空格键位 keyboard.press(Key.ctrl)#按下 空格键位 keyboard.release(Key.ctrl)#弹起空格键位 time.sleep(1)#休眠1秒 ``` ### 3. 键盘多个键位组合使用 >使用`alt+tab`实现自动切换界面,原理就是按下一个键不马上弹起,继续按下别的键 ```python #3.键盘多个键位组合使用 # 切换界面 from pynput.keyboard import Controller, Key keyboard =Controller() with keyboard.pressed(Key.alt):#按住alt键的同情况下 keyboard.press(Key.tab)#按住tab keyboard.release(Key.tab)#弹起tab键 ``` ### 4. 键盘字符串输出 >键盘字符串输出 >原型:keyboard.type(要输的内容字符串) >示例:keyboard.type("我输入了内容!") >键盘字符输出 >原型:keyboard.touch(字符,是否输入) >示例:keyboard.touch("&",True) ```python from pynput.keyboard import Controller, Key keyboard =Controller() keyboard.type("我输入了内容!") keyboard.type("&") keyboard.touch("&",True)#输入字符用touch方法 ```
## 四、键盘监听 ### 制作一个简易的键码查询器 按下或是弹起键位就会输出键位的键码信息,按左上角的`esc`键位可以退出程序。 ```python #键码查询器,想知道哪个键位的键码就运行程序按下按键。原理是监听按键的按下和弹起并打印键码 from pynput.keyboard import Key, Listener def on_press(key): print('按下的键位是{0}'.format( key)) def on_release(key): print('弹起的键位是{0}'.format( key)) if key == Key.esc: # Stop listener print("按esc键退出") return False # Collect events until released with Listener( on_press=on_press, on_release=on_release) as listener: listener.join() ``` ![在这里插入图片描述](https://img-blog.csdnimg.cn/514e4ef230fc46c5a665befc263de263.png)
## 总结 大家喜欢的话,给个👍,点个关注!给大家分享更多有趣好玩的python自动化办公知识! **版权声明:** 发现你走远了@mzh原创作品,转载必须标注原文链接 Copyright 2022 mzh Crated:2022-8-1 > **欢迎关注 [『python自动化』 系列](https://blog.csdn.net/u011027547/category_11976162.html),持续更新中** > **欢迎关注 [『python自动化』 系列](https://blog.csdn.net/u011027547/category_11976162.html),持续更新中** > [【python自动化】01.安装配置库和环境之win32gui安装失败(保姆级图文)](https://blog.csdn.net/u011027547/article/details/126450109) > [【python自动化】02. pywin32库自动操作键鼠(保姆级代码注释)](https://blog.csdn.net/u011027547/article/details/126471190) > [【python自动化】03. pynput库自动操作键鼠(保姆级代码注释)](https://blog.csdn.net/u011027547/article/details/126484234) > 【更多内容敬请期待】