中断命令
让脚本随时停止运行的命令
EndScript
ExitScript
EndScript(脚本停止运行)
除了F12可以让脚本停止运行,还可以用EndScript
打开记事本,当运行这段代码时
keypress “1”,1
delay 100
keypress “2”,1
delay 100
EndScript //到这里就结束运行了,结果为12
keypress “3”,1
ExitScript (退出脚本)
虽然EndScript和ExitScript都可以停止脚本,但是
EndScript只能停止当前线程
而ExitScript可以停止整个脚本
运行以下代码
beginthread 多线程//这是一个启动多线程的命令
delay 1000
tranceprint “主脚本”
exitscript//结果从线程到主脚本就结束进程
//endscript//若换成endscript,从线程到主脚本后,会继续执行线程
tranceprint “停止脚本”
sub 多线程()//这是一个多线程
do
tranceprint “线程” & i
delay 200
loop
end sub
RestartScript(重启脚本运行)
可以重启脚本,让脚本从头执行
运行以下代码
for i=0 to 2
delay 1000
tranceprint “内容” & i
next
restartscrip//重启脚本,运行结果不会再执行脚本结束,会不断重复0 1 2……
tranceprint “脚本结束”
(Sub)子程序
一个脚本内容相同或相似,或者把一个大的分解成若干个子任务。
以上情况可以单独写成子程序,然后再调用,调用完后,会自动回到调用处,然后继续往下执行。
子程序如果不被调用,是不会被执行的
子程序可以互相调用
语法格式:
Sub 子程序名(参数列表)
脚本代码
End Sub
调用子程序:
Call 子程序名(参数列表)//如果没有这个,子程序是不会被执行的
1.不带参数的子程序
参数,每个参数都是用逗号隔开,这些参数叫形参,仅仅只是当前的子程序,如果传进来的叫实参
例如ifcolor中的一个补血脚本,在完整脚本中,补血只是一个小功能,所以可以把补血放倒一个子程序中。
call 自动补血()//从这里跳到自动补血里
tranceprint “调用自动补血完成”
sub 自动补血()
ifclolr 1289,281,“B9A05E”,0, then
messagebox “颜色等于”
else
messagebox"颜色不等于"
end if
end sub//执行完后会回到call后面
2.带参数的子程序
可以往子程序里传递参数
例如下列代码
x=1
y=2
call 子程序(x,y)//x对应a,y对应b,一一对应,不能多写,也不能少写
sub 子程序(a,b)//a和b是参数,是形参,也就是说,只有当在子程序内的时候才会显示的
tranceprint “a=” & a
tranceprint “b=” & b
end sub
从上面运行的脚本来看,实参x的值传递给了形参a,实参y的值传递给了形参b,所以a的值是1,b的值是2.
当实参的值传递给了形参后,形参再如何改变,实参都不会改变&
例如下列交换变量的值的例子
x=1
y=2
call 交换变量的值(x,y)//实参
sub 交换变量的值(x,y)//此x,y非彼x,y,这里是形参
z=x
x=y
y=z
tranceprint “交换后,形参x=” & x
tranceprint “交换后,形参y=” & y
end sub
上面可以看出,子程序里x,y交换了,主脚本中仍然是原值
call互相调用子程序时,有时会死循环,可能使脚本崩溃
因为每次调用子程序都会用一段内存来保存未执行的部分,所以内存会占用越来越多,最终导致崩溃
比如以下代码:
call a()
sub a()
call b()
tranceprint “a”//被保存到内存里,被循环调用,被循环保存
end sub
call a()
tranceprint “b”//被保存到内存里
end sub
Function(函数)
函数和子程序类似,唯一不同的就是,函数要有返回值
语法格式:
Function 函数名(形参)
脚本代码
End Function
例如下列代码
和=加法(1,2)//加法是一个函数
tranceprint “1+2=” & 和
function 加法(a,b)
加法=a+b//这是一个返回值的写法
end function