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


    点赞是白嫖的基本礼仪.
    捐赠是白嫖的道德标杆.
    鉴于你我都是穷学生.
    所以保持基本礼仪,给个点赞就好.

    引言

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

    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

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

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

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

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

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

  • 相关阅读:
    2023最新软件测试面试题大全(包含答案)
    【Vue】使用vue-cli搭建SPA项目的路由,嵌套路由
    Python爬虫-requests.exceptions.SSLError: HTTPSConnectionPool疑难杂症解决(1)
    二分查找--C++实现
    “集世界精华·展中国风采”2024北京智能科技展会(世亚智博会)
    python机器学习入门之pandas的使用(超详细,必看)
    C语言基础篇 —— 3-2 一文秒懂函数指针
    设备通信盒更新硬件和软件后,无法控制床
    计算机毕业设计Java奥利给共享自习室系统(源码+系统+mysql数据库+lw文档)
    Python 学习之路 03 之循环
  • 原文地址:https://blog.csdn.net/scy261983626/article/details/133420950