Mitunter ist es notwendig eine beliebige (fremde) Anwendung nur für einen bestimmten Zeitraum auszuführen und Sie danach wieder zu beenden. Mit reinen Visual Basic Bordmitteln ist dies freilich nicht möglich, es bedarf eines Griffes in die Windows API-Trickkiste. Dieses Beispiel demonstriert einen möglichen Lösungsweg und garantiert gleichzeitig das die eigene Anwendung im entsprechenden Zeitraum vollkommen reaktionsfähig bleibt. Hierzu wird zunächst die fremde Anwendung mit Hilfe der Visual Basic Shell-Funktion gestartet. Über den von der Funktion zurückgegebene process identifier (ProcessID bzw. PID) bleibt das gestartete Programm identifizierbar und kann so nach Ablauf der vorgesehenen Zeit unter Anwendung der API-Funktionen OpenProcess und TerminateProcess wieder beendet werden. Zur Bemessung des gewünschten Zeitraumes bis zur Beendigung wird ein einfaches Timer-Steuerelement verwendet.
' VISUAL BASIC WORLD' ===========================================' Das große Portal zum Thema Visual Basic.'' Wenn Ihnen dieser Source Code gefallen hat,' dann empfehlen Sie Visual Basic World bitte' weiter und/oder setzen Sie einen Link auf:'' http://www.visualbasicworld.de/'' Vernetzen Sie sich mit uns:'' http://twitter.com/visualbasicwrld OptionExplicitPrivateDeclareFunction TerminateProcess Lib "kernel32" _
(ByVal hProcess AsLong, ByVal uExitCode AsLong) AsLongPrivateDeclareFunction OpenProcess Lib "kernel32" _
(ByVal dwDesiredAccess AsLong, _
ByVal bInheritHandle AsLong, _
ByVal dwProcessId AsLong) AsLongPrivateDeclareFunction CloseHandle Lib "kernel32" _
(ByVal hObject AsLong) AsLongConst PROCESS_TERMINATE = &H1
Private ProcessId AsLongPrivate ProcessId_ExitAsLongPrivate RetVal As Variant
PrivateSub cmdWählen_Click()
cdcProgramm.ShowOpen
txtProgramm.Text = cdcProgramm.FileName
'Mit Hilfe des Common Dialog Controls können'Sie hier ein Programm auswählen.EndSubPrivateSub cmdStart_Click()
If txtProgramm.Text <> "" Then
ProcessId = Shell(txtProgramm.Text, vbNormalFocus)
'Shell startet das ausgewählte Programm.
Timer.Interval = CInt(txtZeit.Text) * 1000
'Timer Interval einstellen.EndIfEndSubPrivateSub Timer_Timer()
ProcessId_Exit = OpenProcess(PROCESS_TERMINATE, 0&, ProcessId)
'Mit dieser Funktion erhalten Sie das Object-Handle auf den'aktiven Prozess.
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.
Timer.Interval = 0
EndSub