本文目录导读:

我来为您介绍几种使用Python实现键盘控制的方法,包含不同场景的实用案例。
使用 keyboard 库(推荐,简单易用)
安装
pip install keyboard
基础案例:模拟键盘按键
import keyboard
import time
# 模拟按键
def basic_key_press():
# 模拟按下a键
keyboard.press('a')
time.sleep(0.1)
keyboard.release('a')
# 模拟组合键
keyboard.press_and_release('ctrl+c')
keyboard.press_and_release('win+d') # 显示桌面
# 直接写入文本
keyboard.write('Hello, World!', delay=0.1)
# 示例
basic_key_press()
案例2:热键监听与自动打字程序
import keyboard
import time
def hotkey_demo():
print("程序已启动,按 F1 开始自动打字,按 Esc 退出...")
# 注册热键
keyboard.add_hotkey('f1', auto_type_text)
keyboard.add_hotkey('esc', lambda: exit())
# 保持程序运行
keyboard.wait()
def auto_type_text():
print("开始自动打字...")
text = "Python键盘控制演示!\n"
# 模拟打字效果
for char in text:
time.sleep(0.1)
keyboard.write(char)
# 运行热键监听
# hotkey_demo()
案例3:记录并回放键盘操作
import keyboard
import time
class KeyRecorder:
def __init__(self):
self.recorded_events = []
self.is_recording = False
def start_recording(self):
"""开始记录键盘事件"""
self.recorded_events = []
self.is_recording = True
print("开始记录... 按 F2 停止记录")
# 记录按键事件
keyboard.hook(self.capture_event)
def capture_event(self, event):
"""捕获键盘事件"""
if event.event_type == 'down':
if event.name == 'f2':
self.stop_recording()
else:
self.recorded_events.append({
'time': time.time(),
'key': event.name
})
def stop_recording(self):
"""停止记录"""
self.is_recording = False
print(f"记录完成!捕获到 {len(self.recorded_events)} 个按键事件")
# 清除hook
keyboard.unhook_all()
def replay(self):
"""回放记录的按键"""
if not self.recorded_events:
print("没有记录可回放")
return
print("开始回放... 按 Esc 取消")
start_time = time.time()
first_event_time = self.recorded_events[0]['time']
for event in self.recorded_events:
# 计算延迟时间
delay = event['time'] - first_event_time
current_delay = time.time() - start_time
if delay > current_delay:
time.sleep(delay - current_delay)
# 检查是否要取消
if keyboard.is_pressed('esc'):
print("回放已取消")
break
# 模拟按键
keyboard.press_and_release(event['key'])
print("回放完成!")
# 使用示例
def recorder_demo():
recorder = KeyRecorder()
print("按 F1 开始记录,按 F3 回放,按 Esc 退出")
def start_rec():
recorder.start_recording()
def start_replay():
if not recorder.is_recording:
recorder.replay()
keyboard.add_hotkey('f1', start_rec)
keyboard.add_hotkey('f3', start_replay)
keyboard.add_hotkey('esc', lambda: exit())
keyboard.wait()
# 运行录制演示
# recorder_demo()
使用 pynput 库(更底层,功能强大)
安装
pip install pynput
案例4:键盘监听与自动化
from pynput import keyboard
import time
class KeyboardController:
def __init__(self):
self.controller = keyboard.Controller()
self.listener = None
def on_press(self, key):
"""按键按下时的回调"""
try:
print(f'按下了: {key.char}')
# 在特定按键时执行操作
if key.char == 'q':
print("检测到q键,执行特殊操作!")
self.simulate_complex_shortcut()
except AttributeError:
print(f'按下了特殊键: {key}')
# 处理特殊键
if key == keyboard.Key.esc:
# 停止监听
return False
elif key == keyboard.Key.f1:
self.type_text("按下F1键了!")
def on_release(self, key):
"""按键释放时的回调"""
pass
def simulate_complex_shortcut(self):
"""模拟复杂快捷键"""
# Ctrl+Shift+A
with self.controller.pressed(keyboard.Key.ctrl):
with self.controller.pressed(keyboard.Key.shift):
self.controller.press('a')
self.controller.release('a')
print("模拟组合键完成")
def type_text(self, text):
"""模拟打字"""
self.controller.type(text)
def start_listener(self):
"""开始监听键盘"""
with keyboard.Listener(
on_press=self.on_press,
on_release=self.on_release
) as listener:
self.listener = listener
listener.join()
# 运行监听
# controller = KeyboardController()
# controller.start_listener()
实用案例:自动化填表
import keyboard
import time
import random
class AutoFormFiller:
def __init__(self):
self.form_data = {
'name': '张三',
'email': 'zhangsan@example.com',
'phone': '13800138000',
'address': '北京市朝阳区xxx街道'
}
def fill_form(self):
"""自动填写表单"""
print("即将开始自动填表,请将光标定位到第一个输入框...")
time.sleep(3)
for field, value in self.form_data.items():
print(f"填写 {field}: {value}")
# 逐字输入,模拟真人打字
for char in value:
keyboard.write(char)
time.sleep(random.uniform(0.05, 0.15))
# 模拟Tab键切换到下一个输入框
time.sleep(0.5)
keyboard.press_and_release('tab')
time.sleep(0.3)
print("表单填写完成!")
def run(self):
"""运行自动填表"""
print("按 F5 开始自动填表,按 Esc 退出")
keyboard.add_hotkey('f5', self.fill_form)
keyboard.add_hotkey('esc', lambda: exit())
keyboard.wait()
# 运行自动填表
# filler = AutoFormFiller()
# filler.run()
游戏辅助:自动连击
import keyboard
import time
class AutoClicker:
def __init__(self, key='space', delay=0.1):
self.key = key
self.delay = delay
self.is_running = False
def toggle(self):
"""切换自动连击状态"""
self.is_running = not self.is_running
status = "启动" if self.is_running else "停止"
print(f"自动连击 {status}")
while self.is_running:
keyboard.press_and_release(self.key)
time.sleep(self.delay)
def run(self):
"""运行自动连击"""
print("按 F6 启动/停止自动连击,按 Esc 退出")
keyboard.add_hotkey('f6', self.toggle)
keyboard.add_hotkey('esc', lambda: exit())
keyboard.wait()
# 运行自动连击
# auto = AutoClicker()
# auto.run()
注意事项
- 权限问题:某些系统可能需要管理员权限才能模拟键盘操作
- 延迟设置:模拟按键时适当加入延迟,避免操作过快
- 程序退出:记得提供退出机制,如按 Esc 键退出
- 冲突避免:避免与系统快捷键冲突
选择建议
- 简单使用:推荐
keyboard库 - 需要精确控制:推荐
pynput库 - 游戏或专业应用:可考虑
pyautogui或win32api
这些案例涵盖了键盘控制的主要使用场景,您可以根据具体需求选择合适的方案。