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

news2025/1/21 7:15:31

image.png

前言

这里是【使用Python编写游戏辅助工具】的第二篇:键盘监听的应用。本文主要介绍使用Python实现事件监听功能。

键盘监听是指通过编程的方式监控用户在键盘上的按键操作。

在这里键盘监听的主要用途是:

  • 监听我们按下的按键,如果按下了指定的按钮,则执行我们预先设定的操作,从而实现一些可控的操作;

文章脉络概述

本文的流程和功能如下图所示:

  • 主要实现 键盘监听;

  • 通过键盘监听事件去驱动一些操作(键盘监听功能主要配合后面的鼠标连击使用);

    • 当按下 Ctrl + Shift + A 时候,进行 鼠标连击(键盘的组合键可以自定义)
    • 当按下 Ctrl + Shift + Q 时候,进行 停止连击(键盘的组合键可以自定义)
键盘监听
Ctrl + Shift + A
Ctrl + Shift + Q
执行指定操作
执行指定操作

系列文章脉络

系列文章内容大体如下,后续可能会更新新的文章。

  • 点击直达:【使用Python编写游戏辅助工具】第一篇:概述

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

  • 点击直达:【使用Python编写游戏辅助工具】第三篇:鼠标连击器的实现

  • 点击直达:【使用Python编写游戏辅助工具】第四篇:Windows窗口操作

  • 点击直达:【使用Python编写游戏辅助工具】第五篇:打造交互式游戏工具界面:PySide6/PyQT高效构建GUI工具

知识点📖📖

安装模块

pip install keyboard

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

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

官网示例⚡⚡

