• 新浪微博:
  • 微信 :
按键精灵电脑版
立即下载

软件版本:2014.06
软件大小:22.9M
更新时间:03-18

按键精灵安卓版
立即下载

软件版本:3.3.6
软件大小:62.5M
更新时间:01-16

按键精灵iOS版
立即下载

软件版本:1.3.8
软件大小:29.2M
更新时间:06-14

最新企业版UiBot
立即下载

软件版本:3.3
软件大小:282M
更新时间:08-06

快捷导航

登录 后使用快捷导航
没有帐号? 注册

登录 注册
发新话题 回复该主题

[已解决] 多线程问题 [复制链接]

1#
请问我如何停止以下脚本中的一个线程? 可以通过他的句柄来实现停止其中一个线程吗?


DimEnv s
HwndEx = Plugin.Window.Search("记事本")
Hwnd = Split(HwndEx, "|")
For i=0 to UBound(Hwnd)-1
s = Hwnd(i)
BeginThread 脚本2()
Delay 2000
Next
Sub 脚本()
Hwnd = s
TracePrint Hwnd
Call Plugin.Window.Size(Hwnd, 600, 450)
Do
Call Plugin.Bkgnd.KeyPress(Hwnd, 65)
Call Plugin.Bkgnd.LeftClick(Hwnd, 252, 27)
Call Plugin.Bkgnd.SendString(Hwnd, "1")
Call Plugin.Bkgnd.LeftClick(Hwnd, 271, 155)
Loop
End Sub

本主题由 超级版主 n15976906190 于 2020/4/1 8:21:57 执行 审核帖子 操作
2#

回复 1楼a936827194的帖子
  1. Dim 启动快捷键, 暂停快捷键, 继续快捷键, 停止快捷键, i, Hwnds(99), 线程ID(99)
  2. DimEnv Hwnd
  3. HwndEx = Plugin.Window.Search("记事本")
  4. Hwnd1 = Split(HwndEx, "|")
  5. For i = 0 To UBound(Hwnd1)-1
  6. TracePrint Hwnd1(i)
  7. Hwnds(i) = Plugin.Window.FindEx(Hwnd1(i), 0, 0, 0)
  8. Hwnd=Hwnds(i)
  9. 线程ID(i) = BeginThread(测试线程)
  10. Delay 500
  11. Next
  12. Do
  13. 等待按键 = GetLastKey()
  14. Select Case 等待按键
  15. Case 65
  16. Hwnd = Plugin.Window.MousePoint()
  17. For w = 0 To i
  18. If Hwnds(w) = Hwnd Then
  19. StopThread 线程ID(w)
  20. End If
  21. Next
  22. End Select
  23. Loop
  24. Sub 测试线程
  25. s = Hwnd
  26. TracePrint Hwnd
  27. Delay 100
  28. Do
  29. Call Plugin.Window.SendString(s, "测试")
  30. Delay 1000
  31. Call Plugin.Window.SendKeyPress(s, 13)
  32. Delay 1000
  33. Loop
复制代码

最后编辑n15976906190 最后编辑于 2020-03-20 15:48:14
收徒索引 ←点击

个 人 Q Q 1 : 1 2 2 3 1 1 6 6 1 8[将满]
个 人 Q Q 2 : 6 1 7 0 9 5 5 4 3[可加]
3#

没有理解 且复制测试后
语义错误:脚本 我的脚本1 ,第9行:没有找到目标。错误附加码=851:0
语法错误:脚本 我的脚本1 ,第34行,第0个字符:(错误码0)没有找到合法的符号。

4#

回复 3楼a936827194的帖子

