18. Apr 2024, 22:51
VB-fun.de - Beitragsübersicht zum VB-/VBA-Forum-Archiv 0401
  E03: Externes Programm automatisch schließen
 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
[ VB-/VBA-Forum | Archiv 0401 | Archiv-Übersicht ]
 Antworten
E03: Externes Programm automatisch schließen - Kretschi 29. Oktober 2007 um 10:22:35
Re: Externes Programm automatisch schließen - bumsoase 29. Oktober 2007 um 19:37:59
Re: Externes Programm automatisch schließen - HomerS 29. Oktober 2007 um 20:09:07

Zum Seitenanfang

Startseite | VB-/VBA-Tipps | Projekte | Tutorials | API-Referenz | Komponenten | Bücherecke | Gewinnspiele | VB-/VBA-Forum | DirectX | DirectX-Forum | VB.Net | VB.Net-Forum | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum