TC官方合作论坛

标题: 求教4.0的多线程。。。3.0的时候正常。。4.0了就出问题了! [打印本页]

作者: ecrisis    时间: 2012-12-28 00:04
标题: 求教4.0的多线程。。。3.0的时候正常。。4.0了就出问题了!
空间 多线程
dm=com("dm.dmsoft")
变量 hwnds
句柄=数组[]


功能 绑定游戏窗口()
    dm.SetPath(辅助.获取资源路径("rc:"))
    辅助.等待(20)
    dm.BindWindow(hwnds, "gdi", "windows3", "windows", 0)
    辅助.等待(500)
功能结束

功能 向记事本输入()
    多线程.绑定游戏窗口()
    循环(真)
        dm.KeyPress(49)
        辅助.等待(10)
    循环结束
功能结束

功能 开始_点击()
    变量 a,hw
    变量 hwnd
    hwnd = dm.EnumWindow(0, "记事本", "", 1 + 4 + 8 + 16)
    字符串.分割(hwnd,",",句柄)
    数组空间.大小(句柄,a)
如果(a>0)   
    遍历(i=0;i<a;i++)
        辅助.等待(500)   
        hw=类型.转整型(句柄
)
        hwnds=dm.FindWindowEx(hw, "Edit", "")
        辅助.等待(100)
        线程句柄=线程.开启("多线程.向记事本输入","")  
        辅助.消息框(线程句柄)
    遍历结束
如果结束
功能结束
空间结束

唉。。为什么4.0的线程不好使了??开了N个记事本 测试后就只对最后一个记事本进行循环输入1,之前3.0都正常。。开几个都会正常输入到几个窗口!谁帮看下


作者: 187144831    时间: 2012-12-28 09:31
  1. Ts[下标]=com("ts.tssoft")  //全局数组变量接受com对象
  2. 是否成功=Ts[下标].BindWindow(窗口句柄[下标],"dx","dx","dx",0) //对应的com对象数组对应窗口句柄数组绑定窗口
  3. ************************************************************************************
  4. 新版本演示.Ts[下标].KeyPressChar("enter")//跨空间调用全局com对象
复制代码


这个我也没琢磨明白,在论坛发了好多个帖子也没人回
用数组一个窗口一个对象
作者: ecrisis    时间: 2012-12-28 10:20
[code]Ts[下标]=com("ts.tssoft")  //全局数组变量接受com对象
是否成功=Ts[下标].BindWindow(窗口句柄[下标],"dx","dx","dx",0) //对应的com对象数组对应窗口句柄数组绑定......
187144831 发表于 2012-12-28 9:31:54
额。。。难道是说。。每个线程里面的大漠对像名字不能一样??或者说是每个线程中单独创建一个大漠对像,而不用全局的大漠对像!!我去一个个试下!谢谢哈。。。

作者: zhou1033675108    时间: 2012-12-28 11:35
是不是说BindWindow函数有问题。如果是这个问题解决办法:在每一个功能中加上dm=com("dm.dmsoft")
  1. 功能 开始_点击()
  2.     变量 a,hw
  3.     变量 hwnd
  4.     dm=com("dm.dmsoft")
  5.     hwnd = dm.EnumWindow(0, "记事本", "", 1 + 4 + 8 + 16)
  6.     字符串.分割(hwnd,",",句柄)
  7.     数组空间.大小(句柄,a)
  8. 如果(a>0)  
  9.     遍历(i=0;i<a;i++)
  10.         辅助.等待(500)  
  11.         hw=类型.转整型(句柄)
  12.         hwnds=dm.FindWindowEx(hw, "Edit", "")
  13.         辅助.等待(100)
  14.         线程句柄=线程.开启("多线程.向记事本输入","")  
  15.         辅助.消息框(线程句柄)
  16.     遍历结束
  17. 如果结束
  18. 功能结束
复制代码
这样就好了
作者: ecrisis    时间: 2012-12-28 11:45
是不是说BindWindow函数有问题。如果是这个问题解决办法:在每一个功能中加上dm=com("dm.dmsoft")
[code]功能 开始_点击()
    变量 a,hw
    变量 hwnd
    dm=com("dm.dmsoft")
    hwnd = dm.EnumWindow(0, "记事本", "&qu
zhou1033675108 发表于 2012-12-28 11:35:01
晚上回去试下!谢了哈~
作者: zhou1033675108    时间: 2012-12-28 12:02
回复 5楼ecrisis的帖子

空间 TS助手
//定义默认空间
TS=com("ts.tssoft")
我试过了在空间里加也可以的。
不用每个功能里都加,看来昨天搞错了。刚试,在空间里调用一次就行了。
想想也是,如果是每个功能都要调用那不是比以前还要麻烦
作者: ecrisis    时间: 2012-12-28 12:33
回复 5楼ecrisis的帖子

空间 TS助手
//定义默认空间
TS=com("ts.tssoft")
我试过了在空间里加也可以的。
不用每个功能
zhou1033675108 发表于 2012-12-28 12:02:28

很奇怪。。刚测试了一下。。。全局的大漠对像和分别在功能里面创建大漠对像。。还是老样子。。对最后一个窗口输入文字!!不知道是不是要              dm【i】=com("dm.dmsoft") 这样使用。。让每个线程的大漠对像都是唯一的~~等下试下!!


你用的天使插件难道正常????????

作者: saga    时间: 2012-12-28 13:08
首先 你得确保句柄传递的一一对应性 也就是说 句柄传递 如果传递一个句柄 那么你的功能执行 只是绑定的一个窗口, 要传递多个句柄 可以用数组来解决 每次传递用 数组[0] 数组[1]....这样保证每次传递都是不同的窗口句柄, 这样线程开启后绑定的就是多个窗口.自然操作的也是多个窗口, 看楼主的代码 传递的句柄始终是一个 hwds  这个玩意是全局变量 所以你绑定的就只是一个窗口 其他窗口是无法操作
作者: ecrisis    时间: 2012-12-28 13:52
首先 你得确保句柄传递的一一对应性 也就是说 句柄传递 如果传递一个句柄 那么你的功能执行 只是绑定的一个窗口, 要传递多个句柄 可以用数组来解决 每次传递用 数组[0] 数组[1]....这样保证每次传递都是不同的窗口句......
saga 发表于 2012-12-28 13:08:39
看样子是这样的!!明白了~~4.0比3.0的语法严谨了。。
作者: csc100    时间: 2013-1-7 18:05
烧包还用数组~我都不懂~




欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/) Powered by Discuz! X3.1