VB6如何检查进程ID是否已终止

4
我需要知道进程ID是否存在。目前的代码如下:
Option Explicit

Dim WshShell As Object
Dim EngineRun As Object

Sub main()

Set WshShell = CreateObject("WScript.Shell")
Set EngineRun = WshShell.Exec("notepad.exe")

MsgBox EngineRun.ProcessID

If EngineRun.ProcessID = True Then
    WshShell.run "TASKKILL /F /IM " & EngineRun.ProcessID, , True
    MsgBox EngineRun.ProcessID & (" terminated")
Else
    MsgBox EngineRun.ProcessID & (" does not exist")
End If
End Sub

如果我去掉“if”语句,让它打开记事本并显示一个带有进程ID的消息框,那么当我点击消息框上的OK后,它就能成功地杀死记事本。

但是在有了“if”语句之后,无论记事本是否打开,它都会弹出“不存在”消息框。如果打开了记事本,它会成功地将其关闭,然后显示“不存在”消息框,而不是“已终止”消息框。

非常感谢您的任何建议!

1个回答

3

试一下这个

Option Explicit

Dim WshShell As Object
Dim EngineRun As Object
Dim objWMIService As Object
Dim colProcessList As Object

Sub Main

   Set WshShell = CreateObject("WScript.Shell")
   Set EngineRun = WshShell.Exec("notepad.exe")

   MsgBox EngineRun.ProcessID

   Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
   Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where ProcessID = " & EngineRun.ProcessID)

   If colProcessList.Count = 1 Then
       WshShell.run "TASKKILL /F /IM " & EngineRun.ProcessID, , True
       MsgBox EngineRun.ProcessID & (" terminated")
   Else
       MsgBox EngineRun.ProcessID & (" does not exist")
   End If

End Sub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接