【2012-12-10 升级功能】增加窗口回收功能,可实现窗口单停,停止后可再次重启,方便对某个游戏窗口进行独立手工控制,附件下载已经更新!
【2012-12-7 首发】呵呵,刚研究TC没几天,感觉不错,果然是简单软件开发工具,名符其实啊,用了几天感觉对于脚本开发确实不错,并可根据自身需要调用其它插件来完成更强大的脚本功能。以下是我花2天时间写的一个天龙八部3的自动打怪,回血回蓝,自动喊话,并集成暗雪人工代答接口,完成答题流程。
上实例旨在交流学习,演示从截取防挂机验证码图片,并利用答题接口发送题目,回答等基本流程。并涉及一些其它的TC知识点,如:配置文件的的读写,保存功能;还有函数调用方法,插件调用注册。利用大漠绑定窗口,找图找色等一系列动作。
注意:本程序绝无病毒,但360还是会提示,可能是因为调用大漠插件的源因,或者可能是答题时访问了我们的服务器的原因,请放心使用。或者您可以直接帮我们点击一下让360信任也行,这样多人提交后,以后就不人提示了,谢谢!
声明:本人技术有限,还是有很多技术难题没有攻克,比如:”自动捡包“暂时没有实现,过后如果研究出来,我会再发升级版上来供大家参考交流学习;还有有些如答案正确与否的判断,报错,及同是发题或题目延迟等功能,还没有完善,日后我会逐渐完善的。此案例旨在完成一个答题的基本流程及打怪等功能,其它未完善功能,请根据自身需要来修改扩展,欢迎指正,也欢迎TC爱好者交流学习。
先上传部分源码,附件请回贴索取,支持一下喔,谢谢!
#import "Ansay.soft" AX //调用暗雪代答插件
#import "dm.dmsoft" dm //调用大漠插件
//插件下载:http://www.ansay.net/Download.asp
//函数说明:http://www.ansay.net/ArticleShow.asp?Id=3
//插件实例:http://www.ansay.net/ArticleShow.asp?Id=4
空间 XX游戏答题器
//定义默认空间
string SoftName //软件名称
string aUserName //保存帐户
string aPassWord //保存密码
bool RadioAnsay //是否启用暗雪答题
bool RadioMusic //是否启用播放音乐
string SysPath //程序所在路径
string aQuestionNo //题号
string aStrs //答案
string aMemo //答题实时状态显示内容
int dm_ret //大漠窗口绑定返回状态
int[] 线程句柄集
int WinNum //枚举到的总窗口数量,用于结束退出
int 单线程句柄 //单个窗口时
int 剩余题分 //剩余题分
int MusicId //音乐播放ID,用于停止播放调用
功能 逻辑型 枚举窗口(逻辑型 脚本开关)
bool 是否开启脚本=脚本开关 //用来判断枚举测试或直接启动脚本
列表框.清空("句柄列表框")
//先读取枚举窗口参数
string Wtitle=编辑框.获得文本("WinTitle") //窗口标题
string Wclass=编辑框.获得文本("WinClass") //窗口类名
bool IsWinTitle=单选框.获得状态("EnumTitle") //选中则使用窗口标题枚举
//举例说明:比如天龙八部,使用窗口标题枚举的话,可以写“天龙八部”,
//但如果此时有其它程序或窗口名也包含“天龙八部”四个字的话,也会被被包括进来。
//因此,推荐使用类名枚举,天龙八部的类名是“TianLongBaBu WndClass”这样就不会枚举到其它窗口了
//开始枚举所需要的窗口
字符型 窗口句柄集
字符型 截取的句柄
字符型 当前窗口标题
整型 分隔符位置
整型 循环枚举次数
循环枚举次数=10
//使用窗口名称枚举
if (IsWinTitle)
窗口句柄集=系统.枚举(Wtitle,0)
else
窗口句柄集=系统.枚举(Wclass,1) //使用窗口名称枚举
endif
if (窗口句柄集=="")
help.messagebox("枚举窗口参数未设置错误或找不到符合条件的窗口",SoftName)
else
string[] 切割句柄值 //用来分解窗口句柄
bool 切割窗口句柄集=字符串.分割(窗口句柄集,"|",切割句柄值)
int c1,c2,c3 //句柄分割后的句柄值
int Yx=0
if(切割窗口句柄集)
数组.大小(切割句柄值,c1,c2,c3)
线程句柄集=整型[c1]
WinNum=c1 //把枚举到的窗口数量给全局变量,用于结束线程使用
while(Yx<c1)
列表框.增加文本("句柄列表框",切割句柄值[Yx]+"..."+窗口.得到标题(转换.字符型转整型(切割句柄值[Yx])))
//设定窗口标题,并打开绑定窗口线程,如果脚本开关是TRUE,则启动线程
if(是否开启脚本)
dm_ret=dm.SetWindowText(转换.字符型转整型(切割句柄值[Yx]),"Game-"+转换.整型转字符型(Yx))
线程句柄集[Yx]=线程.扩展开启("XX游戏答题器.窗口绑定",切割句柄值[Yx],"XX游戏答题器.大漠解绑","参数B不改")
endif
Yx=Yx+1
endwhile
列表框.增加文本("句柄列表框",".......总共找到"+转换.整型转字符型(c1)+"个符合条件的窗口.....")
else
//打开绑定窗口线程,如果脚本开关是TRUE,则启动线程
if(是否开启脚本)
单线程句柄=线程.扩展开启("XX游戏答题器.窗口绑定",窗口句柄集,"XX游戏答题器.大漠解绑","参数B不改")
endif
列表框.增加文本("句柄列表框",窗口句柄集+"..."+窗口.得到标题(转换.字符型转整型(窗口句柄集)))
列表框.增加文本("句柄列表框",".......总共找到 1 个符合条件的窗口.....")
WinNum=1
endif
endif
返回 真
功能结束
功能 逻辑型 测试发题()
//发图前要先查一下积分够不?不够就不让执行
//int GetCredits(string UserId,string Password)
aUserName=编辑框.获得文本("gUserName")
aPassWord=编辑框.获得文本("gPassWord")
if(XX游戏答题器.检查题分(aUserName,aPassWord))
//函数说明 string SendFile(string UserId,string Password,int gItemNo,string FilePath,int TimeOut)
//先弹出对话框选取图片文件,支持JPG,GIF,BMP,WMF,ICO
string aFilePath=file.dialog(1,"jpg文件(*.jpg)|*.jpg|gif文件(*.gif)|*.gif|bmp文件(*.bmp)|*.bmp||")
aMemo=编辑框.获得文本("ReportText")
//执行函数
aQuestionNo=AX.SendFile(aUserName,aPassWord,1001,aFilePath,200)
下拉框.增加文本("题号下拉框",aQuestionNo)
下拉框.设置选项("题号下拉框",下拉框.得到个数("题号下拉框")-1)
//发送图片文件后,启动定时器
定时器.注册("定时取答案",3000)
标签.设置文本("JiFen","剩余题分:"+convert.inttostr(剩余题分)+"分")
endif
返回 真
功能结束
功能 逻辑型 窗口绑定(字符型 句柄值)
//绑定窗口
int 窗口句柄=转换.字符型转整型(句柄值)
dm_ret=dm.BindWindow(窗口句柄,"dx","dx2","dx",0)
int X,Y //找图坐标
if (dm_ret==1)
//XX游戏答题器.自动喊话(窗口句柄)
//开始打怪并判断是否有出现验证码,有就启动答题过程
XX游戏答题器.打怪()
else
help.messagebox("窗口绑定失败",SoftName)
endif
返回 真
功能结束
功能 整型 大漠解绑(字符型 参数)
dm_ret = dm.UnBindWindow()
返回 0
功能结束
功能 逻辑型 自动喊话(整型 句柄窗口)
//自动喊话写在这里,可根据自己需要的地方调用,也可进行扩展,比如增加多句喊话
循环 (真)
dm.SendString(句柄窗口,"代答请找暗雪人工代答,正确率97%以上。") //可通过控件来做设置给玩家自定义
辅助.等待(1000)
dm.KeyPress(13)
辅助.等待(辅助.随机数(2000,5000))
循环结束
返回 真
功能结束
功能 逻辑型 打怪()
//窗口绑定后,开始打怪,血蓝我固定约30%开始自动回补,如需要由用户设置,可自设置控件供用户设定
int 血=109
int 蓝=109
int X,Y //找图坐标
bool GetAnsay=单选框.获得状态("GetAnsay") //是否启用答题
循环(真)
help.sleep(50)
if(dm.FindPic(1,1,1000,700,SysPath+"tu.bmp","202020",1.0,0,X,Y)!=-1)
//如果找到图,有码,就把图存下来
dm_ret = dm.Capture(X-28,Y+94,X+135,Y+262,SysPath+"screen.bmp")
//if(GetAnsay) 如果你希望播放音乐,请把下面的236-240行代码注释取消
XX游戏答题器.答题()
//else
//XX游戏答题器.播放音乐()
//endif
endif
dm_ret=dm.FindColor(320,34,321,36,"ea1200-202020",1.0,0,X,Y)
if(dm_ret==1)
dm_ret=dm.KeyPress(112)
else
dm_ret=dm.KeyDown(17)
help.sleep(10)
dm_ret=dm.KeyPress(9)
help.sleep(10)
dm_ret=dm.KeyUp(17)
endif
dm_ret=dm.FindColor(血,34,血+1,36,"ea1200-202020",1.0,0,X,Y)
if(dm_ret==0)
dm_ret=dm.KeyPress(119)
endif
dm_ret=dm.FindColor(蓝,42,蓝+1,44,"3736ea-303030",1.0,0,X,Y)
if(dm_ret==0)
dm_ret=dm.KeyPress(120)
endif
dm_ret=dm.FindColor(150,82,151,84,"ea0e00-303030",1.0,0,X,Y)
if(dm_ret==0)
dm_ret=dm.KeyPress(121)
endif
循环结束
返回 真
功能结束
|