选择困难?直接生成pynput快捷键字符串
from pynput import keyboard# 文档:https://pynput.readthedocs.io/en/latest/keyboard.html#monitoring-the-keyboard
# 博客(pynput相关源码):https://blog.csdn.net/qq_39124701/article/details/145230331
# 虚拟键码(十六进制):https://learn.microsoft.com/zh-cn/windows/win32/inputdev/virtual-key-codes## 虚拟键码页面使用方法
## 1.访问虚拟键码页面, https://learn.microsoft.com/zh-cn/windows/win32/inputdev/virtual-key-codes
## 2.按F6将光标聚焦到地址栏## 粘贴这行文本 j删除avascript: document.querySelectorAll("table").forEach((table)=>{if(table.innerText.includes("0x01")){const thead=table.querySelector('thead');const tbody=table.querySelector('tbody');if(thead&&tbody){const th=document.createElement('th');th.textContent=decodeURIComponent('%E5%8D%81%E8%BF%9B%E5%88%B6%E5%80%BC');th.style.width='10%';th.style.textAlign='center';thead.querySelector('tr').insertBefore(th,thead.querySelector('tr').children[2]);tbody.querySelectorAll('tr').forEach(row=>{const td=document.createElement('td');td.style.width='10%';td.style.textAlign='center';const hexValue=row.querySelector('td:nth-child(2)').textContent.trim();const decimalValue=parseInt(hexValue,16);td.textContent=decimalValue;row.insertBefore(td,row.children[2])})}}})## 4.删除地址栏里的中文和#符号# 快捷键字符串列表
# 注意:pynput不能识别"<win>"、"<numpad1>"
hotkey_strings = ["<ctrl>+a","<ctrl>+<alt>+a","<ctrl>+<shift>+a","<ctrl>+<shift>+<alt>+a","<ctrl>+<cmd>+a","<alt>+a","<shift>+a","<cmd>+a","<ctrl>+~","<ctrl>+<f1>", # f1到f24"<ctrl>+1","<ctrl>+-","<ctrl>+=","<ctrl>+<backspace>","<ctrl>+<tab>","<ctrl>+q","<ctrl>+{","<ctrl>+}","<ctrl>+<enter>","<ctrl>+<caps_lock>","<ctrl>+;","<ctrl>+'",# 1.反斜线紧挨着引号会触发转义# 2.非原始字符串模式下, 反斜线+空格会触发无效转义# 3.pynput无法解析带空格的字符串r"<ctrl>+\ ".strip(),"<ctrl>+|","<ctrl>+<shift_l>","<ctrl>+,","<ctrl>+.","<ctrl>+/","<ctrl>+<shift_r>","<ctrl>+<cmd_l>","<ctrl>+<alt_l>","<ctrl>+<space>","<ctrl>+<alt_r>","<ctrl>+<cmd_r>","<ctrl>+<menu>","<ctrl_l>+<ctrl_r>","<ctrl>+<insert>","<ctrl>+<delete>","<ctrl>+<home>","<ctrl>+<end>","<ctrl>+<page_up>","<ctrl>+<page_down>","<ctrl>+<up>","<ctrl>+<down>","<ctrl>+<left>","<ctrl>+<right>","<ctrl>+<print_screen>","<ctrl>+<scroll_lock>","<ctrl>+<pause>","<ctrl>+<num_lock>",# pynput1.7.?不支持小键盘:https://github.com/moses-palmer/pynput/issues/545# 但是可以使用解决方案:https://github.com/moses-palmer/pynput/issues/545#issuecomment-2185323984"<ctrl>+<96>", # 小键盘数字0(96是pynput使用的十进制vk码)"<ctrl>+<105>", # 小键盘数字9"<ctrl>+<106>", # 小键盘*"<ctrl>+<107>", # 小键盘+"<ctrl>+<109>", # 小键盘-"<ctrl>+<110>", # 小键盘."<ctrl>+<111>", # 小键盘/
]# 随机生成快捷键
def generate_random_hotkey():import random# 随机选择一个快捷键字符串random_hotkey_str = random.choice(hotkey_strings)# 检查是否包含单个字符,并随机替换为a到z中的某个字符if '+' in random_hotkey_str:parts = random_hotkey_str.split('+')for i, part in enumerate(parts):if len(part) == 1 and part.isalpha():# 随机选择一个字符random_char = chr(random.randint(ord('a'), ord('z')))parts[i] = random_charelif part.startswith('<f') and part.endswith('>'):# 随机选择一个功能键random_f_key = f"<f{random.randint(1, 12)}>"parts[i] = random_f_keyrandom_hotkey_str = '+'.join(parts)try:# 解析快捷键字符串parsed_hotkey = keyboard.HotKey.parse(random_hotkey_str)print(f"生成的快捷键为: {random_hotkey_str}")return parsed_hotkey, random_hotkey_strexcept ValueError as e:print(f"解析 '{random_hotkey_str}' 失败: {e}")return None, random_hotkey_str# 测试这些快捷键字符串是否合法
def parse_hotkey_strings():# 解析每个快捷键字符串for hotkey_str in hotkey_strings:try:parsed_hotkey = keyboard.HotKey.parse(hotkey_str)print(f"\033[1;32m解析 '{hotkey_str}' 结果为: {parsed_hotkey}\033[0m")except ValueError as e:print(f"\033[1;31m解析 '{hotkey_str}' 失败: {e}\033[0m")# 测试监听小键盘
def test_numpad_hotkey():hotkey_s = '<ctrl>+<105>'def on_activate():print(f"按下了{hotkey_s}")def for_canonical(f):return lambda k: (setattr(k, '_scan', None), f(listener.canonical(k)))hotkey = keyboard.HotKey(keyboard.HotKey.parse(hotkey_s), on_activate)listener = keyboard.Listener(on_press=for_canonical(hotkey.press), on_release=for_canonical(hotkey.release))listener.start()import time;time.sleep(5)listener.stop()listener.join()# 按按键, 输出vk码
def print_vk_on_press():def format_key_info(key):key_info = f" {key}"if hasattr(key, 'char'):key_info += f' char:{key.char}'if hasattr(key, 'vk'):key_info += f' vk:{key.vk}'return key_infodef on_press(key):print(format_key_info(key))def on_release(key):print('{0} released'.format(key))if key == keyboard.Key.esc:import os;os._exit(0) # 强行退出, 因为主线程在睡觉# return Falselistener = keyboard.Listener(on_press=on_press, on_release=on_release)listener.start()import timetime.sleep(10)listener.stop()listener.join()if __name__ == "__main__":pass# 随机生成快捷键字符串for i in range(10):generate_random_hotkey()# 判断快捷键字符串合法性# parse_hotkey_strings()# 测试监听小键盘# test_numpad_hotkey()# 按按键,输出vk码# print_vk_on_press()
相关文章:
选择困难?直接生成pynput快捷键字符串
from pynput import keyboard# 文档:https://pynput.readthedocs.io/en/latest/keyboard.html#monitoring-the-keyboard # 博客(pynput相关源码):https://blog.csdn.net/qq_39124701/article/details/145230331 # 虚拟键码(十六进制):https:/…...
DeepSeek-R1:强化学习驱动的推理模型
1月20日晚,DeepSeek正式发布了全新的推理模型DeepSeek-R1,引起了人工智能领域的广泛关注。该模型在数学、代码生成等高复杂度任务上表现出色,性能对标OpenAI的o1正式版。同时,DeepSeek宣布将DeepSeek-R1以及相关技术报告全面开源。…...
国内优秀的FPGA设计公司主要分布在哪些城市?
近年来,国内FPGA行业发展迅速,随着5G通信、人工智能、大数据等新兴技术的崛起,FPGA设计企业的需求也迎来了爆发式增长。很多技术人才在求职时都会考虑城市的行业分布和发展潜力。因此,国内优秀的FPGA设计公司主要分布在哪些城市&a…...
3.日常英语笔记
screening discrepancies 筛选差异 The team found some screening discrepancies in the data. 团队在数据筛选中发现了些差异。 Don’t tug at it ,or it will fall over and crush you. tug 拉,拽,拖 He tugged the door open with all his might…...
基于RIP的MGRE实验
实验拓扑 实验要求 按照图示配置IP地址配置静态路由协议,搞通公网配置MGRE VPNNHRP的配置配置RIP路由协议来传递两端私网路由测试全网通 实验配置 1、配置IP地址 [R1]int g0/0/0 [R1-GigabitEthernet0/0/0]ip add 15.0.0.1 24 [R1]int LoopBack 0 [R1-LoopBack0]i…...
【开源免费】基于Vue和SpringBoot的美食推荐商城(附论文)
本文项目编号 T 166 ,文末自助获取源码 \color{red}{T166,文末自助获取源码} T166,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...
Pandas DataFrame 拼接、合并和关联
拼接:使用 pd.concat(),可以沿着行或列方向拼接 DataFrame。 合并:使用 pd.merge(),可以根据一个或多个键进行不同类型的合并(左连接、右连接、全连接、内连接)。 关联:使用 join() 方法,通常在设置了索引的 DataFrame 上进行关联操作。 concat拼接 按列拼接 df1 = …...
【Redis】Redis修改连接数参数
1.重启操作背景 Redis数据库连接数上限,需要修改配置文件里maxclients参数,修改后需重启数据库 1.1、修改操作系统open files参数 1.2、修改redis连接数 2.登录操作系统 登录堡垒机 ssh {ip}3.查看当前状态 3.1、查看操作系统配置 ulimit -a3.2、…...
scratch变魔术 2024年12月scratch三级真题 中国电子学会 图形化编程 scratch三级真题和答案解析
目录 scratch变魔术 一、题目要求 1、准备工作 2、功能实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 1、思路分析 2、详细过程 四、程序编写 五、考点分析 六、 推荐资料 1、入门基础 2、蓝桥杯比赛 3、考级资料 4、视频课程 5、py…...
51单片机开发:点阵屏显示数字
实验目标:在8x8的点阵屏上显示数字0。 点阵屏的原理图如下图所示,点阵屏的列接在P0端口,行接在74HC595扩展的DP端口上。 扩展口的使用详见:51单片机开发:IO扩展(串转并)实验-CSDN博客 要让点阵屏显示数字࿰…...
mysql DDL可重入讨论
mysql的bug:当执行 MySQL online DDL 时,期间如有其他并发的 DML 对相同的表进行增量修改,比如 update、insert、insert into … on duplicate key、replace into 等,且增量修改的数据违背唯一约束,那么 DDL 最后都会执…...
DAY01 面向对象回顾、继承、抽象类
学习目标 能够写出类的继承格式public class 子类 extends 父类{}public class Cat extends Animal{} 能够说出继承的特点子类继承父类,就会自动拥有父类非私有的成员 能够说出子类调用父类的成员特点1.子类有使用子类自己的2.子类没有使用,继承自父类的3.子类父类都没有编译报…...
127周一复盘 (165)玩法与难度思考
1.上午测试,小改了点东西, 基本等于啥也没干。 匆忙赶往车站。 从此进入春节期间,没有开发,而思考与设计。 2.火车上思考玩法与难度的问题。 目前的主流作法实际上并不完全符合不同玩家的需求, 对这方面还是要有自…...
【C语言常见概念详解】
目录 -----------------------------------------begin------------------------------------- 什么是C语言: 1. 基本数据类型 2. 变量与常量 3. 运算符与表达式 4. 控制结构 5. 函数 6. 指针 7. 数组与字符串 8. 结构体与联合体 9. 文件操作 结语 ----…...
弹性分组环——RPR技术
高频考点,考查20次: RPR与FDDI一样使用双环结构RPR环中的每一个节点都会执行SRP公平算法(非DPT、MPLS)传统的FDDI环,当源节点成功向目的结点发送一个数据帧后,这个数据帧由源结点从环中回收。但RPR环&#…...
定制Centos镜像
环境准备: 一台最小化安装的干净的系统,这里使用Centos7.9,一个Centos镜像,镜像也使用Centos7.9的。 [rootlocalhost ~]# cat /etc/system-release CentOS Linux release 7.9.2009 (Core) [rootlocalhost ~]# rpm -qa | wc -l 306 [rootloca…...
Java---判断素数的三种方法
我们首先先来了解一下什么是素数 素数:一个整数只能被1和自身整除 , 注意:0与1不是素数 目录 方法一:暴力法 方法二:除二法(优化) 方法三.根号法(最优法) 方法一:暴力法 最简单最暴力的方法就是根据定义,判断n是不是素数,让n除以2到n-1的所有数,只要遇到能除开…...
多级缓存(亿级并发解决方案)
多级缓存(亿级流量(并发)的缓存方案) 传统缓存的问题 传统缓存是请求到达tomcat后,先查询redis,如果未命中则查询数据库,问题如下: (1)请求要经过tomcat处…...
代理模式 - 代理模式的应用
引言 代理模式(Proxy Pattern)是一种结构型设计模式,它允许你提供一个代理对象来控制对另一个对象的访问。代理对象通常会在客户端和目标对象之间起到中介的作用,从而可以在不改变目标对象的情况下,增加额外的功能或控…...
编辑器Vim基本模式和指令 --【Linux基础开发工具】
文章目录 一、编辑器Vim 键盘布局二、Linux编辑器-vim使用三、vim的基本概念正常/普通/命令模式(Normal mode)插入模式(Insert mode)末行模式(last line mode) 四、vim的基本操作五、vim正常模式命令集插入模式从插入模式切换为命令模式移动光标删除文字复制替换撤销上一次操作…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...



