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