Python键盘监听:实现快捷操作和自动化脚本(监听组合键

在这里插入图片描述

前言

本文主要介绍一下使用Python进行事件监听功能,以实现一些特有的操作。本文旨在介绍如何实现这一功能。

笔者根据一些需求写了一个小工具,流程和功能如下图所示(实际功能有更多):

  • 该工具主要实现了 键盘监听 和 鼠标连击;

  • 通过键盘监听事件去驱动 鼠标做一些操作;

    • 当按下 Ctrl + Shift + A 时候,进行 鼠标连击
    • 当按下 Ctrl + Shift + Q 时候,进行 停止连击

#mermaid-svg-7OGKNXQRJEUabuKi {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-7OGKNXQRJEUabuKi .error-icon{fill:#552222;}#mermaid-svg-7OGKNXQRJEUabuKi .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-7OGKNXQRJEUabuKi .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-7OGKNXQRJEUabuKi .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-7OGKNXQRJEUabuKi .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-7OGKNXQRJEUabuKi .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-7OGKNXQRJEUabuKi .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-7OGKNXQRJEUabuKi .marker{fill:#333333;stroke:#333333;}#mermaid-svg-7OGKNXQRJEUabuKi .marker.cross{stroke:#333333;}#mermaid-svg-7OGKNXQRJEUabuKi svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-7OGKNXQRJEUabuKi .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-7OGKNXQRJEUabuKi .cluster-label text{fill:#333;}#mermaid-svg-7OGKNXQRJEUabuKi .cluster-label span{color:#333;}#mermaid-svg-7OGKNXQRJEUabuKi .label text,#mermaid-svg-7OGKNXQRJEUabuKi span{fill:#333;color:#333;}#mermaid-svg-7OGKNXQRJEUabuKi .node rect,#mermaid-svg-7OGKNXQRJEUabuKi .node circle,#mermaid-svg-7OGKNXQRJEUabuKi .node ellipse,#mermaid-svg-7OGKNXQRJEUabuKi .node polygon,#mermaid-svg-7OGKNXQRJEUabuKi .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-7OGKNXQRJEUabuKi .node .label{text-align:center;}#mermaid-svg-7OGKNXQRJEUabuKi .node.clickable{cursor:pointer;}#mermaid-svg-7OGKNXQRJEUabuKi .arrowheadPath{fill:#333333;}#mermaid-svg-7OGKNXQRJEUabuKi .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-7OGKNXQRJEUabuKi .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-7OGKNXQRJEUabuKi .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-7OGKNXQRJEUabuKi .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-7OGKNXQRJEUabuKi .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-7OGKNXQRJEUabuKi .cluster text{fill:#333;}#mermaid-svg-7OGKNXQRJEUabuKi .cluster span{color:#333;}#mermaid-svg-7OGKNXQRJEUabuKi div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-7OGKNXQRJEUabuKi :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

辅助工具
鼠标连击
键盘监听
开始连击
Ctrl + Shift + A
Ctrl + Shift + Q
停止连击

工具的雏形参考这里:

Python实现《咸鱼之王》后台挂机 和 鼠标连点器

这个工具主要用于鼠标连击,但是实现的不仅仅鼠标连击,本文介绍的却是 键盘监听事件,真是古怪也哉!

本文的重点是 Keyboard模块,Github地址在这:https://github.com/boppreh/keyboard

知识点📖📖

安装模块

pip install keyboard

据官方介绍,Keyboard 是可以在 WindowsLinuxhook模拟 全局键盘事件的一个模块。

这个模块就可以很好的实现本文的主题了。

官网示例⚡⚡

笔者在这里不去详细介绍 keyboard 的功效,它的功能很强大,这里列举下常用的方法:

  • 系统的学习应该去它的项目网站。
方法/函数 描述
keyboard.is_pressed(key) 检查给定的键是否当前按下。返回布尔值,表示键是否按下。
keyboard.press(key) 模拟按下给定的键。
keyboard.release(key) 模拟释放给定的键。
keyboard.write(text) 模拟键盘输入给定的文本。
keyboard.press_and_release(key) 模拟按下和释放给定的键。
keyboard.hotkey(key1, key2, ..., keyN) 模拟同时按下给定的多个键。
keyboard.wait(key) 阻塞程序,直到给定的键被按下。
keyboard.add_hotkey(key, callback) 注册一个热键,当按下指定的键时,调用指定的回调函数。
keyboard.remove_hotkey(key) 移除先前注册的热键。
keyboard.read_event() 阻塞程序,直到键盘事件发生,并返回一个keyboard.KeyboardEvent对象,包含有关事件的详细信息。
keyboard.record(events=True) 记录用户的键盘输入,并返回一个包含事件的列表。如果events为False,仅记录按键和释放事件(不包括其他事件)。

代码

在官方示例拿来了这段 Example:https://github.com/boppreh/mouse#Example

  • 这段代码展示了keyboard库的一些常见用法,包括模拟按键操作、注册热键、记录和回放事件等。下面我来尝试解释一下这段代码。
import keyboard

keyboard.press_and_release('shift+s, space')

keyboard.write('The quick brown fox jumps over the lazy dog.')

keyboard.add_hotkey('ctrl+shift+a', print, args=('triggered', 'hotkey'))

# Press PAGE UP then PAGE DOWN to type "foobar".
keyboard.add_hotkey('page up, page down', lambda: keyboard.write('foobar'))

# Blocks until you press esc.
keyboard.wait('esc')

# Record events until 'esc' is pressed.
recorded = keyboard.record(until='esc')
# Then replay back at three times the speed.
keyboard.play(recorded, speed_factor=3)

# Type @@ then press space to replace with abbreviation.
keyboard.add_abbreviation('@@', '[email protected]')

# Block forever, like `while True`.
keyboard.wait()

代码释义

导入了keyboard模块

import keyboard

这行代码模拟按下并释放了组合键Shift+S,然后按下并释放了空格键。

keyboard.press_and_release('shift+s, space')

这行代码将字符串The quick brown fox jumps over the lazy dog.写入当前焦点的应用程序。相当于模拟了键盘的按键输入。

keyboard.write('The quick brown fox jumps over the lazy dog.')

这行代码注册了一个热键Ctrl+Shift+A,当用户按下该组合键时,回调函数print将被调用,并将参数('triggered', 'hotkey')传递给该回调函数。

keyboard.add_hotkey('ctrl+shift+a', print, args=('triggered', 'hotkey'))

这行代码注册了一个热键Page Up, Page Down,当用户按下该组合键时,将调用一个匿名函数,该匿名函数会将字符串foobar写入当前焦点的应用程序。

keyboard.add_hotkey('page up, page down', lambda: keyboard.write('foobar'))

这行代码阻塞程序,直到用户按下Esc键为止。

keyboard.wait('esc')

这行代码记录键盘事件,直到用户按下Esc键为止,并将记录的事件存储在recorded变量中。

recorded = keyboard.record(until='esc')

这行代码将之前记录的键盘事件以三倍的速度回放。

keyboard.play(recorded, speed_factor=3)

这行代码注册了一个缩写,当用户输入@@并按下空格键时,会自动替换为[email protected]

keyboard.add_abbreviation('@@', '[email protected]')

这行代码将程序无限阻塞,类似于while True的效果,直到用户终止程序。

keyboard.wait()

键盘监听 实现✨✨

因为本篇文章需要实现的是监听键盘操作,所以需要关心的是 keyboard 的两个操作:

  • keyboard.add_hotkey:注册热键,接受一个热键和回调函数;
  • keyboard.wait:监听程序,直到给定的键被按下。

代码

代码释义

这段代码使用了keyboard模块来监听键盘事件,并通过热键来触发回调函数。它的主要作用是:

  1. 定义了两个回调函数start_keyboard_listenerstop_keyboard_listener,分别用于开始和停止键盘监听;
  2. 使用keyboard.add_hotkey函数注册热键,将热键和相应的回调函数绑定起来。在本例中,按下Ctrl+Shift+A将调用start_keyboard_listener,按下Ctrl+Shift+Q将调用stop_keyboard_listener
  3. 在主程序中,通过keyboard.wait('ctrl+c')进入监听状态,等待用户按下Ctrl+C来终止程序。

请注意,代码中的time.sleep(5)用于模拟执行某些操作时的时间延迟,可以根据需要进行调整或移除。

另外,except KeyboardInterrupt用于捕获用户按下Ctrl+C的中断信号,以便优雅地退出程序或执行相应的处理逻辑。

import time
import keyboard


def start_keyboard_listener():
    """
    开始键盘监听的回调函数
    """
    print("Ctrl+Shift+A pressed")
    time.sleep(5)
    # do something


def stop_keyboard_listener():
    """
    停止键盘监听的回调函数
    """
    print("Ctrl+Shift+Q pressed")
    time.sleep(5)
    # do something


# 注册热键,设置回调函数
keyboard.add_hotkey('Ctrl+Shift+A', start_keyboard_listener)
keyboard.add_hotkey('Ctrl+Shift+Q', stop_keyboard_listener)

# 进入监听状态
try:
    keyboard.wait('ctrl+c')
except KeyboardInterrupt:
    ...

运行效果

可以清楚的看到(注意看左上角的 显示键盘程序),

  • 当按下键盘的 Ctrl + Shift + A 时候,执行了start_keyboard_listener函数;
  • 当按下键盘的 Ctrl + Shift + Q 时候,执行了 stop_keyboard_listener函数。

在这里插入图片描述

总结🎈🎈

本文介绍了 利用keyboard模块 的基本使用,并且实现键盘监听的操作,

  • 主要使用 keyboardadd_hotkeywait 两个方法来实现。

应用场景如下:

  1. 快捷键操作:通过监听特定的快捷键,实现在特定情况下执行某些操作。例如,当按下Ctrl+Shift+A时开始执行某个任务,按下Ctrl+Shift+Q时停止执行任务。
  2. 自动化脚本:在需要进行键盘监听的自动化脚本中使用。可以根据特定的键盘输入触发相应的操作,从而实现自动化任务的执行。例如,在某个特定的键盘事件发生时,自动触发截图、记录日志等操作。
  3. 辅助工具开发:作为开发辅助工具的一部分,监听键盘事件,以便在特定的触发条件下执行相应的操作。例如,当按下特定的组合键时,显示帮助信息或执行调试操作。

总之,本文代码可以用于监听键盘事件,并根据特定的键盘输入触发相应的操作,具体的应用场景取决于需求和实际情况。

后话

本次分享到此结束,

see you~~🐱‍🏍🐱‍🏍

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>