TC官方合作论坛

 找回密码
 立即注册
查看: 1722|回复: 4

[已解决] 空间参数传递问题(大漠对象)

[复制链接]
发表于 2015-7-30 02:51:43 | 显示全部楼层 |阅读模式

马上加入TC

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

x
本帖最后由 xiaoqix 于 2015-7-30 02:58 编辑

复制代码
  1. 变量 dm
  2. 功能 主程序()
  3.     dm=插件("dm.dmsoft")
  4.     子程序1()
  5.     子程序2()
  6.     子程序3()
  7. 结束
  8. 功能 子程序1()
  9.     dm=插件("dm.dmsoft")
  10.     dm.MoveTo(100,100)
  11. 结束
  12. 功能 子程序2()
  13.     dm=插件("dm.dmsoft")
  14.     dm.MoveTo(110,110)
  15. 结束
  16. 功能 子程序3()
  17.     dm=插件("dm.dmsoft")
  18.     dm.MoveTo(120,120)
  19. 结束
复制代码


论坛看了一些空间参数传递的资料,但是5.0后 有点看不清楚,刚刚接触TC没几天
请问,大漠插件的情况下
主程序 调用子程序的时候,因为要使用大漠命令,请问除了 把每个子程序里 都创建一个大漠对象外,还有其他方法可以让字程序里直接使用大漠吗
子程序现在 不加 创建大漠对象,根本无法使用
自己试着学习参数传递,但是不成功听说 如果按照我这个创建大漠对象的方式,可能会增加脚本运行负担
求解答下 我该如果做呢


回复

使用道具 举报

发表于 2015-7-30 04:19:57 | 显示全部楼层
单开的话,大漠对象作为全局变量,多开的话,大漠对象作为全局数组~直接调用全局的对象
回复 支持 反对

使用道具 举报

