用VBS调用程序并对程序的运行情况进行监控的两个代码
程序员文章站
2022-03-06 23:48:40
有同时要用一个cae软件调用外部程序,但是,通过这个cae软件调用外部程序以后,因为这个外部程序有参数,调用方法写在bat文件里的,由cae软件来调用这个bat,所以,ca...
有同时要用一个cae软件调用外部程序,但是,通过这个cae软件调用外部程序以后,因为这个外部程序有参数,调用方法写在bat文件里的,由cae软件来调用这个bat,所以,cae软件没办法对调用的程序进行监控,调用的程序还在运行当中,准备工作还没完成,就到了下一流程,所以,造成流程出错,我写了两个vbs代码,通过它来调用就解决了这个问题!两个小程序分别是按不同的方式来监控的!
两个程序的调用方式不一样,一个是对系统进程进行监控,一个是对程序生成的文件特征进行监控!
第一个:
‘该程序用来配合simcode调用其他程序,并对程序的运行情况做监控,!
‘监控方法是:查找程序的log文件,如果有结束标志,说明程序已经执行完毕!
set wshshell=wscript.createobject(”wscript.shell”)
wshshell.run(”notepad.exe c:\kw.txt”)'调用的程序
wscript.sleep 2000′等待2秒钟
dim fso,ts,i
do while not i=1′当i=1不成立时,一直循环!
set fso=wscript.createobject(”scripting.filesystemobject”)
set ts=fso.opentextfile(”c:\kw.txt”)'打开调用的程序日生的日志文件
do while not ts.atendofstream'当没有到文件尾时循环
data=ucase(trim(ts.readline))'读取日志文件中的一行
if instr(data,”ok”) then'查找上面读取到的内容是否存在程序运行完的标志!此例中标志为”ok”
i=1′当得到程序运行完成的标志时,传递一个值给do循环,使其结束循环,不再对log文件监控
exit do
end if
loop
set ts = nothing
set fso = nothing'关闭创建的对象
wscript.sleep 2000′等待2秒后,进行下一轮对log文件的监控
loop
wscript.echo “ok!”‘给用户一个反馈,调用的程序执行完毕!真实使用时,应该不要这一行!
第二个:
‘该程序用来配合simcode调用其他程序,并对程序的运行情况做监控,!
‘监控方法是:对系统进程的监控
set wshshell = wscript.createobject(”wscript.shell”)
allapp=”c:\windows\system32\notepad.exe” ‘写下要调用的程序的完整路径。
appname=”notepad.exe” ‘写下调用的程序的名称.
wshshell.run (allapp) ‘启动调用的程序
dim apppath
for each ps in getobject(”winmgmts:\\.\root\cimv2:win32_process”).instances_ ‘列出系统中所有正在运行的程序
if lcase(ps.name)=appname then'检测程序在进程中是否存在
apppath=ps.commandline'提取程序的命令行
end if
next
do'循环检测
myqqin=chkuin(app)'检测上面得到命令行是否在进程中存在!
if not myqqin then'如果没有运行则,告诉用户,并且结束监控!
msgbox “调用的程序已经退出了!”‘实际使用中,请取掉这一行!
exit do
else
wscript.sleep 3000′等待5秒
end if
loop'返回继续检测
function chkuin(app)
for each ps in getobject(”winmgmts:\\.\root\cimv2:win32_process”).instances_
if lcase(ps.name)=appname then
apppatht1=ps.commandline
if apppatht1=apppath then chkuin=true end if
end if
next
end function
两个程序的调用方式不一样,一个是对系统进程进行监控,一个是对程序生成的文件特征进行监控!
第一个:
‘该程序用来配合simcode调用其他程序,并对程序的运行情况做监控,!
‘监控方法是:查找程序的log文件,如果有结束标志,说明程序已经执行完毕!
set wshshell=wscript.createobject(”wscript.shell”)
wshshell.run(”notepad.exe c:\kw.txt”)'调用的程序
wscript.sleep 2000′等待2秒钟
dim fso,ts,i
do while not i=1′当i=1不成立时,一直循环!
set fso=wscript.createobject(”scripting.filesystemobject”)
set ts=fso.opentextfile(”c:\kw.txt”)'打开调用的程序日生的日志文件
do while not ts.atendofstream'当没有到文件尾时循环
data=ucase(trim(ts.readline))'读取日志文件中的一行
if instr(data,”ok”) then'查找上面读取到的内容是否存在程序运行完的标志!此例中标志为”ok”
i=1′当得到程序运行完成的标志时,传递一个值给do循环,使其结束循环,不再对log文件监控
exit do
end if
loop
set ts = nothing
set fso = nothing'关闭创建的对象
wscript.sleep 2000′等待2秒后,进行下一轮对log文件的监控
loop
wscript.echo “ok!”‘给用户一个反馈,调用的程序执行完毕!真实使用时,应该不要这一行!
第二个:
‘该程序用来配合simcode调用其他程序,并对程序的运行情况做监控,!
‘监控方法是:对系统进程的监控
set wshshell = wscript.createobject(”wscript.shell”)
allapp=”c:\windows\system32\notepad.exe” ‘写下要调用的程序的完整路径。
appname=”notepad.exe” ‘写下调用的程序的名称.
wshshell.run (allapp) ‘启动调用的程序
dim apppath
for each ps in getobject(”winmgmts:\\.\root\cimv2:win32_process”).instances_ ‘列出系统中所有正在运行的程序
if lcase(ps.name)=appname then'检测程序在进程中是否存在
apppath=ps.commandline'提取程序的命令行
end if
next
do'循环检测
myqqin=chkuin(app)'检测上面得到命令行是否在进程中存在!
if not myqqin then'如果没有运行则,告诉用户,并且结束监控!
msgbox “调用的程序已经退出了!”‘实际使用中,请取掉这一行!
exit do
else
wscript.sleep 3000′等待5秒
end if
loop'返回继续检测
function chkuin(app)
for each ps in getobject(”winmgmts:\\.\root\cimv2:win32_process”).instances_
if lcase(ps.name)=appname then
apppatht1=ps.commandline
if apppatht1=apppath then chkuin=true end if
end if
next
end function
上一篇: 怎么查QQ聊天记录 怎样恢复删除的手机QQ聊天记录技巧?
下一篇: golang 语言中错误处理机制