本文件列举了脚本大师(Script Expert)所有内置函数的用法和说明。
(注：此函数列表不包含插件函数，如需了解插件函数，请参看插件附带的说明文件)

::Halt
procedure Halt();
停止当前脚本的执行
注意，一旦在脚本中执行此函数，不管是正在子程序还是在主程序，也不管是否处于循环中，脚本都会立刻停止，就像按了停止热键一样。
举例：do Halt()

::DebugMsg
procedure DebugMsg(Msg:string);
发送一条调试信息，该信息必须使用SE_Debug附带的DebugTools.exe来接收查看。
注意，该调试信息的发送无论是否被接收到，都不会影响脚本的正常执行。
此函数原为独立插件SE_Debug，现在集成至主程序中。
举例：do DebugMsg("test message")

::Calc
function Calc(ExpStr:string):value
对ExpStr这个表达式进行计算，返回结算结果
ExpStr: 字符串表达式
注意：ExpStr表达式字符串中，可以使用当前脚本中已经定义并可用的任何变量。
举例：
var a=19
do ShowMsg(Calc("a+2+3"))  - > 返回值应当显示为24

::VBSCall
function VBSCall(FunctionName:string; Param1; Param2; Param3; ...):value
呼叫脚本大师内嵌的VBScript函数或子程序，返回值为VBScript函数返回值。
FunctionName: 表示VBScript函数名
Param1,Param2,... : 表示VBScript函数所需的若干个参数。
举例： set s=VBSCall("Test","a","b")  -> 调用VBScript函数Test,其参数为"a"和"b"

::JSCall
function JSCall(FunctionName:string; Param1; Param2; Param3; ...):value
呼叫脚本大师内嵌的JavaScript函数或子程序，返回值为JavaScript函数返回值。
FunctionName: 表示JavaScript函数名
Param1,Param2,... : 表示JavaScript函数所需的若干个参数。
举例： set s=JSCall("Test","a","b")  -> 调用JavaScript函数Test,其参数为"a"和"b"

::CaptureBmp
procedure CaptureBmp(h:HWND; x1:integer; y1:integer; x2:integer; y2:integer; BmpFile:string);
将指定窗口的指定范围截取下来保存为bmp图片文件。此函数可支持后台截图。
h: 需要截取图片的窗口句柄，如果为0，则表示在全屏幕坐标范围进行截图。
(x1,y1): 需要截图的范围左上角坐标，h=0时需使用屏幕坐标，否则使用窗口内相对坐标。
(x2,y2): 需要截图的范围右下角坐标，h=0时需使用屏幕坐标，否则使用窗口内相对坐标。
BmpFile: 截图后保存的文件名。
举例：do CaptureBmp(0,100,100,200,200,"Test.bmp")

::RunProcess
function RunProcess(CmdLine:string; Wait:integer): integer;
执行外部程序，可以用来执行程序、打开文档或打开网址等，功能与Windows的开始->运行一致。
CmdLine: 表示要运行的外部程序名，可以是一个程序(支持带命令行参数)，也可以是一条网址(自动调用默认浏览器)，或者也可以是文档文件(自动调用相关联的程序来打开)
Wait: 表示是否需要等待程序执行完毕，wait=1表示等待程序执行完毕，wait=0表示不等待程序执行完毕，此参数仅在CmdLine为一个程序时有效，如果CmdLine为网址或文档等非可执行文件，则此参数自动忽略。
返回值: 当Wait=0或者CmdLine不是程序时，返回已经打开的程序的句柄，否则总是返回0
举例：do RunProcess("ping 127.0.0.1 > c:\1.txt", 1)  -> 调用ping命令测试ip地址是否被使用，等待ping命令执行完毕，测试结果保存在c:\1.txt文件中
      do RunProcess("c:\1.txt",0)                      -> 调用Notepad.exe打开1.txt文件，如果不存在，则自动创建

::IF
function If(Exp1; Exp2; Exp3): Variant;
根据Exp1的值，来判断返回哪个值，当Exp1为逻辑“真”时，返回值为Exp2，否则返回Exp3
Exp1应当为逻辑判断语句, Exp2,Exp3及返回值为任意类型的数值(包括整数、浮点数或字符串等)
If语句的使用与Excel中if公式的用法一致，并且可以任意嵌套，灵活应用可简化某些代码
举例：
set x=If(If(3>2,1,0)>0,if(4>5,2,3),if(7=7,7,"123"))  ->  返回值为 3

