AutoHotkey ---- 统一所有软件的快捷键(分析篇)

news2024/12/23 20:43:06

文章目录

  • 引言
    • 理论
    • 编程方案

引言

快捷键大家都不陌生.但是目前的快捷键普遍存在以下几个问题。

  1. 不统一,即word、ppt、浏览器、各种编辑器、邮件客户端等等,都有属于自己的一套快捷键。
  2. 快捷键冲突,即不同软件使用了相同的快捷键,而且作用域是全局的。
  3. 软件设计混乱,许多软件的快捷键设计并没有过多的思考,纯粹是给个按键让用用户使用,不考虑人性化问题。特别是一些软件为了避免快捷键冲突,设置一些反人类的三键触发。
  4. 自定义设计混乱,AutoHotkey的爱好者或者初学者不少,但是在设计快捷键的时候都和前面说的一样。想到一个功能,就找一个还没有用的快捷键组合来触发。久而久之,要嘛忘了快捷键和功能的对应关系,要嘛压根就忘了这个快捷键。

上述几个问题的现象我统称为“快捷键灾难”,包括快捷键饱和以及无组织结构的快捷键设计关系。

“统一各个软件的快捷键” 这个想法估计很多接触AutoHotkey的编程人员都有过。AutoHotkey中文社区里面的啊让在日记中便有所提及。

那么,使用AutoHotkey到底能不能统一大部分软件的快捷键,答案是肯定的,但是在代码工程上设计上需要有一定的技巧。

稍微了解过AutoHotkey的都知道,AutoHotkey可以在每个代码脚本的开头设置快捷键的软件作用域,即,该脚本的快捷键仅在指定的软件中使用。通过为不同的软件独立编写一个快捷键管理脚本,似乎也能达到我们所要的目的。但是很遗憾,这种方式实际操作起来不出5个软件,且在多次调整后,你就会忘了各个软件的快捷键之间的关系了。

理论

我的博士研究课题是关于假肢手的控制问题,即解决如何让假肢手知道人的控制意图。而解决该问题的思路有两种,第一 拓宽人机带宽,第二,提高假手的智能性。

这与快捷键设计有什么毛线关系吗,有的。快捷键本质上就是人如何控制电脑的问题。 电脑和假肢一样是一台机器。那么相应的思路一:增加人机宽带,有4种方案。

第一方案:物理层面上可以给电脑配备更多的按键,例如部分鼠标具有多个按钮就是一个典型案例,但是显然帮助有限;

第二方案:识别更多的人机交互组合,即增加按键的组合逻辑关系,也就是增加更多的快捷键,这是大部分人常用的。比如设置三键触发,冷门的按键等等。
这种方法由于使用了非优质快捷键,很容易在具体的使用中直接被习惯性的淘汰。

优质快捷键:指的是操作舒服的快捷键,特别是左手单独可以舒服触发的。例如 shift+w 或者 shift+e这类。(自己定义的,没有标准,存在个体差异)

第三方案:引入时间特征,例如按一次快捷键,二次快捷键触发不同的功能。就像摩斯码一样。 这种方式存在触发慢、触发不稳定、不自然等问题。

第四方案:有限状态机,常见于部分爱好者在方向键上的控制。就是把键盘字母分为 “文本输入” 和“控制命令”两种状态,通过修饰符在两种状态下进行切换,例如shift +alt 进行切换。 这种方案可以让已有的人机接口翻倍,多一个状态,就多一组人机接口。但是操作慢(个人觉得),记忆容易混乱。能够增加的带宽十分有限,原因仍在于优质快捷键本身不多。

那么,提高电脑的智能性便是唯一的选择和出路。

也就是说,在键盘不可变的情况下,在优质快捷键数量固定的情况下,要提高电脑的智能性。

提高电脑的智能性是什么意思?跟现在的AI有关系?还是? 其实没有那么高级,就是让你的电脑知道你当前操作的上下文是什么。还是不理解对不对,大白话来讲,就是让电脑知道你现在是在word软件还是在ppt软件, 如果是在ppt 软件, 你选中的是文本,还是选中的图片; 如果是在word里面,要知道你是否选了文字,选中的是单词,但是句子,还是段落。

编程方案

