正文

VBS进程判断代码(vbs检测指定的窗口是否存在)快来看

文章摘要

本文介绍了一种使用Windows PowerShell的WMI(Windows Management Instrumentation)技术来检测和终止进程的方法。文章首先展示了如何通过`IsProcess`和`IsProcessEx`函数来检测单个进程和进程组,这些函数通过遍历注册表中的进程来实现。接着,文章详细讲解了如何通过`CloseProcess`和`CloseProcessEx`函数来终止进程,并优化了传统循环的执行方式,采用Do-While循环以提高效率。此外,文章还比较了后台执行(使用0参数)和前馈执行(使用1参数)的区别,并通过实例说明了如何处理10秒超时的情况。代码示例清晰地展示了每一步操作的具体实现,为读者提供了实用的参考。

 ‘检测进程 proname=”qq.exe” reName=IsProcess(proname) If reName=True Then msgbox “发现进程” ElseIf reName=False Then msgbox “没有发现进程” End If ‘检测进程 优化后的代码 If IsProcess(“qq.exe”)=True Then msgbox “发现进程” Else msgbox “没有发现进程” End If ‘检测进程组 proName_all=”qq.exe|notepad.exe” reName=IsProcessEx(proName_all) If reName=True Then msgbox “发现进程” ElseIf reName=False Then msgbox “没有发现进程” End If ‘检测进程组 优化后的代码 If IsProcessEx(“qq.exe|notepad.exe”)=True Then msgbox “发现进程” Else msgbox “没有发现进程” End If ‘结束进程 前台执行 proname=”qq.exe” Call CloseProcess(proname, 1) ‘结束进程 后台执行 proname=”qq.exe” Call CloseProcess(proname, 0) ‘结束进程组 前台执行 proName_all=”qq.exe|notepad.exe” Call CloseProcessEx(proName_all, 1) ‘结束进程组 后台执行 proName_all=”qq.exe|notepad.exe” Call CloseProcessEx(proName_all, 0) ‘实例应用 结束进程 前台执行 10秒超时 proname=”qq.exe” For i=1 to 10 Call CloseProcess(proname,1) Delay 1000 reName=IsProcess(proname) If reName=False Then Exit For End If Next If reName=True Then msgbox “结束进程失败” Else msgbox “结束进程成功” End If ‘实例应用 结束进程 前台执行 优化后的代码(直到型循环) 有些进程VBS检测不到 所以先关闭后检测 Do Call CloseProcess(“qq.exe”,1) Delay 1000 Loop While IsProcess(“qq.exe”)=True msgbox “结束进程成功” ‘实例应用 结束进程组 后台执行 10秒超时 proName_all=”qq.exe|notepad.exe” For j=1 to 10 Call CloseProcessEx(proName_all,0) Delay 1000 reName=IsProcessEx(proName_all) If reName=False Then Exit For End If Next If reName=True Then msgbox “结束进程失败” Else msgbox “结束进程成功” End If ‘实例应用 结束进程组 后台执行 优化后的代码(直到型循环) 有些进程VBS检测不到 所以先关闭后检测 Do Call CloseProcessEx( “qq.exe|notepad.exe”,0) Delay 1000 Loop While IsProcessEx( “qq.exe|notepad.exe”)=True msgbox “结束进程成功” ‘函数 子程序部分代码 ‘检测进程 Function IsProcess(ExeName) Dim WMI, Obj, Objs,i IsProcess=False Set WMI=GetObject(“WinMgmts:”) Set Objs=WMI.InstancesOf(“Win32_Process”) For Each Obj In Objs If InStr(UCase(ExeName),UCase(Obj.Description)) <> 0 Then IsProcess=True Exit For End If Next Set Objs=Nothing Set WMI=Nothing End Function ‘结束进程 Sub CloseProcess(ExeName,RunMode) dim ws Set ws=createobject(“Wscript.Shell”) ws.run “cmd.exe /C Taskkill /f /im ” & ExeName,RunMode Set ws=Nothing End Sub ‘检测进程组 Function IsProcessEx(ExeName) Dim WMI, Obj, Objs,ProcessName,i IsProcessEx=False Set WMI=GetObject(“WinMgmts:”) Set Objs=WMI.InstancesOf(“Win32_Process”) ProcessName=Split(ExeName,”|”) For Each Obj In Objs For i=0 to UBound(ProcessName) If InStr(UCase(ProcessName(i)),UCase(Obj.Description)) <> 0 Then IsProcessEx=True Exit For End If Next Next Set Objs=Nothing Set WMI=Nothing End Function ‘结束进程组 Sub CloseProcessEx(ExeName,RunMode) dim ws,ProcessName,CmdCode,i ProcessName=Split(ExeName, “|”) For i=0 to UBound(ProcessName) CmdCode=CmdCode & ” /im ” & ProcessName(i) Next Set ws=createobject(“Wscript.Shell”) ws.run “cmd.exe /C Taskkill /f” & CmdCode,RunMode Set ws=Nothing End Sub