TC官方合作论坛

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

[问题] 求教4.0的多线程。。。3.0的时候正常。。4.0了就出问题了!

[复制链接]
跳转到指定楼层
楼主
发表于 2012-12-28 00:04:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上加入TC

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

x
空间 多线程
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都正常。。开几个都会正常输入到几个窗口!谁帮看下

回复

使用道具 举报

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


这个我也没琢磨明白,在论坛发了好多个帖子也没人回
用数组一个窗口一个对象
回复 支持 反对

使用道具 举报

板凳
 楼主| 发表于 2012-12-28 10:20:37 | 只看该作者
[code]Ts[下标]=com("ts.tssoft")  //全局数组变量接受com对象
是否成功=Ts[下标].BindWindow(窗口句柄[下标],"dx","dx","dx",0) //对应的com对象数组对应窗口句柄数组绑定......
187144831 发表于 2012-12-28 9:31:54
额。。。难道是说。。每个线程里面的大漠对像名字不能一样??或者说是每个线程中单独创建一个大漠对像,而不用全局的大漠对像!!我去一个个试下!谢谢哈。。。
回复 支持 反对

使用道具 举报

地板
发表于 2012-12-28 11:35:01 | 只看该作者
是不是说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. 功能结束
复制代码
这样就好了
回复 支持 反对

使用道具 举报

5#
 楼主| 发表于 2012-12-28 11:45:24 | 只看该作者
是不是说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
晚上回去试下!谢了哈~
回复 支持 反对

使用道具 举报

6#
发表于 2012-12-28 12:02:28 | 只看该作者
回复 5楼ecrisis的帖子

空间 TS助手
//定义默认空间
TS=com("ts.tssoft")
我试过了在空间里加也可以的。
不用每个功能里都加,看来昨天搞错了。刚试,在空间里调用一次就行了。
想想也是,如果是每个功能都要调用那不是比以前还要麻烦
回复 支持 反对

使用道具 举报

7#
 楼主| 发表于 2012-12-28 12:33:40 | 只看该作者
回复 5楼ecrisis的帖子

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

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


你用的天使插件难道正常????????
回复 支持 反对

使用道具 举报

8#
发表于 2012-12-28 13:08:39 | 只看该作者
首先 你得确保句柄传递的一一对应性 也就是说 句柄传递 如果传递一个句柄 那么你的功能执行 只是绑定的一个窗口, 要传递多个句柄 可以用数组来解决 每次传递用 数组[0] 数组[1]....这样保证每次传递都是不同的窗口句柄, 这样线程开启后绑定的就是多个窗口.自然操作的也是多个窗口, 看楼主的代码 传递的句柄始终是一个 hwds  这个玩意是全局变量 所以你绑定的就只是一个窗口 其他窗口是无法操作
回复 支持 反对

使用道具 举报

9#
 楼主| 发表于 2012-12-28 13:52:22 | 只看该作者
首先 你得确保句柄传递的一一对应性 也就是说 句柄传递 如果传递一个句柄 那么你的功能执行 只是绑定的一个窗口, 要传递多个句柄 可以用数组来解决 每次传递用 数组[0] 数组[1]....这样保证每次传递都是不同的窗口句......
saga 发表于 2012-12-28 13:08:39
看样子是这样的!!明白了~~4.0比3.0的语法严谨了。。
回复 支持 反对

使用道具 举报

10#
发表于 2013-1-7 18:05:57 | 只看该作者
烧包还用数组~我都不懂~
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

关闭

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

GMT+8, 2025-10-7 19:11 , Processed in 0.185919 second(s), 24 queries .

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

© 2001-2013 Comsenz Inc.

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