Von |
Kretschi |
Am |
29. Oktober 2007 um 10:22:35 |
Frage |
Hallo zusammen,
ich konnte folgendes Problem noch immer nicht lösen. Ich möchte eine Anwendung aus Excel heraus starten, warten bis sie fertig gerechnet hat und sie dann wieder automatisch schließen. Ich bin jetzt soweit, dass ich die Anwendung starten kann und sie gleich danach wieder geschlossen wird. Ich muss jedoch sicher gehn, dass sie fertig gerechnet hat. Die Anwendung (Simulationsprogramm) läuft unter DOS und am Ende erscheint ein Fenster mit der Meldung "Programm Terminated with exid code 0 - Exit Window? Ja/Nein. Da ich etliche tausend Läufe habe, muss ich die Anwendung auf jedenfall automatisch schließen können und nicht erst nach einer vorgegebenen Zeit t! Wer hat mir einen Tipp bzw. den passenden Code, da ich leider mit ein paar Stichwörtern wahrscheinlich nicht so viel anfangen werde! Hier ist mein bisheriger Code:[Option Explicit Private Declare Function TerminateProcess Lib "kernel32" (ByVal _ hProcess As Long, ByVal uExitCode As Long) As Long Private Declare Function OpenProcess Lib "kernel32" (ByVal _ dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal _ dwProcessID As Long) As Long Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As _ Long) As Long Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal _ hProcess As Long, lpExitCode As Long) As Long 'neu Const PROCESS_TERMINATE = &H1 Const Aktiv = &H103 'neu Private ProcessId As Long Private ProcessId_Exit As Long Private RetVal As Variant Sub Test3() Dim l As Long ProcessId = shell("D:\app\fcit\kpro46de\rkern\kprohaup.exe", vbNormalFocus) 'Shell startet das ausgewählte Programm. ProcessId_Exit = OpenProcess(PROCESS_TERMINATE, 0&, ProcessId) 'Mit dieser Funktion erhalten Sie das Object-Handle auf den 'aktiven Prozess. Do GetExitCodeProcess ProcessId_Exit, l DoEvents Loop While l = Aktiv RetVal = TerminateProcess(ProcessId_Exit, 1&) 'Mit der TerminateProcess Funktion können Sie den ausgewählten 'Prozess und all seine Threads (falls vorhanden) beenden. RetVal = CloseHandle(ProcessId_Exit) 'Hier wird das Handle wieder geschlossen. End Sub ] Vielen Dank!
MFG Kretschi |
|