//本插件库提供以下函数功能
//v1.37 : 调整GetInputStr函数功能，增加新的参数
//v1.36 : 新增GetWindowRect和GetClientRect函数
//v1.35 : 修正了ScreenToClient/ClientToScreen函数坐标偏移的问题
//v1.34 : 修正了SubStrPos函数的一个bug
//        新增若干进程/线程控制函数
//        新增若干注册表读写函数
//v1.33 : 添加HTMLToTXT, StrDuplicate函数
//v1.32 : 随脚本大师7.1一起发布的初始版本


::Min
function Min(n1:float; n2:float; n3:float; ....): float;
从n1,n2,n3,...这一系列数字里，找出最小的一个数返回
举例：set x=min(1,2,3,4,5)  -> x=1

::Max
function Max(n1:float; n2:float; n3:float; ....): float;
从n1,n2,n3,...这一系列数字里，找出最大的一个数返回
举例：set x=max(1,2,3,4,5)  -> x=5

::GetTickCount
function GetTickCount() : integer;
获取系统开机以来所经过的毫秒数
举例：set x=GetTickCount()

::GetTime
function GetTime() : string;
获取当前系统时间，返回为时间字符串
举例：set x=GetTime()

::GetYear
function GetYear() : integer;
获取现在的年份
举例：set x=GetYear()

::GetMonth
function GetMonth() : integer;
获取现在的月份
举例：set x=GetMonth()

::GetDay
function GetDay() : integer;
获取今天的日期
举例：set x=GetDay()

::GetHour
function GetHour() : integer;
获取现在的小时
举例：set x=GetHour()

::GetMinute
function GetMinute() : integer;
获取现在的分钟
举例：set x=GetMinute()

::GetSec
function GetSec() : integer;
获取现在的秒
举例：set x=GetSec()

::GetMSec
function GetMSec() : integer;
获取现在的毫秒数
举例：set x=GetMSec()

::AsciiToChar
function AsciiToChar(AsciiCode:integer) : string;
将指定Ascii代码转换成对应字符
举例：set c=AsciiToChar(65)  -> c="A"

::CharToAscii
function CharToAscii(Char:string) : integer;
将指定字符转换成对应的Ascii代码
举例：set x=CharToAscii("A")  -> x=65

::UpperCase
function UpperCase(str:string) : string;
将指定字符串转换成全部大写
举例：set s=UpperCase("AbcdEfgHijK") -> s="ABCDEFGHIJK"

::LowerCase
function LowerCase(str:string) : string;
将指定字符串转换成全部小写
举例：set s=LowerCase("AbcdEFGHIJk") -> s="abcdefghijk"

::ShowMsg
function ShowMsg(msg:string; [Id:string]) : string;
弹出对话框显示指定消息，弹出的对话框上的按钮根据可选参数Id的描述来确定，Id的可能取值如下：
"OK": 显示的对话框只有一个“确定”按钮
"OKCancel": 显示的对话框有2个按钮，分别为“确定”和“取消”(OK/Cancel)
"YesNo": 显示的对话框有2个按钮，分别为“是”和“否”(Yes/No)
"YesNoCancel": 显示的对话框有3个按钮，分别为“是”、“否”、“取消”(Yes/No/Cancel)
返回值为一个字符串，标识了用户按下哪个按钮，取值如下：(注意都为大写)
"OK": 用户按下了“确定”按钮
"CANCEL": 用户按下了“取消”按钮
"YES": 用户按下了“是”按钮
"NO": 用户按下了“否”按钮
举例：
do ShowMsg("Test Message")
set x=ShowMsg("Test Message","OKCancel")
set x=ShowMsg("Test Message","YesNO")
set x=ShowMsg("Test Message","YesNoCancel")

::IntToStr
function IntToStr(int:integer) : string;
将指定数值转换成字符串
举例：set s=IntToStr(123)  -> s="123"

::IntToHex
function IntToHex(int:integer; Digits:integer) : string;
将指定数值转换成对应16进制字符串
举例：set s=IntToHex(765,8)  -> s="000002FD"

::StrToInt
function StrToInt(str:string) : integer;
将指定字符串转换成数值，如果该字符串无法转换为数字，则返回0
举例：set i=StrToInt("1234") -> i=1234

::FloatToStr
function FloatToStr(f:Float) : string;
将指定浮点数转换为字符串
举例：set s=FloatToStr(3.1415926)  -> s="3.1415926"

::StrToFloat
function StrToFloat(str:string) : Float;
将指定字符串转换为浮点数，如果该字符串无法转换为浮点数，则返回0
举例：Set f=StrToFloat("3.1415926")  -> f=3.1415926

