[番外篇] AHK中的HotKey变体

# [番外篇] AHK中的HotKey变体
AB014-[番外篇] AHK中的HotKey变体

代码讨论

长岛的雪:

如果两个语境约束之间冲突,那么该如何解决?

代码讨论

心如止水:

我也遇到过,印象中帮助中有说过,不记得了

如果是我的话,我会在语境约束的表达式中,加入更多限定条件,虽然写起来繁琐,但是还是能用的

虚荣:

我一般是用 ~ + if else 进行判断

思考1:HotKey 变体的覆盖规则到底是怎么样的?

如果使用"语境约束",也就是#if,那么规则很简单

  1. 全局热键优先级最低
  2. 非全局热键,靠近脚本顶部优先级越高

如果使用 HotKey 命令中的子命令

  1. 全局热键优先级最低
  2. 非全局热键,先执行的优先级高

其实第二条,两者可以说是一回事,因为#if是在编译的时候就生效的,所以在脚本中出现的顺序也就是执行的顺序,所以第二条其实就是:先执行的优先级高.

#ifWin 一般说明

Hotkey:变体(副本) 热键

思考2:语境约束的原理和波浪号

其实现方式就是在热键被按下之前,由 AHK脚本 进行表达式计算.

所以,这两种写法其实基本上可以看成等价的


#InputLevel 1
~^l::

if (WinExist("itmz") AND WinActive("SciTE"))
    println("OK2")

else if(WinExist("itmz"))
    println("OK")

else
Send,^l

return
#If WinExist("itmz")
^l::
println("OK2")
return
#If 

#If WinExist("itmz") AND WinActive("SciTE")
^l::
println("OK")
return
#If 

如果加了波浪号反而不对

思考3:直觉和习惯

在大多数情况下,语境约束的方法,都会有更好的可读性

这样我们就能看清楚,在某一个条件下(比如在 SciTE 窗口存在的条件下),所有的热键是什么,有什么关联操作

但是,万一出现了变体冲突的情况,调整起来会非常麻烦,写起来会非常繁琐

一般是不会遇到这种情况的,因为官方把全局的优先级降到了最低

但在使用 GetKeyState 的时候,就经常遇到

我们希望 #if GetKeyState() 优先级最低,但我们习惯把简单的式子放在上面,所以就会出BUG.

这个时候就可以用普通的热键+if else 效果反而更好

End

心如止水是Java/AHK持续学习者,欢迎您来和我探讨Java/AHK问题 ^_^

GitHub

欢迎您来访问我的GitHub,在这里您可以看到我的代码分享,关注我的最新动态。

欢迎给 新生的 BeanLib 投稿,每一位贡献者的名字都将被铭记。

更多文章:

问题解答:

[问题解答] 示例不能运行吗? - 关于AHK程序设计系列文章示例问题的解释

版权声明:

该文章版权系“心如止水”所有,欢迎分享、转发,但如需转载,请联系QQ:3404624865,得到许可并标明出处和原链接后方可转载。未经授权,禁止转载。版权所有 ©心如止水 保留一切权利。

文章版本:

v1
v2 : 波浪线和语境约束是不一样的,想错了,更正
v3:增加示例

AHK版本:1.1.30.00

心如止水

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值