TC官方合作论坛

 找回密码
 立即注册
查看: 1410|回复: 7

[问题] 多次绑定一个窗口无法正常解绑问题

[复制链接]
发表于 2013-12-11 15:05:30 | 显示全部楼层 |阅读模式

马上加入TC

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

x
我发现脚本绑定同一个窗口2次,解绑的话,窗口就无法正常释放窗口,必须退出脚本程序游戏窗口才正常释放.
而我只绑定一次的话,解绑就没问题.
经过调试后总结出来的问题原因.绑定2次或以上,再解绑窗口的话,必须解绑而且退出脚本才能正常解绑.
请教高手指点原因,谢谢.
回复

使用道具 举报

发表于 2013-12-11 15:17:03 | 显示全部楼层
你解绑的代码是什么上代码吧,没代码 都不好猜,还有你是怎么开启绑定的?用线程开启的吗?
如果是,在解绑的时候 也要把 绑定线程关掉
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-11 15:28:23 | 显示全部楼层
芹菜 发表于 2013-12-11 15:17
你解绑的代码是什么上代码吧,没代码 都不好猜,还有你是怎么开启绑定的?用线程开启的吗?
如果是,在解绑 ...

代码太长,我大致说下吧,程序是按F1的话开启一个线程运行A功能,A功能里面写着绑定窗口,当A运行满足一个条件时候会再开启一个线程,这个线程运行B功能,B功能里面也有绑定窗口.
这个程序运行下去会先关闭B线程.再关闭A线程,再解绑 窗口,这里只解绑了一次窗口.
是不是B线程关闭时候也要解绑下窗口才行?回去我扩展开启B线程调解绑试试
回复 支持 反对

使用道具 举报

发表于 2013-12-11 15:49:31 | 显示全部楼层
B功能绑定的窗口和A绑定的是不是 一个窗口?
回复 支持 反对

使用道具 举报

发表于 2013-12-11 15:54:45 | 显示全部楼层
代码看看
回复

使用道具 举报

 楼主| 发表于 2013-12-11 16:01:39 | 显示全部楼层
芹菜 发表于 2013-12-11 15:49
B功能绑定的窗口和A绑定的是不是 一个窗口?

是一个窗口
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-11 16:06:41 | 显示全部楼层
空间 测试者Aid

变量 ct=数组[4],窗口句柄=数组[4],多开区分=数组[4],线程数组=数组[4],地图找怪名XC=数组[4]


功能 寻路参数(参数)
        
        //*********绘制阿基米德螺旋线*********
        //*阿基米德螺旋线的标准极坐标方程为
        //ρ=at+P0
        //式中:
        //a—阿基米德螺旋线系数,mm/°,表示每旋转1度时极径的增加(或减小)量;
        //t—极角,单位为度,表示阿基米德螺旋线转过的总度数;
        //p0—当t=0°时的极径,mm。
        //***p0为初始极径
        初始极径=20    // 这个的值是控制初始的内圈大小,值越大,内圈越大
        倍数 = 3 //放大倍数,这里也可以根据情况做调整
        系数=2      //阿基米德螺旋线系数
        圆周率 = 3.1415926  
        
        ////画线的起始点坐标(起始x,起始y)
        // 表示的是要从那一点开始为基准点,逐渐向外扫描
        起始x=寻路x,起始y=寻路y
        终点x,终点y
        极角=圆周率/2
        ///////移动到起点
        ct[参数].chentaomt(起始x,起始y+倍数*初始极径+系数*极角)
功能结束

