TC官方合作论坛

 找回密码
 立即注册
查看: 528|回复: 3
打印 上一主题 下一主题

[问题] 求高手帮忙把下面3.0源码转换成4.源码谢谢

[复制链接]
跳转到指定楼层
楼主
发表于 2013-9-7 14:29:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上加入TC

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
求高手帮忙把下面3.0源码转换成4.源码谢谢
还有就是绑定窗口失败求高手随便帮我看看那里出错了先谢谢了


#import "Ansay.soft" AX  //调用暗雪代答插件
#import "dm.dmsoft" dm  //调用大漠插件
空间 游戏答题器
//定义默认空间
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,用于停止播放调用
string 窗口前缀  //给你的窗口定个前缀名称,如Game- ,那窗口系列就变成Game-1,Game-2类推,请设置独特,以便窗口名的利用
int 窗口前缀长度 //根据窗口前缀来设置,必须准确
功能 逻辑型 枚举窗口(逻辑型 脚本开关)
    bool 是否开启脚本=脚本开关 //用来判断枚举测试或直接启动脚本
    列表框.清空("句柄列表框")
    下拉框.清空("回收下拉框")
    列表框.清空("已暂停列表")
    //先读取枚举窗口参数
   // string Wtitle=编辑框.获得文本("WinTitle") //窗口标题
    //string Wclass=编辑框.获得文本("WinClass") //窗口类名
   // bool IsWinTitle=单选框.获得状态("EnumTitle") //选中则使用窗口标题枚举
    //开始枚举所需要的窗口
    字符型 窗口句柄集
    窗口句柄集=系统.枚举("TianLongBaBu WndClass",1) //使用窗口类名枚举   
    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,则启动线程
                dm_ret=dm.SetWindowText(转换.字符型转整型(切割句柄值[Yx]),窗口前缀+转换.整型转字符型(Yx))
                下拉框.增加文本("回收下拉框",窗口前缀+转换.整型转字符型(Yx))
                if(是否开启脚本)
                    线程句柄集[Yx]=线程.扩展开启("游戏答题器.窗口绑定",切割句柄值[Yx],"游戏答题器.大漠解绑","参数B不改")
                endif
                Yx=Yx+1
            endwhile
            列表框.增加文本("句柄列表框",".......总共找到"+转换.整型转字符型(c1)+"个符合条件的窗口.....")
        else
            //打开绑定窗口线程,如果脚本开关是TRUE,则启动线程
            if(是否开启脚本)
                单线程句柄=线程.扩展开启("游戏答题器.窗口绑定",窗口句柄集,"游戏答题器.大漠解绑","参数B不改")
            endif
            列表框.增加文本("句柄列表框",窗口句柄集+"..."+窗口.得到标题(转换.字符型转整型(窗口句柄集)))
            列表框.增加文本("句柄列表框",".......总共找到 1 个符合条件的窗口.....")
            WinNum=1
        endif      
    endif   
    返回 真
功能结束
功能 逻辑型 保存帐户信息()
    //获取代答帐号信息
    aUserName=编辑框.获得文本("gUserName") //帐户
    aPassWord=编辑框.获得文本("gPassWord") //密码  
    //保存用户及配置信息
    辅助.写配置("帐户信息","UserName",aUserName,SysPath+"Config.ini")
    辅助.写配置("帐户信息","UserPassWord",aPassWord,SysPath+"Config.ini")   
    //答题选项
    RadioAnsay=单选框.获得状态("GetAnsay")  
    //保存答题选项至配置文件
    if (RadioAnsay)
        辅助.写配置("答题选项","IsAnsay","1",SysPath+"Config.ini")
        辅助.写配置("答题选项","IsMusic","0",SysPath+"Config.ini")
    else
        辅助.写配置("答题选项","IsAnsay","0",SysPath+"Config.ini")
        辅助.写配置("答题选项","IsMusic","1",SysPath+"Config.ini")
    endif   
    返回 真
功能结束
功能 逻辑型 保存枚举选项()
    //保存枚举参数
    string WinClass=系统.枚举("TianLongBaBu WndClass",1) //窗口类名
    辅助.写配置("窗口类名","WinClass",WinClass,SysPath+"Config.ini")   
    返回 真
功能结束
功能 逻辑型 测试发题()
    //发图前要先查一下积分够不?不够就不让执行
    //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   
    返回 真
