Wie externes Programm beenden das mit "Shell" gestartet wurde?

  • geschlossen
  • Access

  • Eichberg
  • 5543 Aufrufe 2 Antworten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Wie externes Programm beenden das mit "Shell" gestartet wurde?

    Hi Gemeinde,

    nachdem ich nun schon einigen helfen konnte - brauch nun ich mal Hilfe!

    Ich suche eine Funktion in VisualBasic mit der ich ein extern gestartetes Programm wieder beenden kann!

    gestartet wird das Programm mit folgendem Aufruf:
    Shell "C:\Programme\Internet Explorer\IEXPLORE.EXE " , vbMinimizedNoFocus


    Hier wird zum Beispiel der InternetExplorer geöffnet!
    Aber wie kann ich den mit VBA wieder beenden?

    Schon mal danke für´s lesen und nochmal danke wenn mir jemand helfen kann!

    Gruß -=EICHBERG=-
  • ...wen´s interessiert, bin in einem anderen Forum fündig geworden und es funktioniert!

    -> Sollte jemand jedoch eine einfacherer Lösung haben, dann bin ich natürlich dankbar für jede Anregung!

    Daher lasse ich den thread noch ein bischen offen!

    Danke an "Nepumuk", das ist der Verfasser des Threads in einem anderen Forum, dessen Namen ich ja hier laut Forenregeln nicht nennen darf!

    Hier die Lösung von NEPUMUK:

    Option Explicit

    Private Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" ( _
    ByVal lFlgas As Long, _
    ByVal lProcessID As Long) As Long

    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 ProcessFirst Lib "kernel32" Alias "Process32First" ( _
    ByVal hSnapshot As Long, _
    ByRef uProcess As PROCESSENTRY32) As Long

    Private Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" ( _
    ByVal hSnapshot As Long, _
    ByRef uProcess As PROCESSENTRY32) As Long

    Private Declare Function CloseHandle Lib "kernel32" ( _
    ByVal hObject As Long) As Long

    Private Type PROCESSENTRY32
    dwSize As Long
    cntUsage As Long
    th32ProcessID As Long
    th32DefaultHeapID As Long
    th32ModuleID As Long
    cntThreads As Long
    th32ParentProcessID As Long
    pcPriClassBase As Long
    dwflags As Long
    szexeFile As String * 260
    End Type

    Private Const PROCESS_TERMINATE = &H1
    Private Const GW_HWNDNEXT As Long = 2

    Private Sub KillEXE(ByVal strEXEName As String)
    Dim lngHandle As Long, lngReturn As Long, lngTask As Long, lngResult As Long
    Dim udt32Current As PROCESSENTRY32
    lngHandle = CreateToolhelpSnapshot(2&, 0&)
    If lngHandle <> 0 Then
    udt32Current.dwSize = Len(udt32Current)
    lngReturn = ProcessFirst(lngHandle, udt32Current)
    Do While Not (lngReturn = 0)
    If InStr(1, udt32Current.szexeFile, strEXEName, vbTextCompare) > 0 Then
    lngTask = OpenProcess(PROCESS_TERMINATE, 0&, udt32Current.th32ProcessID)
    lngResult = TerminateProcess(lngTask, 1&)
    lngResult = CloseHandle(lngTask)
    End If
    lngReturn = ProcessNext(lngHandle, udt32Current)
    Loop
    Call CloseHandle(lngHandle)
    End If
    End Sub

    Public Sub test()
    Call KillEXE("IEXPLORE.EXE")
    End Sub



    Ihr könnt natürlich anstatt "IEXPLORE.EXE" jeden anderen Prozess beenden, aber vorsicht der Prozess wird ohne Rückfrage beendet. D.h. nichtgespeicherte Daten gehen verloren!

    Best Regards -=EICHBERG=-