那么引言中所提到的编程技巧指的是什么?就是从编程角度说,我们是要面向快捷键编程、面向软件编程还是面向功能编程。答案是面向快捷键编程,为什么,因为快捷键是可数可列的,且优质快捷键就只有常用的那些; 而功能是无穷尽的,新的软件,新的需求,是无法穷尽的。前面提到的“快捷键灾难”就是因为大家是面向功能来设计快捷键而导致的。
那么什么是面向快捷键编程,可以看下面的代码。

$!r::
	{
		if func_在这个程序中(soft_东方财富)
		{
				SendInput ,96
				SendInput ,{Enter}
				return
		}
		if func_在这个程序中(soft_ahk编辑器)
		{
			ahkFuc_运行程序()
			return
		}
		if func_在这个程序中(soft_python编辑器)
		{
			SendInput,^{Enter}
			return
		}
		if func_在这个程序中(soft_edge浏览器)
		{
			func_个性化提示("刷新页面",1000)
			SendInput,^r
			return
		}
		if func_在这个程序中(soft_word软件)
		{
			func_个性化提示("已更新编辑域",3000)
			SendInput,{F9}
			return
		}
		if func_在这个程序中(soft_自用资源管理器)
		{
			SendInput,{F2}
			return
		}	
		return
	}

这代码有什么特殊吗,其实就是在代码组织上是按照以下的是逻辑关系设计的。

快捷键——>不同软件——>不同软件元素1——>不同软件元素n——> 功能

而不是
不同软件——>快捷键——>功能

所以我把这个程序分为人机接口层(按键层),软件层,通用层。在代码组织上如下图:
在这里插入图片描述
图中的第一行、第二行脚本指的就是键盘第一行、第二行字母的快捷键。
qwer....op

--------------- 2023-09-30 未完待续 ---------------

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

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

相关文章

GNN PyG~torch_geometric 学习理解

目录 1. PyG Introduction 2. PyG Installation 2.1 PyG 安装常见错误及原因 2.2 PyG 具体安装步骤 3. torch_geometric packages torch_geometric.data.Data Dataset 与 DataLoader Dropout、BatchNorm 3. torch_geometric: 理解edge_index 3.1 理解 mini-batch edg…

[H5动画制作系列]帧代码运行顺序测试

刚开始接触Animate CC(过去叫:Flash),对于帧代码的执行顺序十分迷惑。所以,专门做一个简单代码顺序测试. 准备工作: 代码图层actions,第1帧和第10帧为关键帧。 背景图层bg,就一个字符串红色Test.界面如下: 代码测试步骤: 第1帧参考代码如下: 第10帧参考代码如下: …

​68条萝卜刀《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书

​68条萝卜刀《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书 ​68条萝卜刀《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书

打包python模块代码到pypi

python中,我们会在自己业务中,重复性的使用某些功能。我们可以把这些公用的模块,打包上传,然后给需要的人使用,pypi给我们提供了这个机会 本期目录 一、准备工作 二、编写文件 三、上传下载 一、准备工作 1、需要git…

k8s实战案例之部署Nginx+Tomcat+NFS实现动静分离

1、基于镜像分层构建及自定义镜像运行Nginx及Java服务并基于NFS实现动静分离 1.1、业务镜像设计规划 根据业务的不同,我们可以导入官方基础镜像,在官方基础镜像的基础上自定义需要用的工具和环境,然后构建成自定义出自定义基础镜像,后续再基于自定义基础镜像,来构建不同服…

软件测试之Python基础学习

目录 一、Python基础 Python简介、环境搭建及包管理 Python简介 环境搭建 包管理 Python基本语法 缩进(Python有非常严格的要求) 一行多条语句 断行 注释 变量 基本数据类型(6种) 1. 数字Number 2. 字符串String 3. 列表List 4. 元组Tuple 序列相关操作方法 …

Unity 鼠标悬浮时文本滚动(Text Mesh Pro)

效果 直接将脚本挂载在Text Mesh Pro上,但是需要滚动的文本必须在Scroll View中,否侧会定位错误,还需要给Scroll View中看需求添加垂直或者水平布局的组件 代码 using System.Collections; using System.Collections.Generic; using UnityE…

【生物信息学】使用谱聚类(Spectral Clustering)算法进行聚类分析

目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 3. IDE 三、实验内容 0. 导入必要的工具 1. 生成测试数据 2. 绘制初始数据分布图 3. 循环尝试不同的参数组合并计算聚类效果 4. 输出最佳参数组合 5. 绘制最佳聚类结果图 6. 代码整合 一、实验介绍…

