Mit batch gehts NICHT. Du musst einfach prüfen, ob der Prozess läuft:
Code:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As Long, ByVal lpWindowName As Long) As Long
Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Const GW_HWNDNEXT = 2
Dim mWnd As Long
Function GetProcID(ByVal strWindowTitle as String) As Long
Dim test_hwnd As Long, test_pid As Long, test_thread_id As Long
Dim strWindowTitle as String
'strWindowTitle enthält den EXAKTEN Fenstertitels des Programms, dass du abschiessen willst
test_hwnd = FindWindow(vbNullString, strWindowTitel)
If GetParent(test_hwnd) = 0 Then
'Für den Fall, dass das geforderte Fenster kein Child-Prozess, liefert diese Funktion die PID zurück, im anderen Fall halte ich es für ungeschickt den Prozess abzuschiessen
test_thread_id = GetWindowThreadProcessId(test_hwnd, test_pid)
GetProcID = test_pid
End If
End Function
Private Sub Form_Load()
Dim strWindTitle as String
mWnd = GetProcID(strWindTitle)
TerminateProcess(mWnd, 0)
End Sub
Wenns nich läuft, dann einfach ausführen:
Code:
Dim TaskID
' Programm starten
TaskID = Shell("C:\Pfad\Programm.exe")
Achja, die 20 Sekunden hab ich vergessen XD.
Mach nen Timer. Stell ihn auf 20000 ms und schreib in das Event das Zeug rein!