功能 寻路(参数)
        
        辅助.等待(辅助.随机数(65,115))
        // 按下鼠标左键开始准备画线。具体在游戏里使用的时候,这句要去掉
        // 因为这里是要在画板里画线看执行效果才加的鼠标按下命令
        //遍历(i=0;i<50;i++)   // 这里表示一共执行3000次。 具体要执行多少次。根据不同情况调整
        ct[参数].KeyPress(9)
        辅助.等待(辅助.随机数(91,123))
        半径 = 初始极径+系数*极角    //表示的是圆的半径
        // 计算鼠标移动的下一点坐标位置
        终点x = 起始x+类型.转整型(倍数*半径*数学.余弦值(极角))
        终点y = 起始y+类型.转整型(倍数*半径*数学.正弦值(极角))
        // 极角的增加值越大,跨的角度就越大。这个值的大小,可以自我调整达到理想状态
        // 比如增加量可以用以下的值 0.02 0.03 0.05 0.07 0.08 0.1 ……
        // 值越大,跨的角度越大,误差越大,但是消耗的时间短
        // 值越小,跨的角度越小,误差越小,但是消耗的时间长
        极角 = 极角 + 0.45   // 极角 = 极角 + 0.05
        // 鼠标移动到下一点的位置,完成一次画线操作
        ct[参数].chentaomt(终点x,终点y)
        调试输出("终点y="&终点y)
        // 此处的延时可以根据情况是否添加。
        辅助.等待(辅助.随机数(22,46))
        如果(终点y>=188&&终点y<=671)
                调试输出("在地图内可以点击")
                辅助.等待(辅助.随机数(49,70))
                ct[参数].LeftClick()
                辅助.等待(辅助.随机数(38,58))
                ct[参数].RightClick()
                调试输出("点击完毕"&i)
                辅助.等待(辅助.随机数(59,77))
               
        否则
                调试输出("不在地图内不去点击")
        如果结束
        //**************************************************
        // 此处可以加入判断鼠标特征码 颜色值等等是否与目标的一致,不一致的话就不管,继续执行
        // 一致的话,那么就进入判断语句,执行相应的功能,之后返回 真
        //**************************************************
        //遍历结束
        
功能结束



功能 地图找怪名ID(参数)
        
        绑定=ct[参数].chentaobwdex(窗口句柄[参数],"dx2","windows2","dx.keypad.input.lock.api|dx.keypad.state.api|dx.keypad.api|dx.keypad.raw.input",0,101)
        辅助.等待(5000)
        如果(绑定==0)
                辅助.消息框("绑定窗口失败!")
                //辅助.退出()
                绑定=ct[参数].GetLastError()
                辅助.消息框("失败错误码"&绑定)
        如果结束
        字库设置=ct[参数].SetDict(0,"字.txt")
        辅助.等待(123)
        如果(字库设置!=1)
                辅助.消息框("字库设置失败")
        如果结束
        怪IDx=0
        怪IDy=0
        调试输出("怪值="&怪值)
        循环(真)
                选择(怪值)
                        条件 1:
                        ct[参数].FindPic(0,0,1024,768,"1.bmp","000000",1.0,0,怪IDx,怪IDy)
                        条件 2:
                        ct[参数].FindPic(0,0,1024,768,"2.bmp","000000",1.0,0,怪IDx,怪IDy)
                        条件 3:
                        ct[参数].FindPic(0,0,1024,768,"3.bmp","000000",1.0,0,怪IDx,怪IDy)
                        条件 4:
                        ct[参数].FindPic(0,0,1024,768,"4.bmp","000000",1.0,0,怪IDx,怪IDy)
                        条件 5:
                        ct[参数].FindPic(0,0,1024,768,"5.bmp","000000",1.0,0,怪IDx,怪IDy)
                        条件 6:
                        ct[参数].FindPic(0,0,1024,768,"6.bmp","000000",1.0,0,怪IDx,怪IDy)
                        条件 7:
                        ct[参数].FindPic(0,0,1024,768,"7.bmp","000000",1.0,0,怪IDx,怪IDy)
                        条件 8:
                        ct[参数].FindPic(0,0,1024,768,"8.bmp","000000",1.0,0,怪IDx,怪IDy)
                        条件 9:
                        ct[参数].FindPic(0,0,1024,768,"9.bmp","000000",1.0,0,怪IDx,怪IDy)
                        条件 10:
                        ct[参数].FindPic(0,0,1024,768,"10.bmp","000000",1.0,0,怪IDx,怪IDy)
                        调试输出("***地图中怪****IP="&怪IDx)
                选择结束
                如果(怪IDx>0)
                        测试者Aid.清洁窗口(参数)
                        辅助.等待(100)
                        ct[参数].chentaomt(怪IDx,怪IDy+15)
                        辅助.等待(辅助.随机数(88,111))
                        ct[参数].LeftClick()
                        辅助.等待(辅助.随机数(88,111))
                        ct[参数].LeftClick()
                        辅助.等待(辅助.随机数(88,111))
                        ct[参数].LeftClick()
                        测试者Aid.走到怪旁边(参数)
                如果结束
        循环结束
        
功能结束