【BLIP/BLIP2/InstructBLIP】一篇文章快速了解BLIP系列(附代码讲解说明)

文章目录 BLIP系列1. BLIP1.1 动机1.2 整体架构1.3 损失函数1.4 Captioning and Filtering(CapFilt)1.4.1 Why?1.4.2 方法 2. BLIP22.1 Q-Former的设计2.2 实现功能2.2.1 图像文本检索(Image-Text Retrieval)2.2.2 图像字幕(Image Captioning)2.2.3 视觉问答(VQA)2.…

1. Flink程序打Jar包

文章目录 步骤注意事项 步骤 用 maven 打 jar 包&#xff0c;需要在 pom.xml 文件中添加打包插件依赖 <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><ver…

Python绘图系统24:绘图类型和坐标映射的关系

文章目录 类别与轴数坐标类别对映射的影像绘图类别对坐标轴的影响源代码 Python绘图系统&#xff1a; 前置源码&#xff1a; Python打造动态绘图系统&#x1f4c8;一 三维绘图系统 &#x1f4c8;二 多图绘制系统&#x1f4c8;三 坐 标 轴 定 制&#x1f4c8;四 定制绘图风格 &a…

CV面试知识点总结

一.卷积操作和图像处理中的中值滤波操作有什么区别&#xff1f; 1.1卷积操作 卷积操作是一种线性操作&#xff0c;通常用于特征的提取&#xff0c;通过卷积核的加权求和来得到新的像素值。1.2中值滤波 原文&#xff1a; https://blog.csdn.net/weixin_51571728/article/detai…

英飞凌Tricore原理及应用介绍06_系统定时器(STM)模块详解

目录 1.概述2 STM外设基本介绍3. STM模块使用原理3.1 64位数据如何同步读取?3.2 比较寄存器的原理?1.概述 STM全称为System Timer即系统定时器模块,在英飞凌Tricore芯片中,每个单独的CPU操作系统中配备一个系统定时器,为其操作系统程序调度提供时钟基础,在整个大系统中,…

【day9.30】消息队列实现进程间通信

write.c linuxlinux:~/23062/930$ cat write.c #include<myhead.h>#define ERR_MSG(msg) do{\fprintf(stderr, "__%d__:", __LINE__); \perror(msg);\ }while(0)typedef struct {long msgtype; //消息类型char data[1024]; //消息正文 }Msg_s;#define SIZ…

Java单链表

链表的介绍&#xff1a; 1) 链表是以节点的方式来储存的&#xff0c;是链式存储结构 2&#xff09;每个节点包含data域和next域&#xff0c;next域指向下一个节点 3&#xff09;链表内存储的元素不一定连续 4&#xff09;链表分带头节点的链表和不带头节点的链表 ​​​​ …

[论文笔记]UNILM

引言 今天带来论文Unified Language Model Pre-training for Natural Language Understanding and Generation的笔记,论文标题是 统一预训练语言模型用于自然语言理解和生成。 本篇工作提出了一个新的统一预训练语言模型(Unifield pre-trained Language Model,UniLM),可以同…

中间件漏洞靶场复现

一、简介 1.tomcat弱口令复现 通过弱口令复现的靶场复现&#xff0c;进一步熟悉了burpsuite的使用&#xff0c;冰蝎的使用以及爆破和木马生成waf上传的技术。 登陆到页面&#xff0c;先使用burpsuite对登陆进行拦截抓包&#xff0c;对参数进行修改破解爆破出密码。接着使用冰蝎…

【新书推荐】人工智能的当下,测试团队如何敏捷转型 —— 无测试组织

文章目录 〇、引子一、什么是“无测试组织”&#xff1f;二、无测试组织适用于哪些场景&#xff1f;三、无测试组织还有哪些优势或特点&#xff1f;新书推荐 —— 《**无测试组织&#xff1a;测试团队的敏捷转型** 》 〇、引子 初次看到“无测试组织”的朋友可能会觉得有标题党…

picoctf_2018_can_you_gets_me

picoctf_2018_can_you_gets_me Arch: i386-32-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x8048000)32位&#xff0c;只开了NX 拿到这么大的程序&#xff0c;直接ROPchain看看 #!/usr/bin/env python2# execve …

基于SpringBoot的校园点餐系统

基于SpringBoot的校园点餐系统的设计与实现&#xff0c;前后端分离 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatisVue工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 【主要功能】 角色&#xff1a;用户、管理员 用户前台&#xff1a;…