功能结束
功能 逻辑型 检查题分(字符型 用户帐号,字符型 用户密码)
    //判断题分是否足够   
    if (用户帐号=="" || 用户密码=="")
        help.messagebox("请填写正确的帐号及密码")
        return false
    else
        剩余题分=AX.GetCredits(用户帐号,用户密码)
        if(剩余题分<10) //关于题分获取返回值,请参考函数说明进行不同的弹窗提醒
            help.messagebox("题分不足:" + 转换.整型转字符型(剩余题分) +"分",SoftName)
            help.sleep(500)
            return false
        else
            标签.设置文本("JiFen","剩余题分:"+convert.inttostr(剩余题分)+"分")
            return true //表示题分充足,可以继续执行
        endif
    endif
功能结束
功能 逻辑型 窗口绑定(字符型 句柄值)
    //绑定窗口   
    int 窗口句柄=转换.字符型转整型(句柄值)
    dm_ret=dm.BindWindow(窗口句柄,"dx","dx2","dx",0)
    int X,Y //找图坐标   
    if (dm_ret==1)
        //开始打怪并判断是否有出现验证码,有就启动答题过程
        XX游戏答题器.打怪()
    else
        help.messagebox("窗口绑定失败",SoftName)
    endif   
    返回 真
功能结束
功能 整型 大漠解绑(字符型 参数)
    dm_ret = dm.UnBindWindow()
    返回 0
功能结束
功能 逻辑型 打怪()
    //窗口绑定后,开始打怪,血蓝我固定约30%开始自动回补,如需要由用户设置,可自设置控件供用户设定
    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)
            游戏答题器.答题()
            else
            游戏答题器.播放音乐()
            endif            
        endif
    循环结束   
    返回 真
功能结束
功能 逻辑型 答题()
    //开始有题目就进行答案相关操作代码
    int X,Y //图片坐标
    int TheAnswer //转换成整型的答案
    aUserName=编辑框.获得文本("gUserName") //帐户
    aPassWord=编辑框.获得文本("gPassWord") //密码
   
    if(XX游戏答题器.检查题分(aUserName,aPassWord))
        标签.设置文本("JiFen","剩余题分:"+convert.inttostr(剩余题分)+"分")
        aQuestionNo=AX.SendFile(aUserName,aPassWord,1002,SysPath+"screen.bmp",200)        
        //发送题目后
        下拉框.增加文本("题号下拉框",aQuestionNo)
        下拉框.设置选项("题号下拉框",下拉框.得到个数("题号下拉框")-1)        
        //循环等待答案
        循环(真)
            aStrs=""
            aStrs=AX.GetAnswer(aQuestionNo) //根据题号获取答案
            TheAnswer=转换.字符型转整型(aStrs) //将字符型答案转换成数值型,方便判断           
            if (aStrs!="")
                aMemo=编辑框.获得文本("ReportText")
                编辑框.设置文本("ReportText","题号="+aQuestionNo+" 答案:"+aStrs+"\r\n"+aMemo)
                //得到答案后,就结束循环,转到下面把答案用鼠标操作返回给游戏界面
                break
            endif
        循环结束
        if(dm.FindPic(1,1,1000,700,SysPath+"tu.bmp","202020",1.0,0,X,Y)!=-1)
            select (TheAnswer)
                case 1:
                dm_ret=dm.MoveTo(X+3,Y+173)
                dm_ret=dm.LeftClick()
                case 2:
                dm_ret=dm.MoveTo(X+3,Y+199)
                dm_ret=dm.LeftClick()
                case 3:
                dm_ret=dm.MoveTo(X+3,Y+224)
                dm_ret=dm.LeftClick()
                case 4:
                dm_ret=dm.MoveTo(X+3,Y+251)
                dm_ret=dm.LeftClick()
                default:
                aMemo=编辑框.获得文本("ReportText")
                编辑框.设置文本("ReportText","题号="+aQuestionNo+" 答案错误\r\n"+aMemo)               
                //如果答错了,就要报错  int Report(string QuestionNo) QuestionNo题号
                int ReportError=AX.Report(aQuestionNo)
            endselect
        endif
        help.sleep(500)
        //这里并没有经过精确的判断,下载的朋友可根据自己的需求扩展补充,比如答错怎么办,进监狱怎么办等
        //查找确定按钮
        if(dm.FindPic(1,1,1000,700,SysPath+"qd.bmp","404040",0.8,0,X,Y)!=-1)
            dm_ret=dm.MoveTo(X+23,Y+7)
            dm_ret=dm.LeftClick()
        endif
        help.sleep(2000)
    endif   
    返回 真
