2016-07-11 16 views
0

Der Code, den ich unten habe, läuft ohne Fehler.VB6: Wie man auf die Ausführung eines Befehls wartet

Aber ich brauche es zu warten, bis der Prozess an dieser Zeile abgebrochen wurde: WshShell.Exec "TASKKILL /F /IM " & EngineRun.ProcessID vor dem Anzeigen der msgbox, dass es beendet wurde.

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 

WshShell.Exec "TASKKILL /F /IM " & EngineRun.ProcessID 

MsgBox EngineRun.ProcessID & (" terminated") 

End Sub 

Vielen Dank für jede Hilfe

Antwort

2

Könnten Sie verwenden, um die Run Methode statt? Siehe MSDN. Es unterstützt eine bWaitOnReturn Parameter:

WshShell.Run "TASKKILL /F /IM " & EngineRun.ProcessID,4 , True 
+0

Geändert zu 'WshShell.run" TASKKILL/F/IM "& EngineRun.ProcessID,, True' und wir haben einen Gewinner! Ich habe versucht eine andere Methode mit Do ... Bis, aber deine ist viel sauberer und einfacher. Vielen Dank für Ihre Zeit! – Chris

1
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2") 

Set colItems = objWMIService.ExecQuery("Select * From Win32_Process") 

For Each objItem in colItems 
    'msgbox objItem.ProcessID & " " & objItem.CommandLine 
    If objItem.name = "Calculator.exe" then objItem.terminate 
Next 

Tun Sie Dinge richtig:

object.Run(strCommand, [intWindowStyle], [bWaitOnReturn]) 

So Ihr Code aussehen würde.