::GetSubStr
function GetSubStr(str:string; Index:integer; Count:integer): string;
返回str中Index开始的Count数量字符的子串
举例: set s=GetSubStr("123456789",2,3)  -> 返回值为字符串"234"

::SubStrPos
function SubStrPos(SubStr:string; Str:string; [instance_num:integer]): Integer;
返回SubStr在Str字符串中的位置
SubStr为要寻找的字符串
Str为要在其中寻找SubStr的字符串
instance_num为可选参数，指定范围Str中第几个匹配的SubStr的位置，如果未指定或者为0，则返回Str中第一个匹配的SubStr位置
举例：set i=SubStrPos(".","abc.efg.hijk",2)  -> i=8 返回第二个"."在字符串中的位置为8

::SubStrCount
function SubStrCount(Str:string; SubStr:string): integer;
返回在Str中SubStr的个数
举例：set i=SubStrCount("abcdefabcijk","abc") -> i=2

::Trim
function Trim(Str:string): string;
将指定字符串的前后空格去除
举例：set s=Trim("  abc  ")  -> s="abc"

::TrimLeft
function TrimLeft(str:string): string;
将指定字符串的前面的空格去除
举例：set s=TrimLeft("  abc  ") -> s="abc  "

::LTrim
function LTrim(str:string): string;
将指定字符串的前面的空格去除, 同TrimLeft
举例：set s=LTrim("  abc  ") -> s="abc  "

::TrimRight
function TrimRight(str:string): string;
将指定字符串的后面的空格去除
举例：set s=TrimRight("  abc  ")  -> s="  abc"

::RTrim
function RTrim(str:string): string;
将指定字符串的后面的空格去除, 同TrimRight
举例：set s=RTrim("  abc  ")  -> s="  abc"

::Left
function Left(str:string; Count:integer): string;
将从Str字符串中取出前1个或几个字符，Count为要取出的字符个数
举例：set s=Left("abcdef",3)  -> s="abc"

::Right
function Right(str:string; Count:integer): string;
将从Str字符串中取出最后1个或几个字符，Count为要取出的字符个数
举例：set s=Right("abcdef",3)  -> s="def"

::StrReplace
function StrReplace(str:string; OldStr:string; NewStr:string; [Instance_Num:integer]): string;
在Str中将OldStr替换为NewStr
Str为需要替换其中字符的字符串
OldStr为需要替换的旧文本
NewStr为用来替换OldStr的新文本
Instance_Num 为一个可选数值，用来指定以NewStr替换第几次出现的OldStr，如果Instance_Num未指定或者为0，则将Str中出现的所有的OldStr全部替换为NewStr
举例：
set s=StrReplace("abcdefghiabc","abc","XXX") -> s="XXXdefghiXXX"
set s=StrReplace("abcdefghiabc","abc","XXX",2) -> s="abcdefghiXXX"

::StrInsert
function StrInsert(SrcStr:string; DstStr:string; Index:integer): string;
将SrcStr字符串插入到DstStr字符串的Index位置中
举例：set s=StrInsert("abc","01234567",3)  -> s="01abc234567"

::HTMLToTXT
function HTMLToTXT(HTMLStr:string): string;
将指定的HTML文本转换为纯文本，去除HTML文本中的所有HTML信息。
举例：set s=HTMLToTXT(HTMLStr)

::StrDuplicate
function StrDuplicate(s:string; DupTimes:integer): string;
将指定字符串复制若干份
s: 需要复制的原始字符串
DupTimes: 复制次数
举例：set s=StrDuplicate("s",5) -> s="sssss"

::GetInputStr
function GetInputStr(APrompt,DefaultInput:string): string;
弹出对话框要求用户输入字符串，然后返回给SE
APrompt: 对话框的提示信息
DefaultInput: 默认的输入内容，用户可以直接按确定，可传入空字符串
举例：set s=GetInputStr("请输入字符串内容","Default String")

::GetClipBoardText
function GetClipBoardText(): string;
读取剪贴板的文本内容
举例：set s=GetClipBoardText()

::SetClipBoardText
procedure SetClipBoardText(str:string);
将指定字符串写入剪贴板
举例：do SetClipBoardText("test")

::SwitchToWindow
procedure SwitchToWindow(WndTitle:string);
将标题为WndTitle的窗口切换成活动窗口
举例：do SwitchToWindow("Game Name")

::SetWindow
procedure SetWindow(hWnd: integer; IDStr:string);
设定指定窗口的状态，IDStr为需要设置的窗口状态字符串(大小写不敏感)，可以取值为:
"TopMost": 设置窗口总在最上方
"NoTopMost": 取消窗口总在最上方
"Bottom": 设置窗口处于所有窗口最下方
"Max": 设置窗口最大化
"Min": 设置窗口最小化
"Restore": 恢复窗口正常状态，相对于Max/min
"Hide": 隐藏窗口
"Show": 显示窗口，也就是取消隐藏状态
举例：do SetWindow(GetForeGroundWindow(),"TopMost")

