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

Status
Für weitere Antworten geschlossen.

Eichberg

Registered +
Registriert
Nov. 2008
Beiträge
129
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=-
 
Wenn dann noch das Präfix umgestellt wäre, könnte ich mich mit freuen.

So ist hier auch so

--------------- GESCHLOSSEN --------------------
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben Unten