如何用Python案例实现键盘控制?

wen python案例 1

本文目录导读:

如何用Python案例实现键盘控制?

  1. 使用 keyboard 库(推荐,简单易用)
  2. 使用 pynput 库(更底层,功能强大)
  3. 实用案例:自动化填表
  4. 游戏辅助:自动连击
  5. 注意事项
  6. 选择建议

我来为您介绍几种使用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()

注意事项

  1. 权限问题:某些系统可能需要管理员权限才能模拟键盘操作
  2. 延迟设置:模拟按键时适当加入延迟,避免操作过快
  3. 程序退出:记得提供退出机制,如按 Esc 键退出
  4. 冲突避免:避免与系统快捷键冲突

选择建议

  • 简单使用:推荐 keyboard
  • 需要精确控制:推荐 pynput
  • 游戏或专业应用:可考虑 pyautoguiwin32api

这些案例涵盖了键盘控制的主要使用场景,您可以根据具体需求选择合适的方案。

抱歉,评论功能暂时关闭!