TC官方合作论坛

标题: 来高手指点下 多线程控制多个记事本窗口 [打印本页]

作者: f45601535    时间: 2012-8-17 15:45
标题: 来高手指点下 多线程控制多个记事本窗口
看了官方的教程 感觉教程说的好麻烦,好像要开多线程来控制记事本就必须通过枚举然后在分割,然后在循环~~~~~看的有的晕
来个高手指点下怎么去简化
例如:我打开2个记事本.如何用多线程去同时移动着2个记事本的窗口?最好来点思路和代码.好的话给采纳哈

作者: guang19890303    时间: 2012-8-17 16:04
好像枚举是还算省事的吧  用大漠的插件省点事
你开个记事本就先要获得四个句柄 要是枚举的话返回值是一个数组要把数组隔开split函数分一下
作者: Abin    时间: 2012-8-17 16:09
你没明白那些代码的本质是要干什么。

就是为了获取到真正能够操作窗口的窗口句柄!!  这点是很重要的,不然你得到错误的窗口句柄,那么你是操作不了窗口的!

至于代码嘛。 自己仿写视频的吧!!!!
作者: flyinsk    时间: 2012-8-17 16:24
提个思路,是不是可以遍历窗口后,修改窗口标题为不同的标题,就可以用窗口命令操作了。
作者: jimye0526    时间: 2012-8-17 16:29
思路很简单的
一 获取句柄  获取到的是一个句柄组 所以要把句柄一个个分割出来
二 得到句柄后么 就开启线程 每个线程里操作一个句柄(窗口)
就是这么简单的亲
作者: djj4288    时间: 2012-8-17 19:28
我只是要灌水。
作者: f45601535    时间: 2012-8-17 23:32
回复 5楼jimye0526的帖子

那样的话会不会照成争夺资源的情况?
作者: jimye0526    时间: 2012-8-18 09:21
回复 7楼f45601535的帖子

不会 这是针对窗口来的   又不是控制同一个窗口
作者: f45601535    时间: 2012-8-18 11:49
回复 8楼jimye0526的帖子

如果是那样的话,还用不用设置临界区?今天鼓捣了半天哎,还是只能控制一个窗口~~~~
作者: jimye0526    时间: 2012-8-18 16:56
为了你 我都回错贴了 不采纳就不应该了

好人做到底吧 给你写了个代码  自己研究去吧
可能写的比较麻烦 tc好像没有获取指定子窗口句柄的函数

首先在界面上添加两个按钮  一个名称是 开始   另一个是停止
不要忘了添加这两个按钮的点击事件  还有一个界面销毁的事件
  1. 空间 示例

  2. 整型 线程句柄1,线程句柄2    //定义两个全局变量

  3. 功能 逻辑型 线程1(字符型 句柄)            
  4.     整型 hwnd=转换.字符型转整型(句柄,0)
  5.     整型 i
  6.     重复(1000)
  7.     窗口.发送字符串(hwnd,转换.整型转字符型(i)+"\r")  
  8.     i=i+1
  9.     辅助.等待(5)
  10.     重复结束
  11. 返回 真
  12. 功能结束


  13. 功能 逻辑型 线程2(字符型 句柄)
  14.     整型 hwnd=转换.字符型转整型(句柄,0)
  15.     整型 i=999
  16.     重复(1000)
  17.     窗口.发送字符串(hwnd,转换.整型转字符型(i)+"\r")  
  18.     i=i-1
  19.     辅助.等待(5)
  20.     重复结束   
  21. 返回 真
  22. 功能结束

  23. 功能 逻辑型 开始_点击()    // 开始按钮的点击事件

  24. 字符型 句柄组=系统.枚举("Notepad",1)      //获取记事本的句柄组
  25. 如果(句柄组=="")
  26.     辅助.消息框("未获取到窗口句柄")
  27.     返回 假
  28. 如果结束
  29. 字符型[] 句柄数组
  30. 字符串.分割(句柄组,"|",句柄数组)   //分割句柄
  31. 整型 数组下标
  32. 数组.大小(句柄数组,数组下标)
  33. 如果(数组下标<=0)
  34.     辅助.消息框("分割句柄组失败")
  35.     返回 假
  36. 如果结束

  37. 字符型 子窗口句柄组1=系统.枚举(句柄数组[0],3)     //获取其中一个记事本的子窗口句柄组
  38. 如果(子窗口句柄组1=="")
  39.     辅助.消息框("未获取到子窗口句柄")
  40.     返回 假
  41. 如果结束
  42. 字符型[] 子句柄数组1
  43. 字符串.分割(子窗口句柄组1,"|",子句柄数组1)   //分给获取到的子窗口句柄组
  44. 数组.大小(子句柄数组1,数组下标)
  45. 如果(数组下标<=0)
  46.     辅助.消息框("分割句柄组失败")
  47.     返回 假
  48. 如果结束
  49. 字符型 类名=窗口.类名(转换.字符型转整型(子句柄数组1[0],0))     //获取其中一个子窗口句柄的类名
  50. 字符型 子句柄1  
  51. 如果(类名=="Edit")      //判断是否是类名为"Edit"的句柄    并且把句柄赋值给子句柄1   因为记事本只有两个子窗口 所以不是子句柄数组1[0] 就是子句柄数组1[1]      
  52.     子句柄1=子句柄数组1[0]      
  53. 否则
  54.     子句柄1=子句柄数组1[1]
  55. 如果结束

  56. 字符型 子窗口句柄组2=系统.枚举(句柄数组[1],3)//获取另一个记事本的子窗口句柄组  以下同上
  57. 如果(子窗口句柄组2=="")
  58.     辅助.消息框("未获取到子窗口句柄")
  59.     返回 假
  60. 如果结束
  61. 字符型[] 子句柄数组2
  62. 字符串.分割(子窗口句柄组2,"|",子句柄数组2)
  63. 数组.大小(子句柄数组2,数组下标)
  64. 如果(数组下标<=0)
  65.     辅助.消息框("分割句柄组失败")
  66.     返回 假
  67. 如果结束
  68. 类名=窗口.类名(转换.字符型转整型(子句柄数组2[0],0))
  69. 字符型 子句柄2
  70. 如果(类名=="Edit")
  71.     子句柄2=子句柄数组2[0]
  72. 否则
  73.     子句柄2=子句柄数组2[1]
  74. 如果结束

  75. 线程句柄1=线程.开启("示例.线程1",子句柄1)    //开启线程1
  76. 线程句柄2=线程.开启("示例.线程2",子句柄2)    //开启线程2

  77. 返回 真
  78. 功能结束

  79. 功能 逻辑型 停止_点击()   //按钮停止点击事件

  80. 线程.关闭(线程句柄1)    //关闭线程1
  81. 线程.关闭(线程句柄2)    //关闭线程2

  82. 返回 真
  83. 功能结束


  84. 功能 逻辑型 销毁()   //窗口销毁的事件

  85. 线程.关闭(线程句柄1)   //关闭线程1
  86. 线程.关闭(线程句柄2)    //关闭线程2

  87. 返回 真
  88. 功能结束

  89. 空间结束
  90. //看我这么辛苦的帮你  不管你懂不懂 采纳是必须了的吧
复制代码


作者: f45601535    时间: 2012-8-18 21:55
回复 10楼jimye0526的帖子

嘿嘿,看您那么辛苦,采纳是必须给的~~~代码好多够我研究一晚上的了




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