Board logo

标题: [问题求助] [已解决]vbs代码,如果循环检测1个exe软件窗口标题,很稳定。循环检测2个,会崩溃。 [打印本页]

作者: ygqiang    时间: 2015-12-24 19:26     标题: [已解决]vbs代码,如果循环检测1个exe软件窗口标题,很稳定。循环检测2个,会崩溃。

本帖最后由 ygqiang 于 2016-1-9 18:07 编辑

[已解决]vbs代码,如果循环检测1个exe软件窗口标题,很稳定。循环检测2个,会崩溃。
窗口标题,是exe软件弹出来的。。而且如果是弹出2个窗口,一般不会同时或者连续弹出来。是各自分别在不同的时刻弹出来。

vbs代码,如果循环检测2个窗口标题。
测试过了,如果是连续间隔几秒钟出现相同的1个窗口标题,vbs代码会一直正常。
如果是连续间隔几秒,交叉出现2个不同的窗口标题,就会崩溃。

应该如何修改检测2个窗口标题的vbs代码呢?
  1.   'vbs检测1个窗口标题
  2. Const strWindowTitle = "aaaa"   ' 监控的窗口标题
  3. Do
  4.   Main
  5.   WScript.Sleep 2000
  6. Loop
  7. Sub Main()
  8.   Dim wso, fso
  9.   Set wso = CreateObject("Wscript.Shell")
  10.   Set fso=CreateObject("Scripting.FileSystemObject")
  11.   
  12.   '一直检查窗口,直到指定窗口出现
  13.   Do While wso.AppActivate(strWindowTitle) = False
  14.     WScript.sleep 200    ' 延时 0.2 秒
  15.    
  16.   Loop
  17.   
  18.   '激活窗口
  19.   Call WindowActive(strWindowTitle)
  20.   
  21.   '关闭窗口(发送 Alt + F4)
  22.   'wso.SendKeys "(%{F4})"
  23.   '关闭窗口(发送 回车)
  24.   wso.sendkeys "{enter}"  
  25.   Set wso = NoThing
  26.   
  27. End Sub
  28. '激活窗口
  29. Sub WindowActive(ByVal strWindowTitle)
  30.   Dim objWord, objTasks
  31.   Set objWord = CreateObject("word.Application")
  32.   Set objTasks = objWord.Tasks
  33.   If objTasks.Exists(strWindowTitle) Then
  34.     objTasks(strWindowTitle).Activate         '激活窗口
  35.     objTasks(strWindowTitle).WindowState = 0  '0平常模式、1最大化模式、2最小化模式
  36.   End If
  37.   objWord.Quit
  38. End Sub
复制代码

作者: ygqiang    时间: 2015-12-24 19:28

vbs检测2个窗口标题。。exe软件会崩溃。应该如何修改代码呢?多谢
  1.   'vbs检测2个窗口标题
  2. Const strWindowTitle = "aaaa|bbbb"   ' 监控的窗口标题
  3. Do
  4.   Main
  5.   WScript.Sleep 2000
  6. Loop
  7. Sub Main()
  8.   Dim wso, fso
  9.   Dim bFind, o
  10.   Set wso = CreateObject("Wscript.Shell")
  11.   Set fso=CreateObject("Scripting.FileSystemObject")
  12.   
  13. Do
  14. For Each o In Split(strWindowTitle,"|")
  15. If Trim(o) <> "" Then
  16. If CreateObject("WScript.Shell").Appactivate(Trim(o)) Then
  17. bFind = True ' 做标记-已找到
  18. Exit For
  19. End If
  20. End If
  21. Next
  22. If bFind = True Then Exit Do '退出循环
  23. WScript.Sleep 200 '延时0.2 秒
  24. Loop
  25.   '一直检查窗口,直到指定窗口出现
  26. If bFind Then
  27.   
  28.   '激活窗口
  29.   Call WindowActive(strWindowTitle)
  30.   
  31.   '关闭窗口(发送 Alt + F4)
  32.   'wso.SendKeys "(%{F4})"
  33.   '关闭窗口(发送 回车)
  34.   wso.sendkeys "{enter}"  
  35.   Set wso = NoThing
  36. Else
  37. End If
  38.   
  39. End Sub
  40. '激活窗口
  41. Sub WindowActive(ByVal strWindowTitle)
  42.   Dim objWord, objTasks
  43.   Set objWord = CreateObject("word.Application")
  44.   Set objTasks = objWord.Tasks
  45.   If objTasks.Exists(strWindowTitle) Then
  46.     objTasks(strWindowTitle).Activate         '激活窗口
  47.     objTasks(strWindowTitle).WindowState = 0  '0平常模式、1最大化模式、2最小化模式
  48.   End If
  49.   objWord.Quit
  50. End Sub
