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——>不同软件元素n——> 功能

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

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

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值