Home » Python » Python桌面自动化:keyboard库

Python桌面自动化:keyboard库

·

在当今快节奏的数字化时代,自动化已成为提升工作效率的关键。Python凭借其简单易用的语法和丰富的第三方库,在自动化领域占据重要地位。今天为大家介绍一个强大的自动化工具——keyboard库,它能帮助我们实现键盘事件的监听、模拟和控制,是桌面自动化不可或缺的得力助手。

keyboard库简介

keyboard是一个专注于键盘控制和监听的Python库,它提供了一套简单而强大的API,使开发者能够轻松实现键盘事件的捕获、按键模拟和热键设置。与PyAutoGUI相比,keyboard更专注于键盘操作,具有以下特点:

优势:

  • 跨平台支持(Windows、Linux、macOS)
  • 低级键盘事件的精确控制
  • 支持全局热键绑定
  • 键盘事件的录制和回放
  • 轻量级,安装简单
  • 支持非ASCII键盘布局

局限:

  • 在某些Linux系统上需要root权限
  • 不支持图形界面自动化(需配合其他库使用)
  • macOS上部分功能受限

与PyAutoGUI相比,keyboard在键盘控制方面更为专业和深入,但缺少鼠标控制和屏幕操作功能。两者可以配合使用,优势互补。

安装方法

使用pip安装keyboard库:

1
pip install keyboard

注意:在Linux系统上,可能需要使用sudo权限运行Python脚本。

基础功能详解

1. 按键检测与事件监听

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import keyboard
import time
 
def on_key_event(e):
    print(f'按键: {e.name}')
    print(f'事件类型: {"按下" if e.event_type == "down" else "释放"}')
    print(f'扫描码: {e.scan_code}')
    print('---')
 
# 注册回调函数
keyboard.hook(on_key_event)
 
# 保持程序运行
print('开始监听键盘事件(按Esc退出)...')
keyboard.wait('esc')

这段代码演示了如何监听键盘事件。通过hook函数注册回调,我们可以捕获所有的键盘事件,包括按键按下和释放。

2. 模拟按键输入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import keyboard
import time
 
# 模拟单个按键
keyboard.press_and_release('a')
 
# 模拟组合键
keyboard.press_and_release('ctrl+c')
 
# 模拟按键序列
keyboard.write('Hello, World!', delay=0.1)
 
# 模拟按住和释放
keyboard.press('shift')
keyboard.write('python')
keyboard.release('shift')

这些示例展示了keyboard库强大的按键模拟功能,从简单的单键输入到复杂的组合键操作都能轻松实现。

3. 热键绑定

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import keyboard
import time
 
def on_triggered():
    print('触发了热键组合!')
 
# 注册热键
keyboard.add_hotkey('ctrl+shift+a', on_triggered)
 
# 使用装饰器注册热键
@keyboard.add_hotkey('ctrl+shift+p')
def another_handler():
    print('另一个热键被触发!')
 
print('热键已注册,按Esc退出...')
keyboard.wait('esc')

热键功能允许我们为特定的按键组合绑定自定义函数,实现快捷操作。

4. 录制与回放

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import keyboard
import time
 
def record_macro():
    print('开始录制,按Esc停止...')
    recorded = keyboard.record(until='esc')
     
    print('录制完成!按空格回放,按q退出...')
    while True:
        if keyboard.is_pressed('space'):
            keyboard.play(recorded)
        elif keyboard.is_pressed('q'):
            break
        time.sleep(0.1)
 
record_macro()

这个示例展示了如何录制键盘操作并回放,适合创建简单的宏命令。

5. 高级功能:键盘映射

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import keyboard
from threading import Thread
 
def remap_key(original, new):
    keyboard.remap_key(original, new)
 
def start_remapping():
    # 将Caps Lock映射为Esc
    remap_key('caps lock', 'esc')
     
    # 保持映射运行
    keyboard.wait()
 
# 在新线程中启动映射
Thread(target=start_remapping, daemon=True).start()

键盘映射功能允许我们改变键盘布局,为特定按键指定新的功能。

实际应用案例

自动化文本输入工具

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import keyboard
import time
from datetime import datetime
 
class TextAutomation:
    def __init__(self):
        self.templates = {
            'datetime': self._get_datetime,
            'signature': lambda: '\n\nBest regards,\nPython Developer',
            'code': lambda: '```python\n# Your code here\n```'
        }
        self._setup_hotkeys()
     
    def _get_datetime(self):
        return datetime.now().strftime('%Y-%m-%d %H:%M:%S')
     
    def _setup_hotkeys(self):
        for key, template in self.templates.items():
            keyboard.add_hotkey(f'ctrl+alt+{key[0]}',
                              lambda t=template: keyboard.write(t()))
     
    def run(self):
        print('文本自动化工具已启动...')
        print('使用以下快捷键:')
        print('Ctrl+Alt+D - 插入日期时间')
        print('Ctrl+Alt+S - 插入签名')
        print('Ctrl+Alt+C - 插入代码块')
        print('按Esc退出')
        keyboard.wait('esc')
 
if __name__ == '__main__':
    automation = TextAutomation()
    automation.run()

这个实际案例展示了如何创建一个文本自动化工具,通过热键快速插入常用文本模板。该工具特别适合编写文档、邮件或代码时使用。

开发规范提醒

在使用keyboard库进行桌面自动化开发时,请注意以下几点:

  1. 权限使用
  • 在需要管理员权限的系统上,明确告知用户权限要求
  • 避免在无权限的情况下执行敏感操作
  1. 异常处理
  • 合理处理键盘事件异常
  • 提供清晰的错误提示
  • 实现优雅的退出机制
  1. 性能考虑
  • 避免过于频繁的键盘操作
  • 合理设置延时,防止系统过载
  • 注意内存使用,避免内存泄漏
  1. 安全性
  • 不要在键盘监听中记录敏感信息
  • 避免自动化操作影响系统安全
  • 提供紧急停止机制

相关资源

关注我,每天分享一个实用的Python自动化工具。