发表于 2015-7-30 08:11:20 | 显示全部楼层
  1. //代码以鼠标指向记事本为例.如要测试,请先把鼠标移动到记事本编辑区再按下热键
  2. //声明全局变量
  3. 变量 窗口句柄 = 数组()  //保存窗口句柄的数组
  4. 变量 线程句柄 = 数组()  //保存线程句柄的数组
  5. 变量 dm = 数组()  //保存dm对象的数组

  6. //===================================启动热键===================================\\
  7. 功能 hotkey0_onhotkey()  //启动热键
  8.     蜂鸣(800,120)  //响一下表示热键有效
  9.     变量 句柄 = 获取句柄()  //调用获取句柄功能  并返回句柄
  10.     如果(句柄 > 0)  //判断句柄是否大于0
  11.         窗口绑定(句柄)  //调用窗口绑定功能 同时把句柄这个参数传递过去
  12.     结束
  13. 结束

  14. //===================================单停热键===================================\\
  15. 功能 hotkey1_onhotkey()  //单停热键
  16.     蜂鸣(800,120)  //响一下表示热键有效
  17.     变量 句柄 = 窗口获取鼠标所在句柄()//鼠标指向获取窗口句柄
  18.     变量 索引 = 数组查找(窗口句柄,句柄)  //调用数组查找功能 返回索引值
  19.     如果(索引 != -1)  //判断句柄是否存在数组里   -1表示这个窗口当前没有脚本在运行  != -1表示这个窗口正在运行脚本
  20.         dm[索引].UnBindWindow() //大漠窗口解绑
  21.         线程关闭(线程句柄[索引])//停止该窗口线程
  22.         窗口句柄[索引] = null  //把该窗口句柄元素清空
  23.         线程句柄[索引] = null  //把该线程句柄元素清空
  24.         dm[索引]  = null  //把该大漠对象元素清空
  25.     否则
  26.         消息框("该窗口未执行脚本")  //弹出消息框提示
  27.     结束
  28. 结束

  29. //===================================全停热键===================================\\
  30. 功能 hotkey2_onhotkey()  //全挺热键
  31.     蜂鸣(800,120)  //响一下表示热键有效
  32.     变量 大小 = 数组大小(窗口句柄) //获得数组的大小
  33.     遍历(变量 i = 0; i < 大小; i++)  //有多少个窗口就执行多少遍
  34.         dm[i].UnBindWindow() //大漠窗口解绑
  35.         线程关闭(线程句柄[i])  //关闭线程,结束脚本
  36.     结束
  37.     数组清空(窗口句柄)  //清空窗口句柄数组
  38.     数组清空(线程句柄)  //清空线程句柄数组
  39.     数组清空(dm)  //清空大漠对象数组
  40. 结束

  41. //===================================获取窗口句柄===================================\\
  42. 功能 获取句柄()
  43.     变量 游戏窗口类名 = "Edit" //以记事本为例
  44.     变量 句柄 = 窗口获取鼠标所在句柄() //鼠标指向获取窗口句柄
  45.     如果(句柄 > 0)
  46.         如果(字符串查找(窗口获取类名(句柄),游戏窗口类名) != -1)//判断是否是记事本窗口 也可以通过标题来判断
  47.             如果(数组查找(窗口句柄,句柄) == -1)//判断窗口句柄是否重复 -1表示该窗口是新窗口
  48.                
  49.                 如果(数组查找(窗口句柄,null) == -1)//判断是否要添加新窗口元素 -1表示添加新元素
  50.                     数组追加元素(窗口句柄,null) //执行窗口追加元素
  51.                 结束
  52.                
  53.                 //下面把得到的窗口句柄存放进数组里
  54.                 变量 大小 = 数组大小(窗口句柄)  //得到数组的大小
  55.                 如果(大小 > 0)
  56.                     遍历(变量 i = 0; i < 大小; i++)  //有多少个数组元素就执行多少遍
  57.                         如果(窗口句柄[i] == null)//判断数组里面有没有空位 有就把句柄存放里面
  58.                             窗口句柄[i] = 句柄  //把句柄赋值给数组成员
  59.                             返回 窗口句柄[i]  //返回 窗口句柄[i]
  60.                         结束
  61.                     结束
  62.                 结束
  63.                
  64.                
  65.             否则
  66.                 消息框("请不要对该游戏窗口重复运行脚本","提示") //消息框提示
  67.                 返回 -1
  68.             结束
  69.             
  70.         否则
  71.             消息框("窗口不正确","提示") //消息框提示
  72.             返回 -1  
  73.         结束
  74.     结束
  75.    
  76. 结束

  77. //===================================主窗口绑定===================================\\
  78. 功能 窗口绑定(句柄)
  79.     变量 索引 = 数组查找(窗口句柄,句柄)//获取句柄在数组里的索引
  80.     dm[索引] = 插件("dm.dmsoft") //创建大漠对象
  81.    
  82.     //    dm[索引].SetShowErrorMsg(0)        //设置是否弹出错误信息
  83.    
  84.     dm[索引].SetPath(获取资源路径("rc:"))//设置大漠资源路径
  85.     dm[索引].SetDict(0,"test.txt")//设置大漠默认字库
  86.    
  87.     //    dm[索引].SetDict(0,获取资源路径("rc:test.txt"))//设置大漠默认字库
  88.     traceprint(获取资源路径("rc:test.txt"))
  89.    
  90.     var ret = dm[索引].BindWindow(句柄,"normal","normal","normal",0)//绑定窗口
  91.     如果(ret != 1)
  92.         调试输出("绑定窗口失败")
  93.         返回 -1
  94.     结束
  95.     调试输出("绑定窗口成功")
  96.     线程句柄[索引] = 线程开启("主程序",索引)//开启线程   
  97. 结束

  98. //===================================主程序===================================\\
  99. 功能 主程序(索引)
  100.     循环(真)//死循环
  101.         窗口发送字符串(窗口句柄[索引],索引)
  102.         等待(500)
  103.     结束
  104. 结束

  105. //===================================数组查找===================================\\
  106. 功能 数组查找(名称,要查找的内容) //这是一个自己封装的函数,和4.0版本中的函数 数组空间.查找() 起到一样的作用.
  107.     变量 大小 = 数组大小(名称)  //得到数组的大小
  108.     如果(大小 == 0)  //判断这个数组是不是空的
  109.         返回 -1  //既然是个空数组 那么查找任何内容都是徒劳 所以是找不到的 返回 -1
  110.     否则
  111.         //        变量 值,key
  112.         遍历(变量 i = 0; i < 大小; i++)  //遍历所有的数组成员
  113.             //            数组获取元素(名称,i,值,key)
  114.             如果(要查找的内容 == 名称[i])  //看看要查找的内容是不是和某个数组成员相等.相等就说明要查找的内容在数组里
  115.                 返回 i  //返回索引
  116.             结束
  117.         结束
  118.         //这里是遍历完所有的数组成员后 还是没有相等的内容 就说明数组里面没有要查找的内容 返回-1
  119.         返回 -1
  120.     结束
  121. 结束

  122. //===================================热键0失去焦点事件===================================\\
  123. 功能 hotkey0_killfocus()  //自定义热键0
  124.     热键销毁("hotkey0")   //先销毁旧的热键0键码
  125.     热键注册("hotkey0")   //再注册新的热键0键码
  126. 结束

  127. //===================================热键1失去焦点事件===================================\\
  128. 功能 hotkey1_killfocus()  //自定义热键1
  129.     热键销毁("hotkey1")   //先销毁旧的热键1键码
  130.     热键注册("hotkey1")   //再注册新的热键1键码  
  131. 结束

  132. //===================================热键2失去焦点事件===================================\\
  133. 功能 hotkey2_killfocus()  //自定义热键2
  134.     热键销毁("hotkey2")   //先销毁旧的热键2键码
  135.     热键注册("hotkey2")   //再注册新的热键2键码
  136. 结束
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-7-30 12:33:25 | 显示全部楼层
这论坛不错 发表于 2015-7-30 04:19
单开的话,大漠对象作为全局变量,多开的话,大漠对象作为全局数组~直接调用全局的对象 ...
  1. 变量 配置文件名,dm_ret,ver,线程ID,窗口句柄,hwnd,路径,ret
  2. 变量 启动键值,启动功能键,终止键值,终止功能键,暂停键值,暂停功能键,暂停功能键
  3. 变量 挂机1选项,挂机1选项,挂机2选项,挂机3选项,挂机4选项,挂机5选项,挂机6选项
  4. 变量 优先选中,顺序选中
  5. 变量 线程ID=0,是否暂停=假
  6. 变量 dm = 插件("dm.dmsoft")
复制代码

我这样做,子程序里 还是没法调用
求帮忙 谁能把我主题里的样例直接修改下发出来呢
回复 支持 反对

使用道具 举报

发表于 2015-7-30 15:38:00 | 显示全部楼层
论坛有单开单停,多开单停的例子,自己搜索下
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

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

GMT+8, 2024-10-2 18:58 , Processed in 0.030069 second(s), 23 queries .

Powered by 海安简单软件服务部

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

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