快速业务通道

vbs中实现启动两个应用程序,一直等到其中一个程序结束,然后关闭另一个?

作者 佚名 来源 ASP编程 浏览 发布时间 2013-07-09
D的ID。如果删除的进程具有不同的ID,则它不是“计算器”实例;在这种情况下,脚本将恢复监视。如果删除的进程具有与intCalcID相同的ID,则它一定是“计算器”实例(因为进程ID必须是唯一的)。在这种情况下,我们要停止监视,然后关闭“记事本”。

下面是实际执行监视的代码:

DoUntili=999
SetobjProcess=colProcesses.NextEvent
IfobjProcess.TargetInstance.ProcessID=intCalcIDThen
ExitDo
EndIf
Loop

这里我们做的是设置一个循环,该循环一直运行到变量i等于999。现在,事实是变量i将始终不等于999;这只是个小技巧,确保循环一直运行到“计算器”关闭。(我们如何知道变量i将始终不等于999?是这样,我们没有为i赋值;因此,它取默认值0。因为我们从未对该值进行任何更改,所以i始终为0,因此将始终不等于999。)

在循环中,我们使用此行代码等待下一个删除的进程:

SetobjProcess=colProcesses.NextEvent

每次删除进程我们都检查ProcessID与分配给“计算器”的进程ID是否相符。如果相符,我们则使用ExitDo命令断开循环,继续脚本。如果不具有相同的ID,则我们只需继续循环,等待下一个删除的进程。(正如我们上面所说的,i将始终不等于999,但是没关系:使用ExitDo命令就可以脱离循环。)

注意。我们发现,我们有点草草掠过事件监视的整个思路。如果您对诸如__InstanceDeletionEvent和colProcesses.NextEvent的内容有点糊涂,请参阅脚本专家网络广播防患于未然:WMI事件简介(英文)。


现在,我们只需要终止我们启动的“记事本”实例。要完成此任务,我们使用此WMI查询检索具有分配给“记事本”的进程ID的所有进程的集合:

SetcolProcesses=objWMIService.ExecQuery_
("Select*fromWin32_ProcessWhereProcessID="&intNotepadID)

获得此集合后,我们使用此代码块在整个进程集(只有一个进程)中循环,然后使用Terminate方法关闭应用程序:

ForEachobjProcessincolProcesses
objProcess.Terminate()
Next

顺便说一句,此方法既适用于远程计算机也适用本地计算机;只需将变量strComputer的值更改为远程计算机的名称。但是,要记住,在WindowsXP和WindowsServer2003中,在远程计算机上启动的进程是在不可见的窗口中运行的;它们在屏幕上不可见。这意味着,处理远程计算机时,对于不需要任何用户交互的应用程序,此方法很有用;而对于确实需要用户干预的应用程序,此方法远不及其他方法有用(实际上完全没用)。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号