Hi das müste gehen. Einfach in ein Modul kopieren.
Option Explicit
'--- Funktionen für Windows NT - erfordern ISAPI.DLL ---
Private Declare Function EnumProcesses _
Lib "psapi.dll" _
( _
ByRef lpidProcess As Long, _
ByVal cb As Long, _
ByRef cbNeeded As Long _
) _
As Long
Private Declare Function GetModuleFileNameEx _
Lib "psapi.dll" _
Alias "GetModuleFileNameExA" _
( _
ByVal hProcess As Long, _
ByVal hModule As Long, _
ByVal ModuleName As String, _
ByVal NameSizeM As Long _
) _
As Long
Private Declare Function EnumProcessModules _
Lib "psapi.dll" _
( _
ByVal hProcess As Long, _
ByRef lphModule As Long, _
ByVal cb As Long, _
ByRef cbNeeded As Long _
) _
As Long
Private Declare Function OpenProcess _
Lib "Kernel32.dll" _
( _
ByVal dwDesiredAccessas As Long, _
ByVal bInheritHandle As Long, _
ByVal dwProcId As Long _
) _
As Long
Private Declare Function CloseHandle _
Lib "Kernel32.dll" _
( _
ByVal Handle As Long _
) _
As Long
Private Declare Function TerminateProcess _
Lib "kernel32" _
( _
ByVal hProcess As Long, _
ByVal uExitCode As Long _
) _
As Long
Private Const MAX_PATH = 260
Private Const PROCESS_TERMINATE = &H1
Private Const STANDARD_RIGHTS_REQUIRED = &HF0000
Private Const SYNCHRONIZE = &H100000
Private Const PROCESS_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or _
&HFFF
Public Function KillProcess(strProc As String) As Boolean
Const MAX_PROCESSES = 256 ' entspricht 256 Prozessen
Const MAX_MODULES = 128 ' entspricht 128 Modulen pro Prozess
Dim lRet As Long, i As Long
Dim ArraySizeP As Long, BytesNeededP As Long, NumProcesses As Long
Dim ArraySizeM As Long, BytesNeededM As Long, NameSizeM As Long
Dim ProcessIDs(1 To MAX_PROCESSES) As Long
Dim Modules(1 To MAX_MODULES) As Long
Dim strModuleName As String
Dim hProcess As Long
ArraySizeP = MAX_PROCESSES * 4 ' je 4 Bytes pro Prozess
' reservieren
ArraySizeM = MAX_MODULES * 4 ' je 4 Bytes pro Modul
' reservieren
lRet = EnumProcesses(ProcessIDs(1), ArraySizeP, BytesNeededP)
NumProcesses = BytesNeededP / 4 ' Anzahl der vorhandenen
' Prozesse berechnen
For i = 1 To NumProcesses ' alle Processe untersuchen
hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, ProcessIDs(i))
If hProcess <> 0 Then
lRet = EnumProcessModules(hProcess, Modules(1), ArraySizeM, BytesNeededM)
If lRet <> 0 Then
strModuleName = Space(MAX_PATH)
NameSizeM = Len(strModuleName)
lRet = GetModuleFileNameEx(hProcess, Modules(1), strModuleName, _
NameSizeM)
If LCase(GetExeName(Left(strModuleName, lRet))) = LCase(strProc) Then
lRet = TerminateProcess(hProcess, 0)
lRet = CloseHandle(hProcess)
KillProcess = True ' Übereinstimmung, Prozeß wurde
' terminiert
Exit Function
End If
End If
End If
lRet = CloseHandle(hProcess)
Next
KillProcess = False ' keine Übereinstimmung, nicht
' gefunden
End Function
Private Function GetExeName(ByVal strModName As String) As String
Dim iBSPos As Integer
iBSPos = InStr(1, StrReverse(strModName), "\", vbTextCompare)
GetExeName = Right(strModName, iBSPos - 1)
End Function Aufrufen tust dus mit KillProcess(Deine EXE oder Programm) cu  |