::ScreenToClient
procedure ScreenToClient(hWnd:integer; ScreenX:integer; ScreenY:integer; var ClientX:integer; var ClientY:integer);
将屏幕绝对坐标(ScreenX,ScreenY)转换为窗口相对坐标(ClientX,ClientY), hWnd为窗口句柄
举例：do ScreenToClient(GetForeGroundWindow(),10,10,cx,cy)

::ClientToScreen
procedure ClientToScreen(hWnd:integer; ClientX:integer; ClientY:integer; var ScreenX:integer; var ScreenY:integer);
将窗口相对坐标(ClientX,ClientY)转换为屏幕绝对坐标(ScreenX,ScreenY), hWnd为窗口句柄
举例：do ClientToScreen(GetForeGroundWindow(),10,10,sx,sy)

::GetWindowText
function GetWindowText(hWnd:integer):string;
获取指定窗口的标题, hWnd为窗口句柄
举例：set s=GetWindowText(GetForeGroundWindow()) 获取当前活动窗口的标题

::SetWindowText
function SetWindowText(hWnd:integer; NewCaption:string): integer;
修改指定窗口的标题，hWnd为窗口句柄，NewCaption为要修改的标题
举例：do SetWindowText(GetForeGroundWindow(),"Window title modified by script expert")

::GetWindowRect
function GetWindowRect(hWnd:integer; Left,Top,Right,Bottom:integer):integer;
获取指定窗口的在屏幕上的区域范围，如果成功返回1，失败则返回值为0
hWnd为窗口句柄
(Left,Top)和(Right,Bottom)分别为窗口的左上角坐标及右下角坐标
举例：set i=GetWindowRect(GetForeGroundWindow(),Left,Top,right,Bottom)

::GetClientRect
function GetClientRect(hWnd:integer; Left,Top,Right,Bottom:integer):integer;
获取指定窗口的客户区域在屏幕上的区域范围，如果成功返回1，失败则返回值为0
hWnd为窗口句柄
(Left,Top)和(Right,Bottom)分别为窗口客户区域的左上角坐标及右下角坐标
举例：set i=GetClientRect(GetForeGroundWindow(),Left,Top,right,Bottom)

::GetSerialNumber
function GetSerialNumber(): integer;
返回硬盘序列号
举例：set x=GetSerialNumber()

::LocalComputerName
function LocalComputerName(): string;
获取本计算机名
举例：set s=LocalComputerName()

::LocalIP
function LocalIP(): string;
获取本地IP地址
举例：set s=LocalIP()

::InternetConnected
function InternetConnected(): integer;
判断当前计算机是否联网，是的话返回1，否则返回0
举例：set i=InternetConnected()

::GetMousePos
procedure GetMousePos(var x:integer; var y:integer);
获取当前鼠标所在坐标(x，y)，坐标值保存在变量x和y中
举例：do GetMousePos(x,y)

::ParamCount
function ParamCount(): integer;
获取当前进程命令行参数的个数
举例： set x=ParamCount()

::ParamStr
function ParamStr(ParamIndex:integer): string;
获取当前进程命令行参数字符串，Paramindex为需要获取第几个参数
举例：set s=ParamStr(1)  -> 获取第一个命令行参数

::GetCurrentThread
function GetCurrentThread(): integer;
获取当前线程的句柄
举例：set h=GetCurrentThread()

::GetCurrentThreadID
function GetCurrentThreadID(): integer;
获取当前线程标识ID
举例：set h=GetCurrentThreadID()

::GetCurrentProcess
function GetCurrentProcess(): integer;
获取当前进程的句柄
举例：set h=GetCurrentProcess()

::GetCurrentProcessID
function GetCurrentProcessID(): integer;
获取当前进程的标识ID
举例：set ID=GetCurrentProcessID()

::OpenProcess
function OpenProcess(ProcessID:integer): integer;
根据进程标识ID，打开指定进程，返回进程句柄
举例：set h=OpenProcess(ID)

::SetThreadPriority
function SetThreadPriority(h:integer; nPriority:integer): integer;
设置线程的优先级，设置成功返回1，否则返回0
h: 线程句柄
nPriority: 优先级代码，可能取值如下
  -15:  THREAD_PRIORITY_IDLE
  -2 :  THREAD_PRIORITY_LOWEST
  -1 :  THREAD_PRIORITY_BELOW_NORMAL
  0  :  THREAD_PRIORITY_NORMAL
  1  :  THREAD_PRIORITY_ABOVE_NORMAL
  2  :  THREAD_PRIORITY_HIGHEST
  15 :  THREAD_PRIORITY_TIME_CRITICAL
