关于autohotkey里面的运行有自动执行的概念,有些代码放在其它地方无法执行,这就是脚本只有一定范围内自动执行,根据脚本的内容脚分为持续状态与非持续状态
先讲一个关于Control/Alt/Shift三键的小问题
单独设置Control/Alt/Shift三个键
单独设置Control/Alt/Shift三个键,直接写是默认弹起时执行
在前面加上~
符号就变成了按下时触发(Control可以替换为Alt或Shift)
Control::SendInput, 在Control弹起时触发
Return~Control::SendInput, 在Control按下时触发
Return
下面这个与上面这个不能同时存在,实际上是属于同名,只是添加了一个原义符,两个触发时机就变了
自动执行段
自动执行段 = 脚本代码在双冒号::
或者Return
或者Exit
之前的段落,看哪个出现在第一个
所以上一章中的ToolTip必须要放在自动执行段内
ToolTip, 脚本已经重启
Sleep, 1000
ToolTip^u::123456
上面这个例子中第一二三四行都属于自动执行段,因为第五行出现了双冒号
脚本的运行状态
脚本的运行状态分为<持续/非持续>
- 一行代码都不写,在启动之后,直接判定为<非持续>,继而脚本直接被终结关闭,可以自行尝试
- 在空脚本中加上#Persistent后,在启动之后,直接判定为<持续>,继而脚本不会自动关闭,可以看到小图标里面还是在运行脚本,进程进面还一直保持运行中,脚本中带上
#Persistent
就会直接判定为执行运行
#Persistent
- 判定为<持续>的条件
- 热键 (例^a:: )
- 热字串 (:🔤:123456789)
- GUI
- 自定义菜单
- 计时器
只要存在以上五种内容,脚本即会判定为持续监听,不会自动关闭
默认设置
自动执行段时若设置以下内容都会改变默认设置,如果没有写则会加载默认设置
功能 | 说明 | 默认值 |
---|---|---|
DetectHiddenWindows | 设置脚本是否可以“看见”隐藏的窗口。 | Off |
DetectHiddenText | 设置在探测窗口时窗口中隐藏的文本是否“可见” | On |
SetTitleMatchMode | 设置在类似 WinWait 命令中 WinTitle 参数的匹配模式。 | 1/fast |
SetBatchLines | 设置脚本的执行速度(影响 CPU 使用率)。 | 10ms |
SendMode | 设置send模式 | Event |
SetKeyDelay | 设置每次 Send 和 ControlSend 发送键击后自动的延时 | 10ms |
SetMouseDelay | 设置每次鼠标移动或点击后自动的延时。 | 10ms |
SetWinDelay | 设置在每次执行窗口命令如 WinActivate后自动的延时。 | 100ms |
SetControlDelay | 设置在每次控件修改命令执行后自动的延时。 | 20ms |
SetDefaultMouseSpeed | 设置在 Click 和 MouseMove/Click/Drag 中没有指定鼠标速度时使用的速度。 | 2ms |
CoordMode | 为多个命令设置坐标模式,相对于活动窗口还是屏幕。 | Screen |
SetStoreCapslockMode | 设置在 Send 后是否恢复 CapsLock 的状态。 | on |
AutoTrim | 设置在 Var1 = %Var2% 这样的语句中进行赋值时是否忽略 Var2 的前导和尾随空格和 tab。 | on |
SetFormat | 设置数学运算得到的整数和浮点数的格式。 | 十进制/6位小数 |
StringCaseSense | 设置在字符串比较中是否区分大小写(默认为“不区分大小写”)。 | off |
Thread | 设置线程的优先级或是否可以被中断。它也可以临时禁用所有的计时器。 | - |
Critical | 防止当前线程被其他线程中断。 | on |
避坑: 必须转义与末尾注释
-
逗号和百分号必须转义
由于逗号和百分号具有特殊含义,因此需要使用`, 指定原义逗号,使用 `% 指定原义百分号 -
末尾注释
末尾注释必须有空格或者TAB 如
不可以直接在notepad后直接带分号,这样是不许可的,必须带上- TAB
- 空格
Run Notepad ; 这是和命令在同一行的注释.
代码折行
用一个例子解释代码折行
if (1 = 2or 2 = 2and ( 1+1=2 )?True:false)
{
str =
(
这是第一行
这是第二行
这是第三行 `n这是第四行
)MsgBox, 1,提示, %str%, 10
}
像上面这样子的代码也是可以的,支持折行的开头代码有以下
or
(逻辑运算符或)and
(逻辑运算符和)?
(三目运算符):
(三目运算符),
(逗号参数分隔符)(
(大段文字括号符)- 略