TC官方合作论坛

标题: 多线程操作多窗口问题!急!!! [打印本页]

作者: cainiao007    时间: 2012-10-14 13:36
标题: 多线程操作多窗口问题!急!!!
别让我看官方教程..我看了五遍了.到现在都不懂..!!!!!!!!!!
运行提示数组越界..单步调试..指针跳来跳去..我都晕了

求好心人解答!!!!!!

namespace TEST   
string[] rstr                           //窗口数组
int number,add                       //number 窗口数量..ADD窗口数量叠加

function bool messagebox()                //自动喊话
   
    string message = edit.gettext("edit0")                //获得编辑框中的文本内容
   
    int windows = convert.strtoint(rstr[add])
    window.postkeypress(windows,13)               //回车
    help.sleep(100)
    window.poststring(windows,message)           //发送内容
    help.sleep(100)
    window.postkeypress(windows,13)
    help.sleep(50)
    return true
endfunction


function bool FindWindow()      //找窗口

    string windowclass = system.enum("WSGAME",1)        //枚举窗口类名
   
  if(windowclass !="")                                         //窗口类名不等于空则执行分割等操作
        str.split(windowclass,"|",rstr)
        array.size(rstr,number)
     while (add<number)                                              //窗口叠加数不可以超过窗口数量

            thread.beginthread("TEST.messagebox",rstr[add])           //**************多线程开启*************
            add = add +1                                                               //叠加执行下一个数组里的窗口

     endwhile
  endif
     
    return true
endfunction


function bool start_click()
TEST.FindWindow()
return true
endfunction

作者: 爱玩的一休    时间: 2012-10-14 13:39
add没有初始化
rstr也没有初始化
加上
add=0
rstr=string[1]

作者: cainiao007    时间: 2012-10-14 13:45
回复 2楼爱玩的一休的帖子

整形需要初始化?默认不是0
rstr 调试的时候获取到了窗口的句柄.所以也没问题
作者: stxuhong    时间: 2012-10-14 13:50
如果不懂的话,最好从中文编程开始,这是最好的学习方法, 自己学习东西要找到那个才容易学
作者: shine宝宝    时间: 2012-10-14 13:51
我是这么理解的。。比如数组大小获得的是2  那数组只有[0]和[1]      所以你再  add = add +1                    就有了下标[2]   就越界啦
作者: cainiao007    时间: 2012-10-14 13:54
回复 4楼stxuhong的帖子

呵呵..我看到中文代码就头大..看英文顺眼一点..我巴不得官方做一些英文的出来
我每次都还要翻译成英文
作者: cainiao007    时间: 2012-10-14 13:56
回复 5楼shine宝宝的帖子

这我知道.但是我不知道怎么解决这个问题
喊话部份一句也没有执行.就算越界了..也起码要先运行成功一次吧
作者: shine宝宝    时间: 2012-10-14 13:58
在循环加个如果 适当时候跳出 就不要add++了
作者: cainiao007    时间: 2012-10-14 14:02
回复 8楼shine宝宝的帖子

  大神帮我改一下代码吧.照你说的做了..直接卡死在那了
作者: 116911607    时间: 2012-10-14 14:21
如果你真的想让别人帮你的话,这些代码翻译成中文应该没有问题吧,你又不是外国人,何必呢!
作者: shine宝宝    时间: 2012-10-14 14:34
while (add<number)                                              //窗口叠加数不可以超过窗口数量
            thread.beginthread("TEST.messagebox",rstr[add])           //**************多线程开启*************
           如果(add==number-1)
                跳出
           如果结束
            add = add +1                                                               //叠加执行下一个数组里的窗口
     endwhile
作者: cainiao007    时间: 2012-10-14 14:59
回复 11楼shine宝宝的帖子

好吧.首先要感谢你一直回答我的问题.但是很遗憾的告诉你.神奇的事情发生了
我输入<这是测试文本内容>的时候.喊话出来了<这这是是测测试试文文本本内内容>

而且只操作了一个窗口.....
作者: feng123144    时间: 2012-10-14 15:02
群共享里有个TC中英文转换
作者: shine宝宝    时间: 2012-10-14 16:38
window.postkeypress(windows,13)

这要写窗口句柄吧~
作者: cainiao007    时间: 2012-10-14 16:58
哈哈.我终于自己搞好了...哎.太痛苦了
作者: 爱玩的一休    时间: 2012-10-15 19:33
回复 3楼cainiao007的帖子

这是3.039版字符串分割里的例子
string[] rstr=string[1] //需要先初始化一次
string sourcestr="AB:CD:EF:GH:JK",splitstr=":"
bool isok=str.split(sourcestr,splitstr,rstr)
我刚才测试了一下,的确可以不用初始化。

对于你数组越界的问题,你按照下面这个代码修改试试。
function bool messagebox(string handle)                //自动喊话
   
    string message = edit.gettext("edit0")                //获得编辑框中的文本内容
   
    int windows = convert.strtoint(handle)
    window.postkeypress(windows,13)               //回车
    help.sleep(100)
    window.poststring(windows,message)           //发送内容
    help.sleep(100)
    window.postkeypress(windows,13)
    help.sleep(50)
    return true
endfunction




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