::NetSend
procedure NetSend(Addr:string; Port:integer; Msg:string);
通过TCP/IP网络，向指定的地址(Addr)的计算机的指定端口Port发送消息
Addr可以为域名或IP地址
Port为远端计算机的端口
Msg为需要发送的消息字符串
注：通过此函数发送的消息，必须对端计算机上也运行了脚本大师程序，并且需要通过相应的指令NetWait或NetWaitEx来接收信息。
举例：do NetSend("192.168.11.12", 21345, "Test message from se")

::NetWait
function NetWait(Port:integer; TimeOut:integer; var RemoteAddr:string):string;
在本机开启网络监听端口(Port)，以便接收来自网络其他计算机的消息文本。
Port为本机开启的网络监听端口
TimeOut为监听的最大时间限制，如果在此限制内没有收到消息，则结束监听，返回空字符串，-1表示无时间限制，只要没有收到消息，就一直等待。
RemoteAddr返回收到的消息是远端哪个IP地址发来的
注：此函数开启监听后，只能接收其他计算机上的脚本大师通过NetSend或NetSendEx函数发来的消息。
举例：set s=NetWait(21345, 5000, remoteAddr)

::NetConnect
function NetConnect(Addr:string; Port:integer):integer;
连接指定地址(Addr)的远程计算机的指定端口(Port)，如果成功，返回该连接的句柄，失败，则返回值为0
Addr可以为域名或IP地址
Port为远端计算机的端口
注：返回的句柄只能被被NetSendEx作为参数调用。
举例：set h=NetConnect("192.168.11.12", 21345)

::NetDisconnect
procedure NetDisconnect(handle:integer);
断开一个已经打开的远程计算机连接。
handle为需要断开的远程连接的句柄，该句柄应当为由NetConnect函数返回。
举例：do NetDisconnect(h)

::NetOpenPort
function NetOpenPort(Port:integer):integer;
打开一个本机的监听端口，以便能获取远程计算机发来的消息，如果成功，返回该监听端口的句柄，失败，则返回值为0。
Port为需要打开监听的端口号。
注：返回的句柄只能被NetWaitEx作为参数调用。
举例：set h=NetOpenPort(21345)

::NetClosePort
procedure NetClosePort(handle:integer);
关闭一个已经打开的本机网络监听端口。
handle为需要关闭的监听端口的句柄，该句柄应当由NetOpenPort函数返回。
举例：do NetClosePort(h)

::NetSendEx
procedure NetSendEx(handle:integer; Msg:string);
通过TCP/IP网络，向已经连接的计算机发送消息
handle为通过NetConnect函数打开的连接句柄
Msg为待发送消息文本。
注1：通过此函数发送的消息，必须对端计算机上也运行了脚本大师程序，并且需要通过相应的指令NetWait或NetWaitEx来接收信息。
注2：此函数与NetSend的区别在于：
     NetSendEx不需要反复连接远程计算机，执行效率比较高，但需要自己调用NetConnect/NetDisconnect函数来连接/断开远程计算机
     NetSend则每次执行都会自动连接/断开一次远程计算机，连续发送数据时效率较低，但NetSend使用较方便。
举例：do NetSendEx(h,"Test message from se")

::NetWaitEx
function NetWaitEx(handle:integer; TimeOut:integer; var RemoteAddr:string):string;
利用已打开的网络监听端口的句柄，来接收其他计算机发来的消息文本。
handle为利用NetOpenPort打开的网络监听端口句柄
TimeOut为监听的最大时间限制，如果在此限制内没有收到消息，则结束监听，返回空字符串，-1表示无时间限制，只要没有收到消息，就一直等待。
RemoteAddr返回收到的消息是远端哪个IP地址发来的
注1：此函数开启监听后，只能接收其他计算机上的脚本大师通过NetSend或NetSendEx函数发来的消息。
注2：此函数与NetWait的区别在于：
     NetWaitEx不需要反复打开监听端口，执行效率比较高，但需要自己调用NetOpenPort/NetClosePort来开启/关闭监听端口
     NetWait则每次执行都会自动开启/关闭一次监听端口，连续发送数据时效率较低，但NetWait使用较方便。
举例：set s=NetWaitEx(h,5000,RemoteAddr)

