环境及素材

透明图设计

所谓的透明图是指:

  • 图片四个角的颜色相同,将会被识别为透明色,再将非主体部分全部用“透明”色遮盖,建议用黑色或红色(或主体为黑色较多)!注意,目标色不能与透明色一致!
  • 保存图片为.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"

示例程序-自动刷网课脚本

按键精灵2014_tKhigB98up


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