【使用Python编写游戏辅助工具】第二篇:键盘监听的应用

前言
这里是【使用Python编写游戏辅助工具】的第二篇:键盘监听的应用。本文主要介绍使用
Python实现事件监听功能。
键盘监听是指通过编程的方式监控用户在键盘上的按键操作。
在这里键盘监听的主要用途是:
- 监听我们按下的按键,如果按下了指定的按钮,则执行我们预先设定的操作,从而实现一些可控的操作;
文章脉络概述
本文的流程和功能如下图所示:
-
主要实现 键盘监听;
-
通过键盘监听事件去驱动一些操作(
键盘监听功能主要配合后面的鼠标连击使用);- 当按下 Ctrl + Shift + A 时候,进行 鼠标连击(键盘的组合键可以自定义)
- 当按下 Ctrl + Shift + Q 时候,进行 停止连击(键盘的组合键可以自定义)
系列文章脉络
系列文章内容大体如下,后续可能会更新新的文章。
-
点击直达:【使用Python编写游戏辅助工具】第一篇:概述
-
点击直达:【使用Python编写游戏辅助工具】第二篇:键盘监听的应用
-
点击直达:【使用Python编写游戏辅助工具】第三篇:鼠标连击器的实现
-
点击直达:【使用Python编写游戏辅助工具】第四篇:Windows窗口操作
-
点击直达:【使用Python编写游戏辅助工具】第五篇:打造交互式游戏工具界面:PySide6/PyQT高效构建GUI工具
知识点📖📖
安装模块
pip install keyboard
据官方介绍,Keyboard 是可以在 Windows 和 Linux 上 hook 和模拟 全局键盘事件的一个模块。
这个模块就可以很好的实现本文的主题。
官网示例⚡⚡
本文的重点是 Keyboard模块,项目地址在这:https://github.com/boppreh/keyboard 。
笔者在这里不去详细介绍 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 keyboardkeyboard.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('@@', 'my.long.email@example.com')# 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)
这行代码注册了一个缩写,当用户输入@@并按下空格键时,会自动替换为my.long.email@example.com。
keyboard.add_abbreviation('@@', 'my.long.email@example.com')
这行代码将程序无限阻塞,类似于while True的效果,直到用户终止程序。
keyboard.wait()
键盘监听 实现✨✨
因为本篇文章需要实现的是监听键盘操作,所以需要关心的是 keyboard 的两个操作:
- keyboard.add_hotkey:注册热键,接受一个热键和回调函数;
- keyboard.wait:监听程序,直到给定的键被按下。
代码
代码释义
这段代码使用了keyboard模块来监听键盘事件,并通过热键来触发回调函数。它的主要作用是:
- 定义了两个回调函数
start_keyboard_listener和stop_keyboard_listener,分别用于开始和停止键盘监听; - 使用
keyboard.add_hotkey函数注册热键,将热键和相应的回调函数绑定起来。在本例中,按下Ctrl+Shift+A将调用start_keyboard_listener,按下Ctrl+Shift+Q将调用stop_keyboard_listener; - 在主程序中,通过
keyboard.wait('ctrl+c')进入监听状态,等待用户按下Ctrl+C来终止程序。
请注意,代码中的time.sleep(5)用于模拟执行某些操作时的时间延迟,可以根据需要进行调整或移除。
另外,except KeyboardInterrupt用于捕获用户按下Ctrl+C的中断信号,以便优雅地退出程序或执行相应的处理逻辑。
import time
import keyboarddef start_keyboard_listener():"""开始键盘监听的回调函数"""print("Ctrl+Shift+A pressed")time.sleep(5)# do somethingdef 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模块 的基本使用,并且实现键盘监听的操作,
- 主要使用 keyboard 的 add_hotkey 和 wait 两个方法来实现。
应用场景如下:
- 快捷键操作:通过监听特定的快捷键,实现在特定情况下执行某些操作。例如,当按下
Ctrl+Shift+A时开始执行某个任务,按下Ctrl+Shift+Q时停止执行任务。 - 自动化脚本:在需要进行键盘监听的自动化脚本中使用。可以根据特定的键盘输入触发相应的操作,从而实现自动化任务的执行。例如,在某个特定的键盘事件发生时,自动触发截图、记录日志等操作。
- 辅助工具开发:作为开发辅助工具的一部分,监听键盘事件,以便在特定的触发条件下执行相应的操作。例如,当按下特定的组合键时,显示帮助信息或执行调试操作。
总之,本文代码可以用于监听键盘事件,并根据特定的键盘输入触发相应的操作,与后面的文章结合使用,用以实现鼠标连击的收放自如。
相关文章:
【使用Python编写游戏辅助工具】第二篇:键盘监听的应用
前言 这里是【使用Python编写游戏辅助工具】的第二篇:键盘监听的应用。本文主要介绍使用Python实现事件监听功能。 键盘监听是指通过编程的方式监控用户在键盘上的按键操作。 在这里键盘监听的主要用途是: 监听我们按下的按键,如果按下了指…...
Shiny Server和ShinyProxy是什么,有什么区别?
调研以及参与过多个生物公司的生信工具研发,不管是ShinyServer还是ShinyProxy都有一定研究,尤其是ShinyServer。如果仅是本地化测试想快速的搭建Shiny应用,我推荐用Shiny Server,如果多并发用户且更好的线上管理Shiny应用…...
Java 客户端、服务端NIO大文件传输
一、需求 公司电脑不让使用U盘,又不想通过公司聊天软件传输,怕被监控。但是通过QQ、微信传输文件对文件大小又有限制。基于种种原因,自己简单写了个服务端、客户端进行文件传输,大文件最好在局域网内进行数据传输。 二、pom依赖…...
Unity3D与iOS的交互 简单版开箱即用
本文适合的情况如下: Unity客户端人员 与 IOS端研发人员合作的情况 目录 From U3D to iOS 实现原理 1.unity工程目录创建2个文件 NativeCallProxy.m、NativeCallProxy.h 并且放到Unity工程目录Plugins/iOS/unity_ios_plus目录下 2.创建C#调用脚本 定义对应.mm脚…...
限制LitstBox控件显示指定行数的最新数据(3/3)
实例需求:由于数据行数累加增加,控件加载的数据越来越多,每次用户都需要使用右侧滚动条拖动才能查看最新数据。 因此希望ListBox只加载最后10行数据(不含标题行),这样用户可以非常方便地选择数据ÿ…...
Maven进阶系列-仓库和镜像
Maven进阶系列-仓库和镜像 文章目录 Maven进阶系列-仓库和镜像1. 仓库1.1 仓库类型1.2 寻找jar的基本优先级顺序:1.3 仓库优先次序验证示例 2. settings.xml文件2.1 mirrors2.1.1 没有配置mirror2.1.2 配置了mirror2.1.3 <mirrorOf> 2.2 servers2.3 profiles …...
mac下载安装jenkins
下载 https://get.jenkins.io/war/ 启动 使用命令行启动 java -jar jenkins.war 浏览器访问 IP:8080 或 localhost:8080 ,对jenkins进行配置,刚开始需要输入密码 终端会展示密码和密码存放位置 jenkins插件下载地址, 下载后自行上传。 I…...
Mac上的iTerm2和Oh My Zsh 的安装(安装过程和失败详解)
前言(无重点,安装往后看) 由于在很多人的安利下,说很好用,作者今天花费了4个小时用血的教训总结出来的安装教程,我在安装过程中遇到的最大的问题就是 1. curl: (7) Failed to connect to raw.githubusercon…...
阿里云OS系统Alibaba Cloud Linux 3系统的安全更新命令
给客户部署的服务,进入运维阶段,但是经常被客户监测到服务器漏洞,现在整理一下,服务器漏洞问题更新命令步骤。 服务器系统: 阿里云linux服务器:Alibaba Cloud Linux 3 漏洞类型和描述: #3214…...
你写的Python代码到底多快?这些测试工具了解了解
当我们写完一个脚本或一个函数,首先能保证得到正确结果,其次尽可能的快(虽然会说Py慢,但有的项目就是得要基于Py开发) 本期将总结几种获取程序运行时间的方法,极大的帮助对比不同算法/写法效率 插播&…...
网际控制报文协议ICMP
网际控制报文协议ICMP 为了更有效的转发IP数据报和提高交付成功的机会,在网际层使用ICMP(Internet Control Message Protocol)协议,其允许主机或路由器报告差错情况和提供有关异常情况的报告。ICMP报文装在IP数据报中…...
海外腾讯云服务器配置域名的详细说明!!
本文首要针对腾讯云服务器装备域名的问题进行具体的说明,包含域名的品种、注册方法、解析进程以及安全性等方面的介绍,帮助用户更好的理解腾讯云服务器装备域名的全进程。 一、域名的品种 1.域名是互联网上仅有标识一台计算机或一个网络资源的名称&#…...
听GPT 讲Rust源代码--library/std(12)
题图来自 Decoding Rust: Everything You Need to Know About the Programming Language[1] File: rust/library/std/src/os/watchos/mod.rs 该文件(rust/library/std/src/os/watchos/mod.rs)的作用是为Rust标准库提供支持WatchOS操作系统的特定功能。 W…...
06、Caused by: java.nio.charset.MalformedInputException: Input length = 1
目录 问题:原因:解决方法: 问题: Caused by: java.nio.charset.MalformedInputException: Input length 1 原因: 应该是中文有哪些文字导致的。 yml 编码格式出错 解决方法: 直接这里把GBK改成 utf-8…...
探索 Java 8 中的 Stream 流:构建流的多种方式
人嘛,要懂得避嫌… 开篇引入 Java 8引入了Stream流作为一项新的特性,它是用来处理集合数据的一种函数式编程方式。Stream流提供了一种更简洁、高效和易于理解的方法来操作集合数据,同时也能够实现并行处理,以提高性能。 以下是St…...
安卓Apk布局修改从入门到精通
安卓Apk布局修改从入门到精通 课程大纲 本次教程的目标是,学会将安卓apk反向工程后,如何找到需要修改的布局、对布局修改、对布局进行美化,如何隐藏布局(按钮等),以及如何在界面上添加按钮并响应点击事件&…...
React Native 样式及其布局
React Native 样式及其布局 参考 https://reactnative.cn/docs/flexbox 一、样式 在 React Native 中,你并不需要学习什么特殊的语法来定义样式。我们仍然是使用 JavaScript 来写样式。所有的核心组件都接受名为style的属性。这些样式名基本上是遵循了 web 上的 …...
基于51单片机的智能指纹考勤系统设计
**单片机设计介绍,1661【毕设课设】基于51单片机的智能指纹考勤系统设计-原理图-PCB-程序-报告 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于51单片机的智能指纹考勤系统是一种利用51单片机作为主控芯片&#x…...
I/O性能优化——这一篇就足够啦
背景 继上一篇CPU性能优化文章 ,本次向大家分享关于I/O性能优化的分析套路以及常见措施。后续还有关于内存及网络优化的篇章。 基本概念 对于I/O我们先了解几个概念,文件系统,磁盘,文件。 磁盘 磁盘为系统提供了最基本的持久化存…...
【蓝桥杯选拔赛真题44】python小蓝晨跑 青少年组蓝桥杯python 选拔赛STEMA比赛真题解析
目录 python小蓝晨跑 一、题目要求 1、编程实现 2、输入输出 二、算法分析...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
基于Springboot+Vue的办公管理系统
角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...
手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...
git: early EOF
macOS报错: Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...