功能结束
功能 逻辑型 SaveUser_点击()
    //直接调用保存帐户信息
    游戏答题器.保存帐户信息()
    help.messagebox("帐户信息保存成功",SoftName)
    返回 真
功能结束
功能 逻辑型 初始化()
    //这些是插件注册
    辅助.注册插件("rc:Ansay.dll",真)
    辅助.注册插件("rc:dm.dll",真)
    辅助.命令("regsvr32 ansay.dll -s",false) //同时在注册一下,有时候上面会失败,需要再加这个注册命令
    辅助.命令("regsvr32 dm.dll -s",false)   
    SoftName="枫叶答题器—天龙八部3" //软件名称
    SysPath=系统.获取程序路径()  //获取当前程序执行的路径,用于全局调用!   
    //读取帐户配置信息
    编辑框.设置文本("gUserName",辅助.读配置("帐户信息","UserName",SysPath+"Config.ini"))
    编辑框.设置文本("gPassWord",辅助.读配置("帐户信息","UserPassWord",SysPath+"Config.ini"))
    //判断答题选项
    int aAnsay=转换.字符型转整型(辅助.读配置("答题选项","IsAnsay",SysPath+"Config.ini"))   
    if (aAnsay==1)
        单选框.选中("GetAnsay",真)
    else
        单选框.选中("GetMusic",真)
    endif      
    WinNum=0  //初始化时枚举窗口总数为0
    窗口前缀="答题-" //取个特别的名字,以便区别调用
    窗口前缀长度=字符串.长度(窗口前缀) //变量“窗口前缀”的字符长度,以便截取   
    //把资源文件复制到当前程序目录下
    文件.拷贝("rc:\\tu.bmp",SysPath+"tu.bmp")
    文件.拷贝("rc:\\qd.bmp",SysPath+"qd.bmp")
    文件.拷贝("rc:\\msg.mp3",SysPath+"msg.mp3")   
    返回 真
功能结束
功能 逻辑型 测试枚举窗口_点击()
    //直接调用枚举窗口函数
    XX游戏答题器.枚举窗口(假)
    返回 真
功能结束
功能 逻辑型 SaveEnum_点击()
    //直接调用保存枚举选项函数
    XX游戏答题器.保存枚举选项()
    help.messagebox("枚举窗口参数及选项保存成功",SoftName)
    返回 真
功能结束
功能 逻辑型 SaveOption_点击()
    //调用2个保存函数就可以了
    游戏答题器.保存帐户信息()
    游戏答题器.保存枚举选项()
    help.messagebox("所有设置均已保存",SoftName)
    返回 真
功能结束
功能 逻辑型 定时取答案_时钟()
    //这里添加当发送题目后,定时取答案
   
    //函数说明 string GetAnswer(string QuestionNo)
    aStrs=AX.GetAnswer(aQuestionNo)
   
    //判断如果取到答案才显示
    int aInts=字符串.长度(aStrs)
    if(aInts>0)
        aMemo=编辑框.获得文本("ReportText")
        编辑框.设置文本("ReportText","题号="+aQuestionNo+" 答案:"+aStrs+"\r\n"+aMemo)
        定时器.销毁("定时取答案")
    endif   
    返回 真
功能结束
功能 逻辑型 播放音乐()
    //播放音乐代码,音乐可根据自己爱好更换
    MusicId=help.playmp(SysPath+"msg.mp3")
    返回 真
功能结束
功能 逻辑型 AnsayTest_点击()
    //调用测试发题代码
    游戏答题器.测试发题()
    返回 真
功能结束
功能 逻辑型 GetAnswer_点击()
    //获取答案
    string 临时题号=下拉框.获得文本("题号下拉框")
    string 临时答案=AX.GetAnswer(临时题号)
    aMemo=编辑框.获得文本("ReportText")
    编辑框.设置文本("ReportText","题号="+临时题号+" 答案:"+临时答案+"\r\n"+aMemo)
    返回 真
功能结束
功能 逻辑型 关闭线程()
    if (WinNum!=0)
        if (WinNum==1)
            线程.关闭(单线程句柄)
        else
            //关闭多线程
            int i=0
            while(i<WinNum)
                线程.关闭(线程句柄集)
                i=i+1
                help.sleep(100)
            endwhile
        endif
    endif   
    返回 真