注:你好 不理解 请自行学好基础
  1. Dim 启动快捷键, 暂停快捷键, 继续快捷键, 停止快捷键, i, Hwnds(99), 线程ID(99)
  2. DimEnv Hwnd
  3. HwndEx = Plugin.Window.Search("记事本")
  4. Hwnd1 = Split(HwndEx, "|")
  5. For i = 0 To UBound(Hwnd1)-1
  6. TracePrint Hwnd1(i)
  7. Hwnds(i) = Plugin.Window.FindEx(Hwnd1(i), 0, 0, 0)
  8. Hwnd=Hwnds(i)
  9. 线程ID(i) = BeginThread(测试线程)
  10. Delay 500
  11. Next
  12. Do
  13. 等待按键 = GetLastKey()
  14. Select Case 等待按键
  15. Case 65
  16. Hwnd = Plugin.Window.MousePoint()
  17. For w = 0 To i
  18. If Hwnds(w) = Hwnd Then
  19. StopThread 线程ID(w)
  20. End If
  21. Next
  22. End Select
  23. Loop
  24. Sub 测试线程
  25. s = Hwnd
  26. TracePrint Hwnd
  27. Delay 100
  28. Do
  29. Call Plugin.Window.SendString(s, "测试")
  30. Delay 1000
  31. Call Plugin.Window.SendKeyPress(s, 13)
  32. Delay 1000
  33. Loop
  34. End Sub
复制代码

收徒索引 ←点击

个 人 Q Q 1 : 1 2 2 3 1 1 6 6 1 8[将满]
个 人 Q Q 2 : 6 1 7 0 9 5 5 4 3[可加]
5#

回复 4楼n15976906190的帖子

再麻烦您一下 请问这个程序中我是按哪个键鼠标悬停窗口会暂停 然后按那颗键鼠标悬停窗口又会继续运行呢?

6#

回复 5楼a936827194的帖子

注:你好 本模板只有需求的停止 没有暂停 如果需要 自行添加Case 写法与停止一致

收徒索引 ←点击

个 人 Q Q 1 : 1 2 2 3 1 1 6 6 1 8[将满]
个 人 Q Q 2 : 6 1 7 0 9 5 5 4 3[可加]
7#

那请问按键停止是按个键呢?

8#

回复 7楼a936827194的帖子

Case 65'即A

收徒索引 ←点击

个 人 Q Q 1 : 1 2 2 3 1 1 6 6 1 8[将满]
个 人 Q Q 2 : 6 1 7 0 9 5 5 4 3[可加]
9#

回复 4楼n15976906190的帖子

请问其他只有父句柄,没有子句柄的程序,第7行查找不到应该怎么修改?

10#

回复 9楼a936827194的帖子

注:你好 07行FindEx去除 无需再次遍历

收徒索引 ←点击

个 人 Q Q 1 : 1 2 2 3 1 1 6 6 1 8[将满]
个 人 Q Q 2 : 6 1 7 0 9 5 5 4 3[可加]
11#

Dim 启动快捷键, 暂停快捷键, 继续快捷键, 停止快捷键, i, Hwnds(99), 线程ID(99)
DimEnv Hwnd
HwndEx = Plugin.Window.Search("阴阳师-网易游戏")
Hwnd1 = Split(HwndEx, "|")
For i = 0 To UBound(Hwnd1)-1
TracePrint Hwnd1(i)
Hwnd=Hwnd1(i)
线程ID(i) = BeginThread(测试线程)
Delay 500
Next
Do
等待按键 = GetLastKey()
Select Case 等待按键
Case 65
Hwnd = Plugin.Window.MousePoint()
TracePrint Hwnd
For w = 0 To i
If Hwnds(w) = Hwnd Then
StopThread 线程ID(w)
End If
Next
End Select
Loop
Sub 测试线程
s = Hwnd
TracePrint Hwnd
Delay 100
Do
For i = 1 To 25
Call Plugin.Bkgnd.LeftClick(s, 110, 17)
Delay 1111

游戏是只有父句柄没有子句柄的 去掉第7行
Hwnds(i) = Plugin.Window.FindEx(Hwnd1(i), 0, 0, 0)后 按键停止也失效了 加入按键输出句柄测试 获取句柄正常

12#

