Board logo

标题: [问题求助] 求大神帮忙改一下,VBS循环条件成立退出循环 [打印本页]

作者: ydm566    时间: 2014-12-12 13:22     标题: 求大神帮忙改一下,VBS循环条件成立退出循环

  1. set WshShell = CreateObject("WScript.Shell")
  2. WScript.Sleep 1000      ' 延时1秒
  3. dim wmi,proc,procs,proname,flag,WshShell   
  4.   
  5.     proname="QQ.exe" '服务进程的名称
  6. set wmi=getobject("winmgmts:{impersonationlevel=impersonate}!\\.\root\cimv2")   
  7. set procs=wmi.execquery("select * from win32_process")   
  8.   flag=true   
  9. for each proc in procs   
  10.     if strcomp(proc.name,proname)=0 then   
  11.       flag=false   
  12.       exit for   
  13.     end if   
  14. next   
  15.   set wmi=nothing   
  16.   if flag then   
  17.     Set WshShell = Wscript.CreateObject("Wscript.Shell")   
  18.     WshShell.Run ("D:\QQ\QQ.exe")
  19. end if  
复制代码
求大神帮忙改一下,循环100次检测QQ进程,如果检测次数在100次内QQ进程存在了,就退出速个VBS脚本,如果检测100次还没有QQ进程,就执行D:\QQ\QQ.exe
作者: yu2n    时间: 2014-12-12 14:36

  1. Const AppName = "QQ.exe"        ' 程序名称
  2. Const AppPath = "D:\QQ\QQ.exe"  ' 程序路径,不知道路径的话留空
  3. Main
  4. Sub Main()
  5.   ' 循环100次
  6.   For i = 1 To 100
  7.     ' 延时 1 秒
  8.     ' WScript.Sleep 1000
  9.     ' 检查QQ是否运行,运行则退出脚本
  10.     If IsRun(AppName, AppPath) > 0 Then WScript.Quit(0)
  11.   Next
  12.   ' 没有QQ运行,则启动QQ
  13.   CreateObject("Wscript.Shell").Run AppPath
  14. End Sub
  15. ' 检查程序是否运行,返回运行个数
  16. ' Eg: IsRun("mshta.exe", "c:\test.hta") > 1
  17. Function IsRun(byVal AppName, byVal AppPath)
  18.     IsRun = 0 : i = 0
  19.     For Each objItem in GetObject("winmgmts:\\.\root\cimv2:win32_process").instances_
  20.         IF LCase(objItem.name) = LCase(AppName) Then
  21.             If AppPath = "" Then IsRun = 1 : Exit Function
  22.             IF Instr( LCase(objItem.CommandLine) , LCase(AppPath) ) Then i = i + 1
  23.         End IF
  24.     Next
  25.     IsRun = i
  26. End Function
复制代码

作者: ydm566    时间: 2014-12-12 19:05

测试效果不对,和我上面的差不多,并没有循环检测,当没有QQ的时候,没有循环检测到100次,直接就打开QQ了
作者: ydm566    时间: 2014-12-12 19:07

回复 2# yu2n


    测试效果不对,和我上面的差不多,并没有循环检测,当没有QQ的时候,没有循环检测到100次,直接就打开QQ了
作者: yu2n    时间: 2014-12-12 22:44

回复 4# ydm566
你是如何判定没有循环100次的?
如果要延时的效果,把第9行代码前的单引号去掉。
如果要体会100次的效果,在第9行后面加1句:
  1. Msgbox Now()
复制代码

作者: ydm566    时间: 2014-12-13 16:12

回复 5# yu2n


    大神,您测试一下。运行VBS以后,进程里有QQ,并没有退出VBS,还是执行了打开QQ这个操作
作者: yu2n    时间: 2014-12-13 21:31

代码第2行“ 程序路径,不知道路径的话留空”。
  1. Const AppPath = "D:\QQ\QQ.exe"  ' 程序路径,不知道路径的话留空
复制代码
' 程序路径,不知道路径的话留空




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