一、pynput库
(一)简介
pynput是一个Python的第三方库,它允许你控制和监控输入设备。该库提供了一个简单的接口来处理键盘和鼠标事件,包括按键和鼠标移动、点击等。这个库非常适合用于自动化测试、游戏辅助脚本、快捷键映射等场景。 pynput可以通过pip命令来进行安装,如下所示:
pip install pynput
对于鼠标和键盘,pynput包含不同的子包来控制该种设备:
from pynput import mouse # 鼠标包
from pynput import keybaord # 键盘包
每个子包又都包含监控和控制两个类:
from pynput import mouse, keybaord
Listener_mouse = mouse.Listener # 鼠标监听类
Listener_key = keybaord.Listener # 键盘监听类
control_mouse = mouse.Controller() # 鼠标控制类
control_key = keybaord.Controller() # 键盘控制类
(二)监听鼠标和键盘事件
from pynput import mouse, keybaord
### 鼠标事件监听
Listener_mouse = mouse.Listener(on_move=on_move, on_click=on_click, on_scroll)
Listener_mouse.start() # 开始监听
def on_move(x, y): # 鼠标移动监听
print(f'当前位置: ({x}, {y})')
Listener_mouse.stop() # 结束监听
def on_click(x, y, button, pressed): # 鼠标点击监听
print(f'点击位置: ({x}, {y})')
print(f'点击按钮: {button}')
print(f'点击状态: {"按下" if pressed else "松开"}')
Listener_mouse.stop() # 结束监听
def on_scroll(x, y, dx, dy): # 鼠标滚轮滑动监听
print(f'滚动位置: ({x}, {y})')
print(f'滚动方向: ({dx}, {dy})')
Listener_mouse.stop() # 结束监听
### 键盘事件监听
def on_press(key): # 键盘按键按下监听
try:
print('字母数字键 {0} 被按下'.format(key.char))
except AttributeError:
print('特殊按键 {0} 被按下'.format(key))
def on_release(key): # 鼠标按键释放监听
print('{0} 被释放'.format(key))
if key == keyboard.Key.esc:
return False
# 收集事件直到按键释放
with keyboard.Listener(on_press=on_press, on_release=on_release) as listener:
listener.join()
*注:with语句和listener.start()、listener.stop()是两种监听鼠标和键盘的方法,可以相互替换。当使用with语句监听时,任意一个函数返回False时或出现异常时,就会结束监听进程。
(三)控制鼠标和键盘
### 键盘事件监听
from pynput import mouse, keybaord
control_mouse = mouse.Controller()
control_key = keybaord.Controller()
## 控制鼠标
position_mouse = control_mouse.position # 获取鼠标当前的位置坐标,以元组的形式保存
print(position_mouse) # 打印位置坐标
control_mouse.position = (100, 100) # 改变鼠标的位置至(100, 100)
control_mouse.move(10, 10) # 移动鼠标至位置(10, 10)
control_mouse.press(mouse.Button.left) # 按下鼠标左键
control_mouse.press(mouse.Button.right) # 按下鼠标右键
control_mouse.press(mouse.Button.middle) # 按下鼠标中键
control_mouse.release(mouse.Button.left) # 释放鼠标左键
control_mouse.click(mouse.Button.left, 1) # 单击鼠标左键
control_mouse.click(mouse.Button.left, 2) # 双击鼠标左键
control_mouse.scroll(0, -100) # 鼠标滚轮向上滑动
control_mouse.scroll(0, 100) # 鼠标滚轮向下滑动
## 控制键盘
control_key.press(keyboard.KeyCode.from_char(“a”)) # 按下“a”键
control_key.press(“a”) # 按下“a”键
control_key.release(keyboard.KeyCode.from_char(“a”)) # 释放“a”键
control_key.release(“a”) # 释放“a”键
# 同时按下“a”键和“shift”键
with control_key.pressed(keyboard.Key.shift):
control_key.press('a')
control_key.release('a')
# 顺序按下按键,逆序释放按键
with keyboard.Controller.pressed(
keyboard.Key.ctrl,
keyboard.Key.shift,
's'):
pass
with keyboard.Controller.released(
's',
keyboard.Key.shift,
keyboard.Key.ctrl):
pass
# 输出字符串
control_key.type('hello word.')
*注:使用pressed()方法的时候加上with封装,进入语句时顺序按下提供的按键,退出时逆序释放按键。
2022

被折叠的 条评论
为什么被折叠?