本文的重点是 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 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('@@', '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模块来监听键盘事件,并通过热键来触发回调函数。它的主要作用是:

  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函数。

1686845074653899837.gif

总结🎈🎈

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

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

应用场景如下:

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

总之,本文代码可以用于监听键盘事件,并根据特定的键盘输入触发相应的操作,与后面的文章结合使用,用以实现鼠标连击的收放自如。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1165387.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

@Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成

问题 Tag和Operation标签失效 但是Schema标签有效 pom依赖 <!-- 接口文档--><!--引入openapi支持--><dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId><vers…

最长回文子串-LeetCode5 动态规划

由于基础还不是很牢固 一时间只能想到暴力的解法: 取遍每个子串 总数量nn-1n-2…1 O(n^2) 判断每个子串是否属于回文串 O(n) 故总时间复杂度为O(n^3) class Solution { public:string longestPalindrome(string s) { int max0;string ret;for(int i0;i<s.size();i)for(int…

基于SSM+Vue的宠物用品电子商务平台设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

金山文档轻维表之删除所有行记录

目前脚本文档里面的只有删除行记录功能&#xff0c;但是需要指定ID值&#xff0c;不能实现批量删除&#xff0c;很多人反馈但是官方无回应&#xff0c;挺奇怪的 但是批量删除的需求我很需要&#xff0c;最后研究了一下&#xff0c;还是挺容易实现的 测试&#xff1a; 附上脚本…

年终总结一定用得上!这8款AI制作PPT软件不容错过。

PPT&#xff08;PowerPoint&#xff09;已成为日常商务办公、教育和营销环境中广泛使用的一种呈现工具。年终总结时&#xff0c;使用PPT能清晰、直观地展示一年的工作成果&#xff0c;从而让团队成员或上级领导更好地了解并评估工作表现。 在过去&#xff0c;创建精美和引人入…

[PHP]帮管客CRM客户管理系统 v5.1.0

帮管客CRM客户管理系统基于先进的CRM营销理念设计&#xff0c;集客户档案、销售记录、业务往来于一身&#xff0c;以凝聚客户关系、提升资源价值为核心&#xff0c;将潜在客户变为现实客户、从而提升销售量、提高用户的满意度&#xff0c;并增加企业竞争力。帮管客CRM是适用于中…

Redis4 渐进式遍历/自定义客户端/持久化

1.渐进式遍历 1.keys *一次性把所有的key都获取到.但是存在一个问题,一旦数据过多,redis就会被阻塞住,就无暇顾及其他的命令,这样的影响很大. 2.那么就出现了渐进式遍历,可以做到既能获取所有的key,又不会阻塞服务器.渐进式不是一个命令把所有的key获取到,而是没执行一次命令只…

MySQL的3种索引合并优化⭐️or到底能不能用索引?

MySQL的3种索引合并优化⭐️or到底能不能用索引? 前言 前文我们讨论过MySQL优化回表的多种方式&#xff1a;索引条件下推ICP、多范围读取MRR、覆盖索引等 这篇文章我们来聊聊MySQL提供的另一种优化回表的手段&#xff1a;index merge 索引合并 在阅读本文前&#xff0c;你…

windows + Mingw32-make 编译 PoDoFo库,openssl, libjpeg, Msys2工具的使用

参考&#xff1a; https://blog.csdn.net/sspdfn/article/details/104244306 https://blog.csdn.net/yaoyuanyylyy/article/details/17436303 https://blog.csdn.net/wxlfreewind/article/details/106492253 前期进行了各种摸索&#xff0c;由于Podofo依赖库比较多&#xff0c…

Android系统Launcher启动流程学习(一)init启动部分

init进程学习&#xff1a; 文件路径system/core/init/init.cpp 解析init.rc配置文件&#xff0c;首先开启ServiceManager和MediaServer等关键进程init进程fork启动Zygote服务进程处理子进程的终止(signal方式)提供属性服务的功能 int main(int argc, char** argv) {//注释一…

Problem I. Magic Potion--2018ICPC南京

解析&#xff1a; 对于英雄跑一边二分图匹配&#xff0c;记录res1 再跑一边二分图匹配&#xff0c;记录res2 答案即为res1min&#xff08;k&#xff0c;res2&#xff09; #include<bits/stdc.h> using namespace std; int n,m,k; int g[510][510],match[510],st[510]; b…

【Python全栈_公开课学习记录】

一、初识python (一).Python起源 Python创始人为吉多范罗苏姆&#xff08;荷兰&#xff09;&#xff0c;Python崇尚优美、清晰、简明的编辑风格。Python语言结构清晰简单、数据库丰富、运行成熟稳定&#xff0c;科学计算统计分析领先。目前广泛应用于云计算、Web开发、科学运算…

BlockingQueue解析

BlockingQueue其实就是阻塞队列&#xff0c;是基于阻塞机制实现的线程安全的队列。 BlockingQueue不同于普通的Queue的区别主要是&#xff1a; 通过在入队和出队时进行加锁&#xff0c;保证了队列线程安全支持阻塞的入队和出队方法&#xff1a;当队列满时&#xff0c;会阻塞入…

数据结构与算法【01】—绪论

专栏地址:数据结构与算法专栏 开源仓库:bigsai-algorithm仓库 ,欢迎支持 针对以前写的数据结构与算法系列重写(针对文字描述、图片、错误修复),改动会比较大,一直到更新完为止 前言 数据结构与算法是程序员内功体现的重要标准之一,且数据结构也应用在各个方面,业界更有…

3.18每日一题(奇偶性、奇偶性的平移、几何意义、配方、换元)

解法一&#xff1a;先配方&#xff0c;再用三角函数换元&#xff08;看见根号一般用三角函数&#xff09;&#xff0c;看见对称区间联想奇偶性&#xff0c;最后再用公式 解法二&#xff1a; 利用奇偶性的平移&#xff0c;令&#xff08;x-1&#xff09; t &#xff0c;对应的区…

ROS学习笔记(4):ROS架构和通讯机制

前提 前4篇文章以及帮助大家快速入门ROS了&#xff0c;而从第5篇开始我们会更加注重知识积累。同时我强烈建议配合B站大学的视频一起服用。 1.ROS架构三层次&#xff1a; 1.基于Linux系统的OS层&#xff1b; 2.实现ROS核心通信机制以及众多机器人开发库的中间层&#xff1b…

[H5动画制作系列]坐标转化问题一次搞清,一了百了

前言: 本次演示的坐标包括三个坐标层&#xff1a; 1.舞台上的某位置相对于舞台的全局坐标的坐标(黑色)。 2.舞台上蓝色实例内部某位置相对于该蓝色实例内部局部坐标的坐标(蓝色)。 3.舞台上蓝色实例内部的红色实例内部某位置相对该红色实例内部局部坐标的坐标(红色)。 舞台…

Linux Makefile变量详解

前言 我们是地球人。曾经为复杂的 Makefile 变量而苦恼过吗&#xff1f;这就是我们的用武之地。我们简化您的构建流程&#xff0c;以获得更快、更高效的结果。看看我们。 自 1976 年出现以来&#xff0c;Make 一直在帮助开发人员自动执行编译代码、构建可执行文件和生成文档的…

【ICCV2023】利用软对比学习和全能分类器提升模型在跨域场景发现新类别的能力...

论文标题&#xff1a; Boosting Novel Category Discovery Over Domains with Soft Contrastive Learning and All in One Classifier 论文链接&#xff1a;https://openaccess.thecvf.com/content/ICCV2023/html/Zang_Boosting_Novel_Category_Discovery_Over_Domains_with_So…

【Linux】 su 命令使用

su&#xff08;英文全拼&#xff1a;switch user&#xff09;命令用于变更为其他使用者的身份&#xff0c;除 root 外&#xff0c;需要键入该使用者 的密码。使用权限&#xff1a;所有使用者。 语法 su [选项] [-] [USER [参数]...] su命令 -Linux手册页 著者 作者&#xff1…