上手AHK之前你所需要知道的事

简介

AutoHotkey是一门开源诞生了二十年的脚本语言。随着时间不断地发展,AHK不仅在按键映射修改上做到了可自定义的极致,还在文档图像、操作系统控制、网页、游戏自动化方面得到广大爱好者的深耕运用。其开源社区二十年的发展过程中所累积的问题解决方案,能解决你在日常所能遇到的绝大部分问题。
 
AHK1MB大小的解释器实现了可免安装部署即写即用的特性,让它成为轻便化万金油解决问题的利器。 因为AHK的开源发展具有语法向前兼容和不断增加功能语法等特点,这使得它可以兼容二十年来互联网上累积的大量代码库和解决示例【更多需要英文搜索】。但也造成了新旧语法共存用法混乱的问题。
 
以下就简单解释一下,AHKv1版,传统命令式语法和函数表达式的语法不同之处和区分方法。避免不必要的困扰

早期市面上编程语言标准未成熟时,多半都是用的传统文本赋值命令式语句指令来编写流程,这并不符合现代主流语言函数表达式的编程习惯。以下仅指出如何分辨这两种写法的区别,有助于更好理解这门语言的特性。

一、 变量的传统文本赋值 与 表达式文本赋值

1.变量以传统文本赋值与if判断(用 = 赋值,if 不加括号传统式字符串比较判断)
a = 内容a          ; --> 在名为 a 的变量中,用 = 赋值字符串 内容a。

if a = 内容a       ; --> 判断变量 a 的值是否等于字符串 内容a,如果相同则执行花括号的代码
{                        ; --> 以下弹窗显示内容为:"传统命令式显示变量写法:内容a"
    MsgBox, 传统命令式显示变量写法:%a%
}
2.变量以表达式文本赋值与if判断(用 := 赋值,if 加括号表达式字符串比较判断)
a := "内容a"        ; --> 在名为 a 的变量中,用 := 赋值字符串 内容a。(表达式的字符串需要双引号定义)

if (a = "内容a")    ; --> 判断变量 a 的值是否等于双引号中的字符串 内容a,如果相同则执行花括号的代码
{                       ; --> 先在开头用 % 转为强制表达式,以下弹窗显示内容为:"表达式显示变量写法:内容a"
    MsgBox, % "表达式显示变量写法:" a
}
可以看出以上两个示例效果是等效的,只是写法不同而已。再继续看下一组等效示例进一步解释问题

二、 变量的传统赋值判断 与 表达式赋值判断

1.变量以传统赋值与if 变量判断(用 = 赋值,if 不加括号传统式进行变量比较判断)
b = 内容b       ; --> 在名为 b 的变量中,用 = 赋值字符串 内容b。
c = %b%       ; --> 在名为 c 的变量中,用 = 赋值变量 b 的内容。使变量 c 与变量 b 内容相同

if b = %c%     ; --> 判断变量 b 的值与变量 c 的值是否相同,如果相同则执行花括号的代码
{                     ; --> 以下弹窗传统的混合赋值显示内容为:"变量b:内容b - 变量c:内容b"
    MsgBox, 变量b:%b% - 变量c:%c%
}
2.变量以表达式赋值与if 变量判断(用 := 赋值,if 加括号表达式进行变量比较判断)
b := "内容b"   ; --> 在名为 b 的变量中,用 := 赋值字符串 内容b。(表达式的字符串需要双引号定义)
c := b             ; --> 在名为 c 的变量中,用 := 赋值变量 b 的内容。使变量 c 与变量 b 内容相同

if (b = c)       ; --> 判断变量 b 的值与变量 c 的值是否相同,如果相同则执行花括号的代码
{                   ; --> 先在开头用 % 转为强制表达式,以下弹窗显示内容为:"变量b:内容b - 变量c:内容b"
    MsgBox, % "变量b:" b " - 变量c:" c
}
这一组例子可以明显看出,传统赋值表达式赋值的写法差异。
另外是在2号例子的MsgBox弹窗中,在开头用 % 转为强制表达式意义是:只有强制表达式才能做表达式运算
正确表达式直接运算示例:MsgBox, % "1+2的计算结果:" 1+2
 
错误示例:MsgBox, 1+2的计算结果:%1%+%2%
错误原因是:传统命令式因为是默认强制字符串,是无法直接运算的。必须转表达式才能运算
 
AHKv1版中,大部分是以命令式存在的。如:Run、Loop参数、MsgBox等,这些命令为默认强制传统式
需要运算就得开头用 % 转为强制表达式再直接运算。而StrReplace()、FileExist()、SubStr()函数式命令
参数都是默认表达式写法,后面带()函数式命令只能用表达式书写,无法转为传统式
 
以上就是使用AHKv1时,你需要特别注意的事。只要能够区分历史遗留语法,你将能用AHK解决很多问题
 
更多语法参考帮助:详见中文帮助文档介绍
 
题外话:AHKv2改成了全函数式语法,但是不再兼容v1。是一个全新的版本分支。因为v2强语法报错缺乏函数库同步更新与生态累积,使得非程序员v2解决问题时,缺少参考系答案。不是很在意语法的同学建议还是用v1解决问题吧。PS:对于开发者来说v2更现代,对于使用者来说v1更自由。
 
题外话2:AHK是可以用中文变量名函数名,让AHK正常显示中文需要让.ahk文件以 UTF-8-BOM 编码保存
 

实用脚本以及辅助工具

FindText 屏幕找图找字的自动化神器:能实现当屏幕出现某图案时,就做对应自动化等操作
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值