::SendStr
procedure SendStr(h:integer; Str:string; [DelayTime:integer]);
对指定窗口发送字符串，可支持后台窗口发送。
h为窗口句柄，Str为待发送的字符串。
DelayTime为可选参数，设置每个字符之间的发送间隔，如果省略这个参数或者为0，表示以最快速度发送字符串。

::SendStr0
procedure SendStr0(h:integer; Str:string; [DelayTime:integer]);
对指定窗口发送字符串，可支持后台窗口发送。
h为窗口句柄，Str为待发送的字符串。
DelayTime为可选参数，设置每个字符之间的发送间隔，如果省略这个参数或者为0，表示以最快速度发送字符串。

::SendKeyDown
procedure SendKeyDown(h:integer; vKey:integer; Times:integer; KeyInterval:integer);
将按键消息发送到指定的窗口中，无论指定窗口是否处于后台或最小化。
h-指定窗口的句柄
vKey-虚拟按键代码
Times-重复次数
KeyInterval-每个按键之间的间隔时间
举例：do SendKeyDown(h, 65,1,50)

::SendMouseKey
procedure SendMouseKey(h:integer; KeyStr:string; Times:integer; x:integer; y:integer; KeyInterval:integer);
将鼠标按键发送到指定的窗口中，无论指定窗口是否处于后台或最小化。
h-指定窗口的句柄
KeyStr-鼠标按键名"LDown","LUp","LClick","RDown","RUp","RClick","MDown","MUp","MClick","MoveTo","LDBLClick","RDBLClick","MDBLClick","WheelForward","WheelBackward"
Times-重复次数
x,y - 鼠标点击的坐标点，该坐标原点是h对应窗口的左上角，而不是以屏幕左上角为坐标原点。
KeyInterval-每个按键之间的间隔时间
举例：do SendMouseKey(h,"LClick",1,10,10,50)

::HWMouseMoveR
procedure HWMouseMoveR(dx:integer; dy:integer);
通过硬件模式来模拟鼠标的相对移动，dx,dy为鼠标在屏幕上相对移动的距离
注意：
1、硬件模拟方式不支持USB鼠标，只能用于PS/2鼠标
2、硬件模拟鼠标移动的距离可能与实际移动距离有误差，请注意调整。
举例：do HWMouseMoveR(100,0)

::GetCursorShape
function GetCursorShape():integer;
获取当前鼠标形状的特征码，有助于分辨鼠标的形状是否发生了改变。
举例: set h=GetCursorShape()

::GetCursorShapeEx
function GetCursorShapeEx():integer;
获取当前鼠标形状的特征码，有助于分辨鼠标的形状是否发生了改变。
注：此函数与GetSursorShape采用的特征码获取方式不同，因此结果也是不同的。
举例：set h=GetCursorShapeEx()

::GetForeGroundWindow
function GetForeGroundWindow(): integer;
获取当前处于最上方的窗口的句柄
举例：set h=GetForeGroundWindow()

::SetForeGroundWindow
procedure SetForeGroundWindow(h:integer);
将指定窗口设置为当前前景窗口
h: 要设置为前景窗口的句柄
举例：do SetForeGroundWindow(h)

::WindowFromPoint
function WindowFromPoint(x:integer; y:integer):integer;
获取屏幕上指定位置坐标的最上层的窗口句柄
举例：set h=WindowFromPoint(100,100)

::GetWindowByTitle
function GetWindowByTitle(Title:string):integer;
获取指定标题的窗口句柄，Title可以只是窗口标题的前面部分，不一定要完整标题。
举例：set h=GetWindowByTitle("Notepad")

::GetFocusedWindow
function GetFocusedWindow():integer;
获取当前活动窗口中取得焦点的子窗口句柄。
举例：set h=GetFocusedWindow()

::WindowFromMouse
function WindowFromMouse():integer;
获取鼠标所在位置的窗口句柄。
举例：set h=WindowFromMouse()

::GetColor
function GetColor(hWND:integer; x:integer; y:integer):integer;
获取指定窗口hWND中，指定坐标的点的颜色，x,y为相对hWND窗口左上角的坐标。
举例：set c=GetColor(h,100,100)

::GetColorPos
procedure GetColorPos(hWND:integer; Color:integer; x1:integer; y1:integer; x2:integer; y2:integer; cDiff:integer; var x:integer; var y:integer);
查找指定窗口hWND中指定范围(x1,y1)(x2,y2)中指定颜色Color的颜色点坐标，返回值保存在x,y中
cDiff：颜色的差异度，0表示颜色必须完全相同
举例：do GetColorPos(h,$00FFFFFF,0,0,1024,768,0,x,y)

