AutoHotkey中If与If(...)的差异及代码异常问题咨询
AutoHotkey中
If与If(...)的区别及你的代码问题解决 我来帮你拆解清楚这两种If的核心差异,以及你代码失效的原因:
一、两种If的本质区别
AutoHotkey里的这两种If,对应了两种完全不同的语法体系:
- 普通
If(命令式语法):这是AHK早期的传统语法,结构是If [变量] [比较符] [值],比较符两边需要加空格,字符串值不需要加引号(除非包含空格/特殊字符),变量直接写名称即可。 If(...)(表达式语法):这是更贴近主流编程语言的语法,括号里是完整的表达式,字符串必须用引号括起来,变量直接引用,比较符两边的空格可选,支持更复杂的逻辑运算。
二、你的代码为什么失效?
你第一段代码里的问题出在If (Key=T)这一行:
在表达式语法的If(...)里,未加引号的T会被当作变量名,而你并没有定义过名为T的变量,所以它的值是空字符串。此时Key是你输入的字符"T",空字符串和"T"不相等,条件自然不成立,FormatTime也就不会执行,TimeString保持空值,所以没有输出。
而你第二段能正常运行的代码,应该是用了传统的If语法,比如If Key = T——在这种语法里,T会被直接当作字符串处理,和Key的输入值匹配,条件成立,所以TimeString能被正确赋值。
三、修正后的代码
把第一段代码里的条件判断改成表达式语法的正确写法(给T加引号),就能正常运行了:
CapsLock & T:: Input Key, L1 If (Key = "T") { FormatTime, TimeString,, HHmm } Send %TimeString% return
补充几个关键细节
- 在表达式语法中,
=和==都可以用来做比较(效果一致),但如果要赋值必须用:=;而传统语法里=就是比较,赋值用=或者:=都可以(不推荐混用)。 - 传统
If的比较是不区分大小写的(默认设置下),而表达式语法的=比较默认区分大小写,如果需要不区分,可以用If (Key = "t")或者If (StrLower(Key) = "t"),或者修改AHK的StringCaseSense设置。
内容的提问来源于stack exchange,提问作者LosManos
相关产品推荐
相关产品推荐

