1. 引子
好友比较多,每天回名片赞回到手痛。
之前写过一个更简单版本(直接指定坐标点击……),重装系统丢了,正好重新写了一个跑在虚拟机里的,不耽误我干活。
2.解释说明
- 核心还是模拟点击,vbs就是一个框架帮助你实现逻辑;
- 此代码运行在虚拟机里所以时延我调的比较长,有需要自己改;
- 放名单的txt文件:要点赞的好友的qq号码的列表,可以巧用qq邮箱+excel实现批量导出和处理。不直接读取xls文件的原因是运行效率低。这个文件的格式是每个qq摆一行,然后一行一行这样接下去。
- inf.bmp:在qq主窗口的搜索框中输入qq,弹出对应的用户,鼠标指向这个用户会发现右面有个名片图标,截下来;
- qq.bmp:qq主窗口左上角那只企鹅,截下来;
- quit.bmp:打开一个人的资料卡片之后的右上角的那个×,截下来;
- 4-6条中所说的三个图在代码中必须写成绝对路径。
3.运行环境
- 硬件:i7-6700hq, 16g, pcie
- 虚拟机:vmware 15 pro
- 虚拟环境:win7 ultimate sp1
- qq版本:目前最新版(9.1.3)
- 按键精灵2014(能下到的最新版)
4.暂时还存在的问题
遇到名单里的好友被删除之后不会跳过,会一直卡在那里不动,要手动操作一下。
之后加一个模块实现自动跳过并告警。
5. 代码
核心功能封装成子过程了。
引用请标注来源!
引用请标注来源!
引用请标注来源!
上代码:
Dim round, MyArray, time, i
round = 199
start = 1
Text = Plugin.File.ReadFileEx("放名单的txt文件")
MyArray = Split(Text, "|")
For time = start To round
i = time - 1
SayString Cstr(MyArray(i))
Delay 1500
Call click_inf()
Delay 2000
Call click_zan()
Delay 100
Call click_qq()
Delay 100
Next
Sub click_inf()
Rem click_inf_1
XY = Plugin.Pic.FindPic(500, 0, 1920, 1080, "inf.bmp", 0, 1)
iZB = InStr(XY, "|")
intX = CLng(Left(XY, iZB - 1))
intY = CLng(Right(XY, Len(XY) - iZB))
If intX > 0 And intY > 0 Then
MoveTo intX + 5, intY + 5
Delay 100
LeftClick 1
Goto click_inf_2
Else
Goto click_inf_1
End If
Rem click_inf_2
TracePrint "click info."
End Sub
Sub click_zan()
Dim tmp
Hwnd = Plugin.Window.Foreground()
For tmp = 1 To 20
Call Plugin.Bkgnd.LeftClick(Hwnd, 332, 340)
Delay 300
Next
//Call Plugin.Bkgnd.LeftClick(Hwnd, 708, 27)
Rem click_zan_1
XY = Plugin.Pic.FindPic(500, 0, 1920, 800, "quit.bmp", 0, 1)
iZB = InStr(XY, "|")
intX = CLng(Left(XY, iZB - 1))
intY = CLng(Right(XY, Len(XY) - iZB))
If intX > 0 And intY > 0 Then
MoveTo intX + 5, intY + 5
Delay 100
LeftClick 1
Goto click_zan_2
Else
Goto click_zan_1
End If
Rem click_zan_2
TracePrint "click zan. No " & Clng(i+1)
End Sub
Sub click_qq()
Rem click_qq_1
XY = Plugin.Pic.FindPic(500, 0, 1920, 500, "qq.bmp", 0, 1)
iZB = InStr(XY, "|")
intX = CLng(Left(XY, iZB - 1))
intY = CLng(Right(XY, Len(XY) - iZB))
If intX > 0 And intY > 0 Then
MoveTo intX + 5, intY + 5
Delay 100
LeftClick 1
Goto click_qq_2
Else
Goto click_qq_1
End If
Rem click_qq_2
End Sub
6. 要点
以下这几种高级功能均由按键精灵内建,可以直接调用,非常方便。
- 文本文档的逐行读取
Plugin.File.ReadFileEx()
; - 针对透明窗口的找图操作(参考封装的三个子过程中的重复操作);
- 在后台模拟操作
Plugin.Bkgnd.LeftClick()
。
7. 后记
欢迎交流学习。持续更新。