TC官方合作论坛
标题:
TC结合天使插件多对象多开示例
[打印本页]
作者:
2884628
时间:
2013-6-7 22:13
标题:
TC结合天使插件多对象多开示例
空间 TC结合天使插件多对象多开示例 //我们现在结合天使插件,多开记事本发送文本为例写一个多开的示例 //众所周知:记事本有一个子窗口其类名为:Edit,所以我们必须找到它对它发送文本才可以 天使=数组[0//先定义个天使的全局对象备用 线程句柄数组=数组[0//定义一个线程句柄数组备用 功能 主线程() 父句柄数组,大小,子句柄字串,子句柄数组,edit_hwnd,大小1,下标1 句柄组合字串=系统.枚举("记事本",0//枚举记事本 如果(句柄组合字串==""//判断是否开启程序 辅助.消息框("目标程序未开启") 返回 假 如果结束 //由于分割结果没有分隔符也是可以分割成功的,所以我们单开和多开一起处理 字符串.分割(句柄组合字串,"|",父句柄数组) 数组空间.大小(父句柄数组,大小) 遍历(下标=0;下标<大小;下标++//遍历每个记事本的每个子句柄,找出类名为Edit的句柄. 子句柄字串=系统.枚举(父句柄数组[下标],3) 字符串.分割(子句柄字串,"|",子句柄数组) 数组空间.大小(子句柄数组,大小1) 遍历(下标1=0;下标1<大小1;下标1++) 如果(窗口.类名(子句柄数组[下标1])=="Edit") edit_hwnd=子句柄数组[下标1//找到我们想要的子句柄 这个时候 我们可以开线程了 线程参数=edit_hwnd&","&下标 天使对象=com("ts.tssoft") 数组空间.增加(天使,天使对象) 句柄值=线程.开启("TC结合天使插件多对象多开示例.子线程",线程参数) 数组空间.增加(线程句柄数组,句柄值) 如果结束 遍历结束 遍历结束 功能结束 功能 子线程(参数//接受参数 var 参数=句柄数组
&","&i 变量 下标,窗口句柄,绑定返回值,参数数组 字符串.分割(参数,",",参数数组//分割出传过来的参数 i和窗口句柄的值 窗口句柄=参数数组[0] 下标=参数数组[1] 天使[下标]=com("ts.tssoft"//创建天使对象 绑定返回值=天使[下标].BindWindow(窗口句柄,"gdi","windows","windows",1//绑定 辅助.等待(1000) 如果(绑定返回值==0) 辅助.消息框("绑定失败") 返回 假 否则 //这里表示绑定成功,这后面如果是游戏脚本的可以自己根据情况写. //部分游戏会出现鼠键操作无效 可在绑定前后用setwindowstate 激活窗口试试 天使[下标].LockInput(1)//多个线程相互控制窗口就靠这个对象: 天使[下标] 天使[下标].MoveTo(359,239//插件命令MOveTo和moveto一样不分大小写 天使[下标].SendString(窗口句柄,"123456"//对对传进来的记事本发送我们想要的文本 如果结束 功能结束 功能 开始_点击() 线程.开启("TC结合天使插件多对象多开示例.主线程","") 功能结束 空间结束
这是tc的例子,这个程序难道不关吗?咋关,有大侠知道吗?
作者:
cylhb
时间:
2013-6-7 23:18
说实话,看到这段代码,我头直接晕了,看不下去。格式都没有。。。
启动线程时保存好线程句柄,要关的时候直接用句柄去关呗
作者:
2884628
时间:
2013-6-8 07:16
回复
2楼
cylhb
的帖子
这是TC说明里面的一段代码,大家可以看一下tc,是多开代码没错,但是循环后运行2小时左右就死机了,看系统进程,游戏占内存越来越大,好像不能自己释放内存!!!!!!!
作者:
2884628
时间:
2013-6-8 07:26
如果循环应该咋循环呢?我开了2个线程控制一个窗口,麻烦版主费心
空间 TC多开测试
Ts=array[0]
功能 主线程()
var 返回值,数组大小,i
句柄数组=array[1]
返回值=系统.枚举("江南天下",0)
//严格来讲 这里需要对,返回值是否为空,来判断是否有开窗口,查找分割符 来判断是否为单开,
//判断数组大小来判断开启的窗口数量,为了精简易懂,上面都略过.多开的时候记得写上
字符串.分割(返回值,"|",句柄数组)
数组空间.大小(句柄数组,数组大小)//判断数组大小
for(i=0;i<数组大小;i++)
Ts=数组空间.重定义(Ts,true,i+1)//由于每开启一个线程就多需要一个天使对象,这里必须重新定义天使对象数组大小
var 参数=句柄数组[i]&","&i//合并参数 窗口句柄和i的值,i的值是为了传递给Ts[i] 这个对象,每开启一次i+1
//有的朋友就在这里就绑定窗口,其实也是可以的,但我不太喜欢这种做法.
线程.开启("TC多开测试.子线程",参数)//开启分线程
辅助.等待(1000)//等待一下,避免多个线程同时绑定窗口,导致绑定失败
线程.开启("TC多开测试.线程复活",参数)//开启分线程
辅助.等待(10000)
endfor
功能结束
功能 子线程(参数)//接受参数 var 参数=句柄数组[i]&","&i
var i,窗口句柄,绑定返回值
变量 intX,intY
参数数组=array[1]
字符串.分割(参数,",",参数数组)//分割出传过来的参数 i和窗口句柄的值
窗口句柄=参数数组[0]
i=参数数组[1]
Ts[i]=com("ts.tssoft")//创建天使对象
绑定返回值=Ts[i].BindWindow(窗口句柄,"dx2","dx","dx",101)//绑定
Ts[i].SetPath(辅助.获取资源路径("rc:"))
Ts[i].SetDict(0,"ts_soft.txt")//设置字库路径
//句柄=Ts[i].GetMousePointWindow()
辅助.等待(1000)
if(绑定返回值==0)
help.messagebox("绑定失败")
返回 假
else
//这里表示绑定成功,这后面想干嘛,你干嘛..
//部分游戏会出现鼠键操作无效 可在绑定前后用setwindowstate 激活窗口试试
//Ts[i].LockInput(1) //对象记得用Ts[i],多个线程相互控制窗口就靠这个对象
//Ts[i].MoveTo(359,239)
//窗口.激活(窗口句柄)
//Ts[i].SendString(窗口句柄,"123456")
//辅助.消息框("绑定成功"&i)
Ts[i].MoveWindow(窗口句柄,-15,0)
//窗口.设置位置(句柄,-10,0)
//Ts[i].SetMouseDelay("dx",55)
找仓库:
help.sleep(3000)
Ts[i].FindStr(0,0,2000,2000,"桃园", "fefe00-000000",1.0,intX,intY)//大漠找字
如果(intX>0)
help.sleep(20)//延时
否则
help.sleep(1500)
Ts[i].KeyPress(80)
//辅助.消息框("p没打开")
help.sleep(1500)
如果结束
.......
help.sleep(2000)
goto 找仓库
endif
功能结束
//功能 线程挖矿()
//Ts[i].初始化()
//help.sleep(1500)
//Ts[i].找仓库()
////Ts[i].找防具店()
////Ts[i].找杂货()
////Ts[i].去挖矿()
////Ts[i].回去()
////弹一个"执行任务1"的消息框
////循环结束语句
////返回 真
////函数返回语句
//功能结束
//功能函数用完后结束该功能
功能 线程复活(参数)
变量 intX,intY
var i,窗口句柄,绑定返回值
参数数组=array[1]
字符串.分割(参数,",",参数数组)//分割出传过来的参数 i和窗口句柄的值
窗口句柄=参数数组[0]
i=参数数组[1]
循环(真)
//当条件为真时,该执行一个无限循环语句
辅助.等待(1000)
//等待1000毫秒,然后再执行下面语句
//死亡检测
子程序在这里
//弹一个"执行任务1"的消息框
循环结束
//返回 真
功能结束
功能 开始_点击()
线程.开启("TC多开测试.主线程","")
功能结束
功能 退出_点击()
var 返回值,数组大小,i
句柄数组=array[1]
返回值=系统.枚举("江南天下",0)
//严格来讲 这里需要对,返回值是否为空,来判断是否有开窗口,查找分割符 来判断是否为单开,
//判断数组大小来判断开启的窗口数量,为了精简易懂,上面都略过.多开的时候记得写上
字符串.分割(返回值,"|",句柄数组)
数组空间.大小(句柄数组,数组大小)//判断数组大小
for(i=0;i<数组大小;i++)
Ts=数组空间.重定义(Ts,true,i+1)//由于每开启一个线程就多需要一个天使对象,这里必须重新定义天使对象数组大小
var 参数=句柄数组[i]&","&i//合并参数 窗口句柄和i的值,i的值是为了传递给Ts[i] 这个对象,每开启一次i+1
//有的朋友就在这里就绑定窗口,其实也是可以的,但我不太喜欢这种做法.
Ts[i].UnBindWindow()//解除绑定窗口
//线程.关闭("TC多开测试.子线程",参数)//开启分线程
//辅助.等待(1000)//等待一下,避免多个线程同时绑定窗口,导致绑定失败
//线程.关闭("TC多开测试.线程复活",参数)//开启分线程
辅助.等待(1000)
endfor
辅助.退出()
功能结束
功能 热键0_热键()
//这里添加你要执行的代码
线程句柄=线程.开启("TC多开测试.开始_点击","")
功能结束
功能 热键1_热键()
var 返回值,数组大小,i
句柄数组=array[1]
返回值=系统.枚举("江南金鼓",0)
//严格来讲 这里需要对,返回值是否为空,来判断是否有开窗口,查找分割符 来判断是否为单开,
//判断数组大小来判断开启的窗口数量,为了精简易懂,上面都略过.多开的时候记得写上
字符串.分割(返回值,"|",句柄数组)
数组空间.大小(句柄数组,数组大小)//判断数组大小
for(i=0;i<数组大小;i++)
Ts=数组空间.重定义(Ts,true,i+1)//由于每开启一个线程就多需要一个天使对象,这里必须重新定义天使对象数组大小
var 参数=句柄数组[i]&","&i//合并参数 窗口句柄和i的值,i的值是为了传递给Ts[i] 这个对象,每开启一次i+1
//有的朋友就在这里就绑定窗口,其实也是可以的,但我不太喜欢这种做法.
Ts[i].UnBindWindow(参数)//解除绑定窗口
//线程.关闭("TC多开测试.子线程",0)//开启分线程
//辅助.等待(1000)//等待一下,避免多个线程同时绑定窗口,导致绑定失败
//线程.关闭("TC多开测试.线程复活",0)//开启分线程
辅助.等待(1000)
endfor
//辅助.退出()
//辅助.等待(2000)
//在开始_点击函数中调用开始执行函数
// 线程句柄=线程.开启("Ts[i].退出_点击","")
功能结束
空间结束
复制代码
作者:
slz336
时间:
2014-8-26 10:58
新手学习中
欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/)
Powered by Discuz! X3.1