共计 1200 个字符,预计需要花费 3 分钟才能阅读完成。
_AB014-[番外篇] AHK 中的 HotKey 变体_
代码讨论
长岛的雪:
如果两个语境约束之间冲突,那么该如何解决?
心如止水:
我也遇到过,印象中帮助中有说过,不记得了
如果是我的话,我会在语境约束的表达式中,加入更多限定条件,虽然写起来繁琐,但是还是能用的
虚荣:
我一般是用 ~ + if else 进行判断
思考 1:HotKey 变体的覆盖规则到底是怎么样的?
如果使用 ” 语境约束 ”,也就是 #if,那么规则很简单
全局热键优先级最低
非全局热键,靠近脚本顶部优先级越高
如果使用 HotKey 命令中的子命令
全局热键优先级最低
非全局热键,先执行的优先级高
其实第二条,两者可以说是一回事,因为 #if 是在编译的时候就生效的,所以在脚本中出现的顺序也就是执行的顺序,所以第二条其实就是:先执行的优先级高.
#ifWin 一般说明
Hotkey:变体 (副本) 热键
思考 2:语境约束的原理
语境约束其实就是计算表达式,如果表达式正确,那么热键生效,反之则不生效.
所以,其实 波浪号 +if else 表达式 和语境约束,原理应该是类似的. 区别应该只在于可读性
在帮助文档中也找到了相关的说明,其实现方式就是在热键被按下之前,由 AHK 脚本 进行表达式计算.
不过,区别当然不是 ” 仅在于 ” 可读性,如果使用波浪线,那么原来就有的热键不会被覆盖.
思考 3:直觉和习惯
在大多数情况下,语境约束的方法,都会有更好的可读性
这样我们就能看清楚,在某一个条件下 (比如在 SciTE 窗口存在的条件下),所有的热键是什么,有什么关联操作
但是,万一出现了变体冲突的情况,调整起来会非常麻烦,写起来会非常繁琐
一般是不会遇到这种情况的,因为官方把全局的优先级降到了最低
但在使用 GetKeyState 的时候,就经常遇到
我们希望 #if GetKeyState() 优先级最低,但我们习惯把简单的式子放在上面,所以就会出 BUG.
End
心如止水是 Java/AHK 持续学习者,欢迎您来和我探讨 Java/AHK 问题 ^_^
GitHub
欢迎您来访问我的 GitHub,在这里您可以看到我的代码分享,关注我的最新动态。
欢迎给 新生的 BeanLib 投稿,每一位贡献者的名字都将被铭记。
更多文章:
[专栏] AHK 程序设计 – 简书 (优先持续更新)
[基础] [GIF 动图] 绕过中文输入法发送文本的 3 种方法
[基础] AHK 函数对象系列 - 绑定函数对象 v3
[基础] AHK 函数对象系列 - 绑定方法对象
[基础] 在 AHK 中实现函数重载的效果
[基础] AHK 函数对象系列 - 对象属性与数据域保护 v2
问题解答:
[问题解答] 示例不能运行吗? – 关于 AHK 程序设计系列文章示例问题的解释
版权声明:
该文章版权系“心如止水”所有,欢迎分享、转发,但如需转载,请联系 QQ:3404624865,得到许可并标明出处和原链接后方可转载。未经授权,禁止转载。版权所有 ©心如止水 保留一切权利。
文章版本:
v1v2 : 波浪线和语境约束是不一样的,想错了,更正
AHK 版本:1.1.30.00