按键精灵qq群私发脚本实战Day1总结:
总体思路及设计方法:
1.首先在手机端主界面通过颜色命令里边的FindMultiColor(多点找色命令),对qq这款app的图标进行抓取(抓取代码非手动输入,而是通过抓抓操作,在所有点选取完毕后,直接生成代码,调试无误后,复制即可)。定位时,为了显示色差,总共分为了5个不同点的位置,分别是图标左上角的白色,企鹅头部的黑色,嘴部的黄色,围巾的红色,以及脚部的黄色,抓抓操作以及图片以及代码如下:
Sub openQQ() //通过Sub 子程序命令 对该过程进行封装,方便直接调用,类似与java中的方法
Dim intX,intY //(通过多点找色),准确抓取qq这款APP的图标位置 坐标必须用Dim先定义好,否则会出错
FindMultiColor 0,0,0,0,"FFFFFF","49|-1|FFFFFF,25|3|000000,28|21|08B0FA,18|40|1E1EE9,12|59|08B0FA",0,0.9,intX,intY
If intX > -1 And intY > -1 Then
Delay 1000
Tap intX, intY //通过触摸命令里的Tap命令找到图标位置,并打开坐标位置
Else
EndScript //如果没找到,则脚本停止运行
End If
End Sub
2.在成功进入qq界面后,为了保证页面的整洁,避免色差干扰。我们要保证当前消息界面为空,没有任何消息,再选择联系人进行群发操作。那我们就要删除所有对话框,保证界面此时为空,则用FindMultiColor(多点找色命令)对未读消息的红点进行小范围精准定位,用再流程控制阶段用if else 语句分为以下两步:
2.1我们要判断当前消息界面是否有新消息未读,如果有,则
(1)我们需要点击该对话框进入聊天界面进行回复(回复语句自定义)
(2)回复完成后,滑动屏幕,退出到消息界面
(3)删除当前对话框
2.2如果当前没有消息未读,则只删除聊天对话框,图片和代码如下:
//2.删除所有聊天对话框,首先要判断是否有新 消息未读(通过多点找色找红点点)
Sub deleteAndOpean() //通过控制命令里的Sub子程序 对该过程进行封装,方便直接调用
Dim intX,intY
FindMultiColor 648,328,706,378,"FFFFFF","16|-3|314CF7,32|3|FFFFFF,0|29|FFFFFF,16|31|314CF7,30|29|FFFFFF",0,0.9,intX,intY //FindMultiColor 对新消息的提示红点进行小范围精准定位
If intX > -1 And intY > -1 Then //用 if else语句进行判断
Delay 1000
Tap 246, 319 //如果有未读消息,则打开该对话框
Delay 1000 //延迟1秒 1000的单位是ms 毫秒(上下同)
Answer() //调用answer子程序
Else
Touch 303, 321, 2000 //如果没有未读消息,则点击聊天框2秒钟,弹出删除按钮
Delay 500
Tap 397, 196 //点击删除按钮删除聊天框
End If
End Sub
Sub Answer() //如果有未读消息,通过这个子程序进行回复
Tap 114, 1159 //将光标定位到聊天输入窗口
Delay 1000 //给1s延迟
InputText "欢迎加入狂神说按键精灵交流群"
Delay 1000
Tap 621,1153 //定位到发送按钮,通过触摸命令里的Tap命令,点击发送
Delay 500 //延迟0.5s
Swipe 51,780,568,840,200 //通过触摸命令里的Swip滑动命令向左滑动回到qq主消息界面
Delay 1000
deleteAndOpean() //再次调用deleteAndOpean子程序
//注:此时再次调用deleteAndOpean()子程序,是因为该消息已经回复,还需要需要进行对话框的删除操作。
End Sub
3.我们可以通过颜色命令里的CmpColorEx(多点比色命令),先对当前消息界面的为空时的颜色进行抓取,选取十个点,又图可知,若界面为空,10个点的颜色相同,若此时当前消息界面仍有聊天框(必定在第一行),那么我们就再删除完第一行的对话框后,如果下面还有对话框,会自动弹上第一行,此时我们要判断整个消息界面是否还有对话框,如果有,则调用Sub deleteAndOpean()子程序再次进行删除(由于子程序的反复调用,实际上此步骤是循环操作,直到消息界面为空时才停止),如果没有,我们就可以选择底部的联系人,再选择对应的群,进行私发操作了。
//多点比色,比较当前页面是否有暂存聊天框,是否是空白
Sub openPerson()
If CmpColorEx("82|314|FAF6F5,78|336|FAF6F5,91|355|FAF6F5,65|385|FAF6F5,604|317|FAF6F5,665|331|FAF6F5,336|402|FAF6F5,314|306|FAF6F5,629|385|FAF6F5,193|370|FAF6F5",0.9) = 1 Then
Delay 1000 //if判断,如果当前页面空白,没有对话框
Tap 265, 1210 //点击打开联系人
Delay 1000
Tap 218, 466 //点击群聊
Delay 1000
Tap 269, 574 //选择需要发送的群
Delay 1000
Tap 661, 100 // 打开菜单栏
Delay 1000
Tap 625,489 //打开群成员列表
Else
deleteAndOpean() //如果还有其他对话框,调用这个子程序删除
Delay 1000
openPerson() //继续判断是否有对话框
End If
End Sub
通过以上的操作,可以准确的在手机主界面自动打开qq,进入qq后,自动检测当前消息界面是否为空,是否有暂存聊天框,以及未读消息。如果有,则自动回复所有未读消息,并清空所有聊天框,在消息界面清空后,点击联系人按钮,选择需要私发的群,打开菜单栏,打开群成员列表,进行群成员的选择
Day1实战整体源码如下:
//1.openQQ
Call openQQ() //调用openQQ子程序
Delay 1000 //注意,注意,注意 调用下一个子程序之前,需要有一个延迟,否则程序会执行错误
Call deleteAndOpean()
Delay 1000
Call openPerson()
Delay 1000
Sub openQQ()
Dim intX,intY //(通过多点找色),准确抓取qq这款APP的图标位置
FindMultiColor 0,0,0,0,"FFFFFF","49|-1|FFFFFF,25|3|000000,28|21|08B0FA,18|40|1E1EE9,12|59|08B0FA",0,0.9,intX,intY
If intX > -1 And intY > -1 Then
Delay 1000
Tap intX, intY //找到图标位置,打开坐标位置
Else
EndScript //如果没找到,则脚本停止运行
End If
End Sub
//定义一个过程,可以在脚本中调用这个过程
//2.删除所有聊天对话框,首先要判断是否有新 消息未读(通过多点找色找红点点1)
Sub deleteAndOpean()
Dim intX,intY
FindMultiColor 648,328,706,378,"FFFFFF","16|-3|314CF7,32|3|FFFFFF,0|29|FFFFFF,16|31|314CF7,30|29|FFFFFF",0,0.9,intX,intY
If intX > -1 And intY > -1 Then
Delay 1000
Tap 246, 319 //如果有未读消息,则打开该对话框
Delay 1000
Call Answer() //通过Call方法调用answer子程序,Call可以省略
Else
Touch 303, 321, 2000 //如果没有未读消息,则点击聊天框2秒钟,弹出删除按钮
Delay 500
Tap 397, 196 //点击删除按钮删除聊天框
End If
End Sub
Sub Answer()
Tap 114, 1159 //将光标定位到聊天输入窗口
Delay 1000
InputText "欢迎加入狂神说java交流群,群号78846958"
Delay 1000
Tap 621,1153 //点击发送
Delay 500
Swipe 51,780,568,840,200 //向左滑动回到qq主消息界面
Delay 1000
deleteAndOpean() //调用deleteAndOpean子程序
End Sub
//定义一个过程,可以在脚本中调用这个过程
//多点比色,比较当前页面是否有暂存聊天框,是否是空白
Sub openPerson()
If CmpColorEx("82|314|FAF6F5,78|336|FAF6F5,91|355|FAF6F5,65|385|FAF6F5,604|317|FAF6F5,665|331|FAF6F5,336|402|FAF6F5,314|306|FAF6F5,629|385|FAF6F5,193|370|FAF6F5",0.9) = 1 Then
Delay 1000 //if判断,如果当前页面空白,没有对话框
Tap 265, 1210 //点击打开联系人
Delay 1000
Tap 218, 466 //点击群聊
Delay 1000
Tap 269, 574 //选择需要发送的群
Delay 1000
Tap 661, 100 // 打开菜单栏
Delay 1000
Tap 625,489 //打开群成员列表
Else
deleteAndOpean() //如果还有其他对话框,调用这个子程序删除
Delay 1000
openPerson() //继续判断是否有对话框
End If
End Sub
问题总结:
-
每个大步骤执行前,以及执行完毕后,都需要加一个延迟,一般为1000ms(1s),否则会有热键冲突,导致两个命令之间没有缓冲,脚本无法识别,导致运行失败。同时,每个小命令,例如Tap,Swipe,Touch等,在执行之前也需要加一个缓冲,一般为500ms,或者1000ms
-
在执行Answer子程序时,每次执行Swipe命令,总是出错误,原因在于没有清空当前的聊天窗口,导致命令执行位置与窗口内已发送消息的所在位置冲突,因此每次执行前,都应该先清空聊天窗口内的消息。另外如果清空之后还是不能正常运行,则是因为Swipe选择的点可能有问题,可以重新选点,然后把移动所需时间调短一点,一般time<500ms即可
-
调用子程序的时候,可以不用加Call,例如调用openQQ子程序,可以用openQQ或者openQQ()两种方式进行调用。但是如果前面加上 Call,那么语法格式必须为 Call openQQ(),后面必须有(),否则会报错
Day2将会完整的带领有兴趣的小伙伴做完整个qq群私发脚本,未完代更…