举例：do SetThreadPriority(h,15)  ->  设置线程优先级为最高

::GetThreadPriority
function GetThreadPriority(h:integer): integer;
获取线程的优先级
举例：set x=GetThreadPriority(h)

::SetPriorityClass
function SetPriorityClass(h:integer; dwPriorityClass:integer): integer;
设置进程的优先级，设置成功返回1，否则返回0
h: 进程句柄
dwPriorityClass: 优先级代码，可能取值如下
  $80  :  HIGH_PRIORITY_CLASS
  $40  :  IDLE_PRIORITY_CLASS
  $20  :  NORMAL_PRIORITY_CLASS
  $100 :  REALTIME_PRIORITY_CLASS
举例：do SetPriorityClass(h, $100)

::GetPriorityClass
function GetPriorityClass(h:integer): integer;
获取进程的优先级
举例：set x=GetPriorityClass(h)

::GetWindowThreadProcessID
function GetWindowThreadProcessID(h:integer; var ProcessID): integer;
获取指定窗口相关的进程和线程标识ID，ProcessID变量返回进程ID，函数返回值为线程ID
h: 窗口句柄
ProcessID: 用来返回进程ID
举例：set x=GetWindowThreadProcessID(h,ProcessID)

::TerminateThread
function TerminateThread(h:integer; [ExitCode:integer]): integer;
结束指定线程的运行，如果成功，返回1，否则返回0
h: 线程句柄
ExitCode: 可选参数，指定线程返回代码，默认为0
举例： do TerminateThread(h)

::TerminateProcess
function TerminateProcess(h:integer; [ExitCode:integer]): integer;
结束指定进程的运行，如果成功，返回1，否则返回0
h: 进程句柄
ExitCode: 可选参数，指定进程的返回代码，默认为0
举例：do TerminateProcess(h)

::RegWriteInteger
function RegWriteInteger(RootKey:string; Key:string; Name:string; Value:integer): integer;
写入注册表数字键值，如果成功则返回1，否则返回0
RootKey: 注册表根键，可能的值为
  "HKEY_CLASSES_ROOT"
  "HKEY_CURRENT_USER"
  "HKEY_LOCAL_MACHINE"
  "HKEY_USERS"
  "HKEY_CURRENT_CONFIG"
Key: 注册表数据路径
Name: 注册表键名称
Value: 要写入注册表的数值
举例：do RegWriteInteger("HKEY_CURRENT_USER","\Software\Microsoft\Windows\CurrentVersion\RunOnce","MyAPP",0)

::RegReadInteger
function RegReadInteger(RootKey:string; Key:string; Name:string; DefaultValue:integer): integer;
读取注册表数字键值，如果成功则返回读取到的数值，否则返回DefaultValue
RootKey: 注册表根键，可能的值为
  "HKEY_CLASSES_ROOT"
  "HKEY_CURRENT_USER"
  "HKEY_LOCAL_MACHINE"
  "HKEY_USERS"
  "HKEY_CURRENT_CONFIG"
Key: 注册表数据路径
Name: 注册表键名称
DefaultValue: 如果读取失败，用来返回的默认值
举例：set x=RegReadInteger("HKEY_CURRENT_USER","\Software\Microsoft\Windows\CurrentVersion\RunOnce","MyAPP",-1)

::RegWriteString
function RegWriteString(RootKey:string; Key:string; Name:string; Value:String): integer;
写入注册表数字键值，如果成功则返回1，否则返回0
RootKey: 注册表根键，可能的值为
  "HKEY_CLASSES_ROOT"
  "HKEY_CURRENT_USER"
  "HKEY_LOCAL_MACHINE"
  "HKEY_USERS"
  "HKEY_CURRENT_CONFIG"
Key: 注册表数据路径
Name: 注册表键名称
Value: 要写入注册表的字符串
举例：do RegWriteString("HKEY_CURRENT_USER","\Software\Microsoft\Windows\CurrentVersion\RunOnce","MyAPP","TEST")

::RegReadString
function RegReadString(RootKey:string; Key:string; Name:string; DefaultValue:integer): integer;
读取注册表数字键值，如果成功则返回读取到的数值，否则返回DefaultValue
RootKey: 注册表根键，可能的值为
  "HKEY_CLASSES_ROOT"
  "HKEY_CURRENT_USER"
  "HKEY_LOCAL_MACHINE"
  "HKEY_USERS"
  "HKEY_CURRENT_CONFIG"
Key: 注册表数据路径
Name: 注册表键名称
DefaultValue: 如果读取失败，用来返回的默认字符串
举例：set s=RegReadString("HKEY_CURRENT_USER","\Software\Microsoft\Windows\CurrentVersion\RunOnce","MyAPP","")