功能结束
功能 逻辑型 退出_点击()
    //退出时要关闭所有线程
    XX游戏答题器.关闭线程()
    辅助.退出()  
    返回 真
功能结束
功能 逻辑型 开始_点击()
    //调用枚举窗口,并通过脚本开关,直接启动脚本
    aUserName=编辑框.获得文本("gUserName")
    aPassWord=编辑框.获得文本("gPassWord")   
    //题分有够才开始
    if(游戏答题器.检查题分(aUserName,aPassWord))
        控件.有效("开始",假)
        控件.有效("停止",真)
        游戏答题器.枚举窗口(真)
    endif
    返回 真
功能结束
功能 逻辑型 停止_点击()
    //调用关闭线程
    控件.有效("开始",真)
    控件.有效("停止",假)
    列表框.清空("句柄列表框")
    列表框.清空("已暂停列表")
    下拉框.清空("回收下拉框")
    下拉框.清空("题号下拉框")
    编辑框.设置文本("ReportText","")
    列表框.增加文本("句柄列表框","脚本已经停止执行")
    游戏答题器.关闭线程()
    返回 真
功能结束
功能 逻辑型 窗口单停_点击()
    //窗口单停主要是利用窗口名+编号,截取编号来控制指定线程关闭
    int 暂停窗口编号=下拉框.得到选项("回收下拉框")   
    if (暂停窗口编号>=0)
        string 下拉框选中文本=下拉框.获得文本("回收下拉框")
        列表框.插入文本("已暂停列表",下拉框选中文本,暂停窗口编号)
        下拉框.删除文本("回收下拉框",暂停窗口编号)        
        //关闭完后,把所有清空
        int 正在运行窗口数量=下拉框.得到个数("回收下拉框")
        if(正在运行窗口数量==0)
            下拉框.清空("回收下拉框")
        endif        
        //关闭指定窗口线程
        线程.关闭(线程句柄集[convert.strtoint(字符串.移除(下拉框选中文本,窗口前缀长度,真))])
    else
        help.messagebox("未选定窗口或者窗口已经全部暂停",SoftName)
    endif   
    返回 真
功能结束
功能 逻辑型 窗口恢复_点击()
    //窗口恢复与窗口单停原理一样,利用截取窗口编号来控制线程重启
    int 恢复窗口编号=列表框.得到选项("已暂停列表")   
    if (恢复窗口编号>=0)
        string 列表框选中文本=列表框.得到选中文本("已暂停列表")
        int 临时截取窗口编号=convert.strtoint(字符串.移除(列表框选中文本,窗口前缀长度,真))      
        //这里有个关键点还需要,通过窗口名,得到窗口句柄,才能启动线程,所以记得要把窗口前缀设置特殊点,才不会出现重复的情况
        int 临时窗口句柄=窗口.找到窗口(列表框选中文本,"")      
        //执行相关删除及增加表框代码
        下拉框.增加文本("回收下拉框",列表框选中文本)
        列表框.删除文本("已暂停列表",列表框.得到选项("已暂停列表"))      
        //重启指定窗口线程        
        线程句柄集[临时截取窗口编号]=线程.扩展开启("游戏答题器.窗口绑定",convert.inttostr(临时窗口句柄),"游戏答题器.大漠解绑","参数B不改")
    else
        help.messagebox("未选中要恢复的窗口或窗口已全部恢复",SoftName)
    endif   
    返回 真
功能结束
功能 逻辑型 按钮0_点击()
//这里添加你要执行的代码
编辑框.设置文本("ReportText","")
返回 真
功能结束
空间结束
//空间结束语句

回复

使用道具 举报

地板
发表于 2013-9-7 18:38:34 | 只看该作者
论坛有转换器,下载地址:
http://bbs.tyuyan.com/thread-24447-1-1.html
回复 支持 反对

使用道具 举报

沙发
发表于 2013-9-7 15:25:44 | 只看该作者
。。没什么好改的。。。把里面的  逻辑型  这类 定义类型的字去掉就可以了。。。
回复 支持 反对

使用道具 举报

板凳
 楼主| 发表于 2013-9-7 17:10:33 | 只看该作者
回复 2楼498518599的帖子

int[] 线程句柄集      那这句应该怎么改
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18043773号

GMT+8, 2025-10-2 13:31 , Processed in 0.167206 second(s), 24 queries .

Powered by 海安天坑软件科技有限公司

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表