回复 11楼a936827194的帖子
  1. //"鼠标指向窗口浏览区域需要点击位置后,按F10开始"
  2. Hwnd = Plugin.Window.MousePoint()
  3. sRect = Plugin.Window.GetClientRect(Hwnd)
  4. xy = Split(sRect, "|")
  5. GetCursorPos x1, y1
  6. Delay 1000
  7. Call Plugin.Bkgnd.LeftClick (Hwnd, x1 - xy(0), y1 - xy(1))
  8. TracePrint "后台坐标为" & x1 - xy(0) & "," & y1 - xy(1) & "句柄为" & Hwnd
  9. '如果不点击/异常说明存在屏蔽机制 尝试第三方插件修改键盘/鼠标/图色绑定模式进行解决[例:大漠/361/大兵],如果点击查看最后一句确认是句柄或坐标错误[如果原先句柄与坐标正确 本次点击 则说明游戏存在需要前台鼠标也在指定位置的屏蔽机制 尝试先Call Plugin.Bkgnd.MoveTo(Hwnd,*,*)后点击等方式]
复制代码

收徒索引 ←点击

个 人 Q Q 1 : 1 2 2 3 1 1 6 6 1 8[将满]
个 人 Q Q 2 : 6 1 7 0 9 5 5 4 3[可加]
13#

回复 12楼n15976906190的帖子

坐标正确 且点击

14#

回复 12楼n15976906190的帖子

坐标正确 且点击,
运行以下脚本 按下A键后 会输出IF前的hwnds(w),且句柄正确,hwnd=其中一个,
If Hwnds(w) = Hwnd Then 后面的内容并未执行


hwnds(w)
Dim 启动快捷键, 暂停快捷键, 继续快捷键, 停止快捷键, i, Hwnds(99), 线程ID(99)
DimEnv Hwnd
HwndEx = Plugin.Window.Search("阴阳师-网易游戏")
Hwnd1 = Split(HwndEx, "|")
For i = 0 To UBound(Hwnd1)-1
TracePrint Hwnd1(i)
Hwnds(i) = Hwnd1(i)
Hwnd=Hwnds(i)
线程ID(i) = BeginThread(测试线程)
Delay 500
Next
Do
等待按键 = GetLastKey()
Select Case 等待按键
Case 65
Hwnd = Plugin.Window.MousePoint()
TracePrint Hwnd

For w = 0 To i
TracePrint Hwnds(w)
If Hwnds(w) = Hwnd Then
TracePrint Hwnds(w)
StopThread 线程ID(w)
End If
Next
End Select
Loop
Sub 测试线程
s = Hwnd
TracePrint Hwnd
Delay 100
Do
Call Plugin.Window.SendString(s, "测试")
Delay 1000
Call Plugin.Window.SendKeyPress(s, 13)
Delay 1000
Loop
End Sub

15#

回复 14楼a936827194的帖子

注:你好 不存在描述问题 请学好基础

收徒索引 ←点击

个 人 Q Q 1 : 1 2 2 3 1 1 6 6 1 8[将满]
个 人 Q Q 2 : 6 1 7 0 9 5 5 4 3[可加]
16#

回复 15楼n15976906190的帖子

呃,可是运行这个脚本确实是这样的 IF前的hwnds有输出 IF后的hwnds不输出

17#

回复 16楼a936827194的帖子

注:你好 那就说明条件不成立 Hwnd 获取的是鼠标指向的窗口句柄 自行输出 Hwnd 检查

收徒索引 ←点击

个 人 Q Q 1 : 1 2 2 3 1 1 6 6 1 8[将满]
个 人 Q Q 2 : 6 1 7 0 9 5 5 4 3[可加]
18#

回复 17楼n15976906190的帖子

是这样的 已经检查过了 输出的hwnd是对的 ,打开了3个客户端 Hwnds输出值有3个 Hwnd与其中一个相同 但是IF后面的没有执行

19#

回复 18楼a936827194的帖子
  1. If Hwnds(w)/1 = Hwnd/1 Then'若依然存在问题 自行学好基础 测试并不存在描述的问题 同时提问应该提供对应的调试输出截图
复制代码

收徒索引 ←点击

个 人 Q Q 1 : 1 2 2 3 1 1 6 6 1 8[将满]
个 人 Q Q 2 : 6 1 7 0 9 5 5 4 3[可加]
20#

回复 19楼n15976906190的帖子

If Hwnds(w)/1 = Hwnd/1 Then 谢谢大神 更换为这一句后解决了问题

发新话题 回复该主题