::GetColorPosEx
procedure GetColorPosEx(hWND:integer; Color:integer; x0:integer; y0:integer; r:integer; cDiff:integer; var x:integer; var y:integer);
查找指定窗口hWND中以(x0,y0)为圆心，r为半径的圆形范围内指定颜色Color的点的坐标，返回值保存在x,y中
cDiff：颜色的差异度，0表示颜色必须完全相同
举例：do GetColorPosEx(h,$00FFFFFF,512,354,200,0,x,y)

::GetPicPos
procedure GetPicPos(hWND:integer; PicFile:string; x1:integer; y1:integer; x2:integer; y2:integer; Percent:single; cDiff:integer; var x:integer; var y:integer);
查找指定窗口hWND中，指定图形PicFile在指定范围(x1,y1)(x2,y2)中的位置，返回值保存在x,y中
PicFile：可以是一个bmp格式的图片文件名或者是一个图片字符串（图片字符串可使用ImgStr.exe工具生成）
Percent：表示查找是图形的相似度, 1表示图片必须完全相同
cDiff：表示像素点颜色的差异度，0表示颜色必须完全相同
注意：为了更好地识别效果，建议将图片中的无效部分涂成单一的透明色，并将图片左下角的点颜色也改为透明色，Script Expert会自动将最左下角的颜色识别为透明色。
举例：do GetPicPos(h,"c:\1.bmp",0,0,1024,768,0.9,0,x,y)

::GetPicPosEx
procedure GetPicPosEx(hWND:integer; PicFile:string; x0:integer; y0:integer; r:integer; Percent:single; cDiff:integer; var x:integer; var y:integer);
查找指定窗口hWND中，指定图形PicFile在指定的以(x0,y0)为圆心，r为半径的圆形范围内存在的位置，返回值保存在x,y中
PicFile：可以是一个bmp格式的图片文件名或者是一个图片字符串（图片字符串可使用ImgStr.exe工具生成）
Percent：表示查找是图形的相似度, 1表示图片必须完全相同
cDiff：表示像素点颜色的差异度，0表示颜色必须完全相同
注意：为了更好地识别效果，建议将图片中的无效部分涂成单一的透明色，并将图片左下角的点颜色也改为透明色，Script Expert会自动将最左下角的颜色识别为透明色。
举例：do GetPicPosEx(h,"c:\1.bmp",512,354,200,0.9,0,x,y)

::ReadMem
function ReadMem(hWnd:integer; Type:string; Addr:integer): Value;
读取指定窗口所在进程的内存数据，读取的数值保存在函数返回值中
hWnd为目标窗口句柄
Type为一个字符串，表示了需要读取的数据类型，可用类型为"Byte","Word","DWord","Float"
Addr为需要读取的内存地址
举例：set x=ReadMem(h,"DWord",$845600)

::WriteMem
procedure WriteMem(hWnd:integer; Type:string; Addr:integer; Value);
对指定窗口所在进程的内存进行写入操作
hWnd为目标窗口句柄
Type为一个字符串，表示了需要写入的数据类型，可用类型为"Byte","Word","DWord","Float"
Addr为需要写入的内存地址
Value为需要写入内存的数字
举例：do WriteMem(h,"Dword",$845600,100)

::WriteIntegerToIniFile
procedure WriteIntegerToIniFile(FileName:string; Section:string; Indent:string; Num:integer);
将一个数字写入Ini文件的指定位置。
举例：do WriteIntegerToIniFile("c:\1.ini","common","test1", 100)

::WriteStringToIniFile
procedure WriteStringToIniFile(FileName:string; Section:string; Indent:string; s:string);
将一个字符串写入Ini文件的指定位置。
举例：do WriteStringToIniFile("c:\1.ini","common","test2","go go go")

::WriteFloatToIniFile
procedure WriteFloatToIniFile(FileName:string; Section:string; Indent:string; Num:Float);
将一个浮点数字写入Ini文件的指定位置。
举例：do WriteFloatToIniFile("c:\1.ini","common","test1", 100.222)

