环境及素材
透明图设计
所谓的透明图是指:
- 图片四个角的颜色相同,将会被识别为透明色,再将非主体部分全部用“透明”色遮盖,建议用黑色或红色(或主体为黑色较多)!注意,目标色不能与透明色一致!
- 保存图片为.bmp 24位格式
- 识别原理为通过对比度识别
- 尽可能减少无用信息!
- 即截取实际屏幕下目标图片, 用PS打开,将目标抠出, 背景设置为黑色或红色, 裁剪到不影响目标的最小矩形, 保存为PNG格式, 通过画图软件另存为.bmp格式
按键精灵的安装与用途
- 电脑分辨率显示为100%
- 选择抓取工具获取坐标
- 若移植时, 程序为绝对路径, 那么脚本依赖文件也要对应复制
- 能够快速编写出键盘鼠标脚本程序的软件,使用起来简单方便!写不正式的小小程序和脚本可以使用。
语法
程序结构
//全局变量和环境变量声明
//程序主体
//函数定义
//QUI调用
从上到下执行, 没有主函数, 可以用while 1 作为主函数
注释
//注释内容
数据类型
变量名称
变量可以是中英文, 区分大小写
变量a//中文变量
X//英文变量
//变量赋值
变量a=1
变量a="字符串"
//条件语句
a=b
a="字符串内容"
环境变量DimEnv
可以在多个脚本和全局使用的变量, 需要在脚本最上方定义
DimEnv 背景音乐flag //定义环境变量,在全局有效 0关闭 1开启 2关闭 默认1
背景音乐flag = 1//变量赋值及初始化
控制语句
while
//语法
While 表达式
循环体
Wend
//示例
While 1
If 背景音乐flag = 1 Then
TracePrint "背景音乐播放"
Call Plugin.Media.Play("C:\大学网课脚本\配置\素材\背景音乐.mp3")
背景音乐flag = 0
End If
Wend
Do循环
Do While 条件
Exit Do
//退出循环
Loop
分支和跳转
If语句
//语法
If 表达式 Then
语句或复合语句
End If
//示例
If 背景音乐flag = 1 Then
TracePrint "背景音乐播放"
Call Plugin.Media.Play("C:\大学网课脚本\配置\素材\背景音乐.mp3")
背景音乐flag = 0
End If
基本命令
键盘与鼠标命令
MoveTo//移动鼠标
LeftClick//左键单机
KeyPress//ASCII码
SayString " "//输入字符串
MessageBox弹出提示框
//语法
MessageBox "显示内容" & 变量名称 & "字符串2" & 显示器高度Y //弹窗提示, 但是程序会继续执行
//示例
MessageBox "当前程序分辨率为" & 显示器宽度X & "*" & 显示器高度Y & "请检查是否和实际电脑分辨率一致, 是否为100%缩放,设置完毕并检查无误后点击确定继续"
Delay延时
//语法
Delay 数值或变量//单位毫秒
//示例
Delay 1500
TracePrint调试输出
用于在调试时显示在调试框打印内容, 不在实际软件中显示
//语法
TracePrint 显示内容
//示例
TracePrint "移动右下角图标"&(显示器宽度X-1920+915)&"*"&(显示器高度Y-1080+600)
Sub函数定义
//语法-声明函数
Sub 函数名称()
函数体
End Sub
//语法-调用函数
Call 函数名称()
//示例
While 1
Call 调试()
Wend
Sub 调试()
While 0
TracePrint "移动左上角图标"
MoveTo 690,440
Delay 3000
TracePrint "移动右下角图标"&(显示器宽度X-1920+915)&"*"&(显示器高度Y-1080+600)
MoveTo (显示器宽度X-1920+1040),(显示器高度Y-1080+605)
Delay 3000
Wend
End Sub
ExitScript脚本退出运行
ExitScript//在需要退出的地方使用即可, 退出的是所在脚本
FindColor寻找目标颜色位置
//0,0是选区框的左上角x,y坐标; 1024,768是左下角坐标 共同组成查找区域; "0000FF"是颜色代码; intX,intY是返回的目标坐标
FindColor 0,0,1024,768,"0000FF",
FindPic寻找目标图片位置
//同上, "图片.bmp"为相对路径,也可以是绝对路径 ; 0.9是相似度, 查找原理为将图片从左到右,从上到下移动对比是否重复, 每找完一行, 向下移动一像素点.
//必须是24位bmp文件
//图片要小于范围
FindPic 0,0,1024,768,"图片.bmp",0.9,intX,intY
界面事件
ProgressBar1进度条
//语法
窗体号.ProgressBar1.Value = 变量或语句
//示例
Form1.ProgressBar1.Value = (100 / 最大执行次数) * 已经执行次数
InputBox2输入框
//语法
//赋值
Form1.InputBox2.Text = 变量或数值或"字符串"
//定义
Event 窗体号.InputBox2.触发方式//InputBox2是表示qui窗体中的对象的名称, 可以修改, 只要一致即可
语句
End Event
//示例
//创建已经执行次数显示窗口
Event Form1.InputBox2.Change
End Event
//输入最大执行次数 控制输入框控件内容限制为3位数, 内容改变时改变
Event Form1.InputBox1.Change
最大执行次数= Right(Form1.InputBox1.Text,3)
End Event
Button按键
Event Form1.Button1.Click
//当按钮被点击后触发的事件
End Event
//示例
Event Form1.course.Click
MessageBox "点击【确定】后开始自动放课 "&最大执行次数&" 节"
自动刷课flag = 1
End Event
标准VBS命令
MsgBox弹出对话框
//弹窗提示, 但是程序不会继续执行, 需要等待用户点击弹窗后才会继续执行
MsgBox "欢迎使用大学网课助手1.3版"
插件命令
Plugin.Media.Play播放音乐
Call Plugin.Media.Play("C:\大学网课脚本\配置\素材\背景音乐.mp3")//支持mp3 wav格式
Plugin.Media.Stop停止音乐
Call Plugin.Media.Stop()//括号内没有内容!
Plugin.GetSysInfo.GetDateTime 得到系统当前日期和时间
现在时间=Plugin.GetSysInfo.GetDateTime()//返回字符串类型时间 "2023-04-21 22:18:20"
示例程序-自动刷网课脚本
DimEnv 背景音乐flag //定义环境变量,在全局有效 0关闭 1开启 2关闭 默认1
背景音乐flag = 1
DimEnv 已经执行次数
已经执行次数=0
DimEnv 最大执行次数
最大执行次数 = 100
DimEnv 自动刷课flag //0关闭 1开启
自动刷课flag = 0
DimEnv 退出线程flag //0关闭 1开启
退出线程flag = 0
DimEnv 程序暂停flag //0关闭 1暂停 2继续
程序暂停flag = 0
DimEnv 显示器宽度X
显示器宽度X = 1920
DimEnv 显示器高度Y
显示器高度Y = 1080
DimEnv 计数器
计数器 = 1
//弹窗提示
MsgBox "欢迎使用大学网课助手1.3版"
If 背景音乐flag = 1 Then
TracePrint "背景音乐播放"
Call Plugin.Media.Play("C:\大学网课脚本\配置\素材\背景音乐.mp3")
背景音乐flag = 0
End If
MessageBox "当前程序分辨率为" & 显示器宽度X & "*" & 显示器高度Y & "请检查是否和实际电脑分辨率一致, 是否为100%缩放,设置完毕并检查无误后点击确定继续"
Delay 1500
MsgBox "当前程序分辨率为" & 显示器宽度X & "*" & 显示器高度Y
While 1
// Call 调试()
//音乐播放功能
If 背景音乐flag = 1 Then
TracePrint "背景音乐播放"
Call Plugin.Media.Play("C:\大学网课脚本\配置\素材\背景音乐.mp3")
背景音乐flag = 0
End If
If 背景音乐flag = 2 Then
Call Plugin.Media.Stop()
TracePrint "背景音乐暂停"
背景音乐flag = 0
End If
//刷课功能控制
If 自动刷课flag = 1 Then
Call 刷网课()
End If
If 已经执行次数 = 最大执行次数 Then
TracePrint "自动刷课停止"
自动刷课flag = 0
MsgBox "已播放至设置次数,已播放 "&已经执行次数&" 节"
End If
//进度条展示
Form1.ProgressBar1.Value = (100 / 最大执行次数) * 已经执行次数
//刷新已经执行次数显示窗口
Form1.InputBox2.Text = 已经执行次数
//刷新分辨率窗口
Form1.SystemX.Text = 显示器宽度X
Form1.SystemY.Text = 显示器高度Y
//测试
计数器 = 计数器 + 1
If 计数器 Mod 30 = 2 Then
TracePrint "已经执行次数为"&已经执行次数
TracePrint "最大执行次数为" & 最大执行次数
End If
Delay 100
//退出程序
If 退出线程flag = 1 Then
Call Plugin.Media.Stop()
MsgBox "程序已退出"
Delay 1000
ExitScript
退出线程flag = 0
End If
Wend
//函数区域
//刷网课函数
Sub 刷网课()
If 计数器 Mod 30 = 5 Then
TracePrint "正在自动刷课"
End If
//识别跳转到新视频的播放按键 小范围499,329, (显示器宽度X-1920+1019), (显示器高度Y-1080+628)
FindPic 130,130,(显示器宽度X-1920+1729), (显示器高度Y-1080+850),"C:\大学网课脚本\配置\01播放功能识别\播放图标.bmp",0.9,视频X,视频Y
TracePrint 视频X&" * "&视频Y
If 视频X > 0 and 视频Y > 0 Then
TracePrint "识别到新视频的播放按键"
MoveTo 视频X + 41, 视频Y + 42
TracePrint "移动鼠标成功"
LeftClick 1
End If
Delay 1000
//获取学习下一节选项
FindPic 130,130, (显示器宽度X-1920+1615), (显示器高度Y-1080+968),"C:\大学网课脚本\配置\01播放功能识别\下一节视频.bmp",0.75,下一节X,下一节Y
If 下一节X>0 and 下一节Y>0 Then
MoveTo 下一节X+66,下一节Y+17
LeftClick 1
已经执行次数 = 已经执行次数 + 1
TracePrint "识别到学习下一节选项"
End If
Delay 1000
//自动点击播放图标小
FindPic 690,440,(显示器宽度X-1920+1040),(显示器高度Y-1080+605),"C:\大学网课脚本\配置\01播放功能识别\播放图标小.bmp",0.9,暂停图标X,暂停图标Y
TracePrint 暂停图标X&" * "&暂停图标Y
If 暂停图标X>0 and 暂停图标Y>0 Then
MoveTo 暂停图标X+17,暂停图标Y+17
LeftClick 1
TracePrint "自动点击播放图标"
End If
Delay 500
//清空坐标
视频X=0
视频Y = 0
下一节X = 0
下一节y = 0
暂停图标X = 0
暂停图标Y = 0
End Sub
Sub 调试()
While 0
TracePrint "移动左上角图标"
MoveTo 690,440
Delay 3000
TracePrint "移动右下角图标"&(显示器宽度X-1920+915)&"*"&(显示器高度Y-1080+600)
MoveTo (显示器宽度X-1920+1040),(显示器高度Y-1080+605)
Delay 3000
Wend
End Sub
//UI交互区域
//点击登录按钮后
Event Form1.user.Click
FindPic 250, 200, 显示器宽度X-300, 显示器高度Y-250,"C:\大学网课脚本\配置\00登录\微信图标.bmp", 0.80, 登录x, 登录y
//创建相对坐标为登录页面微信图标中心
登录相对坐标x=登录x+25
登录相对坐标y=登录y+25
If 登录x>0 and 登录y>0 Then
MoveTo 登录相对坐标x, 登录相对坐标y - 313//移动到账号输入窗口
Delay 150
LeftClick 1
Delay 150
SayString "12345"//输入学号
Delay 300
MoveTo 登录相对坐标x, 登录相对坐标y - 254//移动到密码窗口
Delay 150
LeftClick 1
Delay 150
SayString "12345"//输入密码
Delay 300
MoveTo 登录相对坐标x, 登录相对坐标y - 192//移动到密码窗口
Delay 150
LeftClick 1
//检查是否登录成功 默认扫描5秒
Delay 1000
i=0
While i < 8//扫描10次 等待4秒
i=i+1
FindPic 60, 48, 显示器宽度X-129, 显示器高度Y-376, "C:\大学网课脚本\配置\00登录\头像.bmp", 0.80, 头像x, 头像y
If 头像x > 1 and 头像y > 1 Then
i=11
Call Plugin.Media.Play("C:\大学网课脚本\配置\00登录\成功.mp3")
MsgBox "登录成功!"
End If
Delay 500
Wend
End If
Delay 100
登录x = 0
登录y = 0
头像x = 0
头像y = 0
End Event
//背景音乐开按键
Event Form1.backgroundmusicstart.Click
背景音乐flag = 1
TracePrint "点击成功"
End Event
//背景音乐关按键
Event Form1.backgroundmusicstop.Click
背景音乐flag = 2
TracePrint "点击成功"
计数器 = 计数器 + 1
End Event
//输入最大执行次数 控制输入框控件内容限制为3位数, 内容改变时改变
Event Form1.InputBox1.Change
最大执行次数= Right(Form1.InputBox1.Text,3)
End Event
//创建已经执行次数显示窗口
Event Form1.InputBox2.Change
End Event
//开始刷课按钮
Event Form1.course.Click
MessageBox "点击【确定】后开始自动放课 "&最大执行次数&" 节"
自动刷课flag = 1
End Event
//停止刷课按钮
Event Form1.coursestop.Click
自动刷课flag = 0
MsgBox "自动放课已手动停止,已播放 "&已经执行次数&" 节"
End Event
//退出程序按钮
Event Form1.Button1.Click
退出线程flag = 1
End Event
//设置电脑分辨率宽度
Event Form1.SystemX.Change
显示器宽度X= Right(Form1.SystemX.Text,5)
End Event
//设置电脑分辨率高度
Event Form1.SystemY.Change
显示器高度Y= Right(Form1.SystemY.Text,5)
End Event