复制代码

作者: ygqiang    时间: 2016-1-9 18:06

本帖最后由 ygqiang 于 2016-1-9 18:08 编辑

初步解决。。。保存为2个vbs文件,开机启动,先后运行这2个vbs文件。
  1. Const strWindowTitle = "aaaa"   ' 监控的窗口标题aaaa
  2. Do
  3.   Main
  4.   WScript.Sleep 2000
  5. Loop
  6. Sub Main()
  7.   Dim wso, fso
  8.   Set wso = CreateObject("Wscript.Shell")
  9.   Set fso=CreateObject("Scripting.FileSystemObject")
  10.   
  11.   '一直检查窗口,直到指定窗口出现
  12.   Do While wso.AppActivate(strWindowTitle) = False
  13.     WScript.sleep 200    ' 延时 0.2 秒
  14.    
  15.   Loop
  16.   
  17.   '激活窗口
  18.   Call WindowActive(strWindowTitle)
  19.   
  20.   '关闭窗口(发送 Alt + F4)
  21.   'wso.SendKeys "(%{F4})"
  22.   '关闭窗口(发送 回车)
  23.   wso.sendkeys "{enter}"  
  24.   Set wso = NoThing
  25.   
  26. End Sub
  27. '激活窗口
  28. Sub WindowActive(ByVal strWindowTitle)
  29.   Dim objWord, objTasks
  30.   Set objWord = CreateObject("word.Application")
  31.   Set objTasks = objWord.Tasks
  32.   If objTasks.Exists(strWindowTitle) Then
  33.     objTasks(strWindowTitle).Activate         '激活窗口
  34.     objTasks(strWindowTitle).WindowState = 0  '0平常模式、1最大化模式、2最小化模式
  35.   End If
  36.   objWord.Quit
  37. End Sub
复制代码
  1. Const strWindowTitle = "bbbb"   ' 监控的窗口标题bbbb
  2. Do
  3.   Main
  4.   WScript.Sleep 2000
  5. Loop
  6. Sub Main()
  7.   Dim wso, fso
  8.   Set wso = CreateObject("Wscript.Shell")
  9.   Set fso=CreateObject("Scripting.FileSystemObject")
  10.   
  11.   '一直检查窗口,直到指定窗口出现
  12.   Do While wso.AppActivate(strWindowTitle) = False
  13.     WScript.sleep 200    ' 延时 0.2 秒
  14.    
  15.   Loop
  16.   
  17.   '激活窗口
  18.   Call WindowActive(strWindowTitle)
  19.   
  20.   '关闭窗口(发送 Alt + F4)
  21.   'wso.SendKeys "(%{F4})"
  22.   '关闭窗口(发送 回车)
  23.   wso.sendkeys "{enter}"  
  24.   Set wso = NoThing
  25.   
  26. End Sub
  27. '激活窗口
  28. Sub WindowActive(ByVal strWindowTitle)
  29.   Dim objWord, objTasks
  30.   Set objWord = CreateObject("word.Application")
  31.   Set objTasks = objWord.Tasks
  32.   If objTasks.Exists(strWindowTitle) Then
  33.     objTasks(strWindowTitle).Activate         '激活窗口
  34.     objTasks(strWindowTitle).WindowState = 0  '0平常模式、1最大化模式、2最小化模式
  35.   End If
  36.   objWord.Quit
  37. End Sub
复制代码

作者: zhangop9    时间: 2021-1-11 17:38

检测窗口标题




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2