功能 主线程(参数)
        变量 参数
        
        ctpath=ct[参数].chentaosph(辅助.获取资源路径("rc:"))
        如果(ctpath!=1)
                辅助.消息框("设置路径失败!")
                辅助.退出()
        如果结束
        
        绑定=ct[参数].chentaobwdex(窗口句柄[参数],"dx2","windows2","dx.keypad.input.lock.api|dx.keypad.state.api|dx.keypad.api|dx.keypad.raw.input",0,101)
        辅助.等待(5000)
        如果(绑定==0)
                辅助.消息框("绑定窗口失败!")
                //辅助.退出()
                绑定=ct[参数].GetLastError()
                辅助.消息框("失败错误码"&绑定)
        如果结束
        
        调试输出("开始执行!")
        调试输出("主线程里面参数="&参数)
        //ct[参数].SetAero(0)
        字库设置=ct[参数].SetDict(0,"字.txt")
        辅助.等待(123)
        如果(字库设置!=1)
                辅助.消息框("字库设置失败")
        如果结束
        //下面开始执行任务功能
        遍历(i=0;i<479;i++)
               
               
                循环(真)
                        测试者Aid.飞回NPC(参数)
                        辅助.等待(555)
                        如果(飞回NPC成败==1)
                                测试者Aid.接任务(参数)
                                跳出
                        如果结束
                循环结束
                //接任务完毕
                循环(真)
                        辅助.等待(455)
                        如果(接任务成败==1)
                                测试者Aid.打开任务栏(参数)
                                跳出
                        否则
                                测试者Aid.接任务(参数)
                        如果结束
                        //测试者Aid.接任务()
                循环结束
                辅助.等待(277)
                循环(真)
                        辅助.等待(255)
                        如果(打开任务栏成败==1)
                                测试者Aid.任务栏怪名ID(参数)
                                跳出
                        如果结束
                循环结束
标记1:
               
                循环(真)
                        辅助.等待(355)
                        如果(任务栏找怪名成败==1)
                                地图找怪名XC[参数]=线程.开启("测试者Aid.地图找怪名ID",参数)
                                调试输出("开启地图判断怪线程")
                                辅助.等待(89)
                                跳出
                        如果结束
                循环结束
               
               
        遍历结束
功能结束

功能 解绑窗口(参数)
        顶层句柄=窗口.顶层窗口句柄()
        如果(ct[参数].chentaoibd(顶层句柄)==1)
                调试输出("为绑定状态")
                ct[参数].chentaofubww()
        否则
                调试输出("未绑定状态")  
        如果结束      
功能结束


//*********************************************************************
功能 热键0_热键()
        //这里添加你要执行的代码F1
        变量 i,参数
        //获取页面元素
        遍历(i=0;i<10;i++)
                参数=i
                如果(ct[参数]==null)
                        跳出
                如果结束
        遍历结束
        调试输出("空闲参数="&参数)
        窗口句柄[参数]=窗口.顶层窗口句柄()
        辅助.等待(1000)
        窗口.激活(窗口句柄[参数])
        多开区分[参数]=窗口句柄[参数]&参数
        线程数组[参数]=线程.扩展开启("测试者Aid.主线程",参数,"测试者Aid.解绑窗口",参数)
        调试输出("窗口句柄[参数]"&窗口句柄[参数])
        调试输出(多开区分[参数])
        调试输出(线程数组[参数])
        
功能结束


功能 热键1_热键()
        //这里添加你要执行的代码F2
        变量 i,参数
        顶层句柄=窗口.顶层窗口句柄()
        遍历(i=0;i<5;i++)
                参数=i
                如果(多开区分[参数]==null)
                        调试输出("该窗口未绑定")  
                否则
                        如果(顶层句柄==字符串.截取(多开区分[参数],0,字符串.长度(多开区分[参数])-1))
                                调试输出(多开区分[参数])
                                线程.关闭(地图找怪名XC[参数])
                                辅助.等待(100)
                                调试输出("关闭地图找怪名线程")
                                线程.关闭(线程数组[参数])//关闭目标窗口主线程运行
                                调试输出("关闭目标窗口主线程")
                                跳出
                        如果结束
                如果结束
        遍历结束
        数组空间.删除指定项(ct,参数)
        数组空间.删除指定项(窗口句柄,参数)
        数组空间.删除指定项(多开区分,参数)
        数组空间.删除指定项(线程数组,参数)
        辅助.消息框("窗口"&参数+1&"解绑完毕!")
功能结束

空间结束
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-11 16:09:38 | 显示全部楼层
无关的部分代码我去掉了,大神帮忙看看
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

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

GMT+8, 2024-9-23 11:50 , Processed in 0.039273 second(s), 23 queries .

Powered by 海安简单软件服务部

© 2008-2019 版权所有 保留所有权利

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