2016-09-21 4 views
3

Мне нужно знать, существует ли идентификатор процесса. Код до сих пор:VB6, как проверить, завершен ли идентификатор процесса

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 

Если я вынимаю «если» заявление и открыть его Блокнот и показать MsgBox с Process ID, он будет успешно убить Notepad, когда я нажимаю ОК в MsgBox

Но с выражением «If» он покажет «не существует» MsgBox, открыт ли блокнот или нет. Если он открыт, он успешно уничтожит его, а затем покажет «не существует» MsgBox вместо «завершенного» MsgBox.

Любые идеи очень ценятся!

ответ

2

Попробуйте

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