::ReadIntegerFromIniFile
function ReadIntegerFromIniFile(FileName:string; Section:string; Indent:string; Default:integer):integer;
从Ini文件的指定位置读取一个数字，返回值即该数字，如果找不到该数字，则返回Default数字。
举例：set i=ReadIntegerFromIniFile("c:\1.ini","common","test1",0)

::ReadStringFromIniFile
function ReadStringFromIniFile(FileName:string; Section:string; Indent:string; Default:string):string;
从Ini文件的指定位置读取一个字符串，返回值即该字符串，如果找不到该字符串，则返回Default字符串。
举例：set s=ReadStringFromIniFile("c:\1.ini","common","test2","")

::ReadFloatFromIniFile
function ReadFloatFromIniFile(FileName:string; Section:string; Indent:string; Default:Float):Float;
从Ini文件的指定位置读取一个浮点数字，返回值即该浮点数字，如果找不到该浮点数字，则返回Default。
举例：set i=ReadFloatFromIniFile("c:\1.ini","common","test1",0.1)

::SetSpeed
procedure SetSpeed(Ratio:Float);
通过，您可以方便的实现变速器功能，参数Ratio为变速倍率，0-1表示减速，>1表示加速
调用格式: do SetSpeed(Ratio)
注意：使用前，请先将脚本大师主目录下的Speeder.dll.disable改名为Speeder.dll。
举例：do SetSpeed(10)

::ColorDiff
function ColorDiff(c1:integer; c2:integer):integer;
比较两种颜色的差异度，返回值为差异度数值，需要根据实际情况衡量该差异度数值，根据我的经验，该差异度数值小于3时，颜色就很相近了。

::UBound
function UBound(v:Array; [Dimension:integer]): integer;
获取指定数组的某个维的上标
Dimension为可选参数，表示第几维，未指定则默认为第一维

::LBound
function LBound(v:Array; [Dimension:integer]): integer;
获取指定数组的某个维的下标
Dimension为可选参数，表示第几维，未指定则默认为第一维

::DimCount
function DimCount(v:Array): integer;
获取指定数组的维数，维数规定从1开始

::Split
function Split(s:string; Deli:string): Array;
将字符串<s>按规定的分割符<Deli>进行分割，结果保存在一个一维数组中，这个一维数组的下标为0
分割符<Deli>可以是单个字符或者一个字符串
举例：
var v=0
set v=Split("abc;def;ghi",";")
结果: v[0]="abc"   v[1]="def"    v[2]="ghi"

::Length
function Length(str:string) : integer;
返回指定Str字符串的长度

::Len
function Len(str:string) : integer;
返回指定Str字符串的长度

::Trunc
function Trunc(f:Float):integer;
将浮点数的小数点部分去掉，返回整数部分，不进行四舍五入。

::Round
function Round(f:Float):integer;
将浮点数的小数点部分四舍五入后去掉，返回整数部分。

::Random
function Random(Range:integer):integer;
获取随机数，返回值为一个0到Range-1范围内的随机数
例如：set x=Random(100)，返回值x的大小为0<=x<100

::ABS
function ABS(x:integer):integer;
对指定数值取绝对值

::SQR
function SQR(x:Float):Float;
对指定数值进行平方运算，等效于x^2

::SQRT
function SQRT(x:Float):Float;
对指定数值进行开方运算，等效于x^(1/2)

::Ln
function LN(x:Float):Float;
自然对数运算（以e为底的对数运算）

::Lg
function LG(x:Float):Float;
以10为底的对数运算

::Log
function LOG(x:Float):Float;
以2为底的对数运算

以下为一些正弦、余弦相关的函数

::Sin
function Sin(x:Float):Float;

::Cos
function Cos(x:Float):Float;

::Tan
function Tan(x:Float):Float;

::Tg
function TG(x:Float):Float;

::Ctg
function CTG(x:Float):Float;

::Sec
fucntion SEC(x:Float):Float;

::Csc
fucntion CSC(x:Float):Float;

::ArcSin
fucntion ArcSin(x:Float):Float;

::ArcCos
function ArcCos(x:Float):Float;

::ArcTan
function ArcTan(x:Float):Float;

::SinH
function SinH(x:Float):Float;

::CosH
function CosH(x:Float):Float;

::TanH
function TanH(x:Float):Float;

::ArcSinH
function ArcSinH(x:Float):Float;

::ArcCosH
function ArcCosH(x:Float):Float;

::ArcTanH
function ArcTanH(x:Float):Float;
