Private Declare Function CloseHandle Lib "Kernel32.dll" (ByVal Handle 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 EnumProcesses Lib "psapi.dll" (ByRef lpidProcess As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long
Private Declare Function GetModuleFileNameExA Lib "psapi.dll" (ByVal hProcess As Long, ByVal hModule As Long, ByVal ModuleName As String, ByVal nSize 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 GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Const PROCESS_TERMINATE = &H1
Private Const PROCESS_QUERY_INFORMATION = 1024
Private Const PROCESS_VM_READ = 16
Private Const MAX_PATH = 260
Private Sub Command1_Click()
' Cell A1: iexplore.exe, firefox.exe, etc.
Call Kill_Process(Sheets(1).Range("A1"))
End Sub
Private Sub Kill_Process(process_name As String)
Dim Modules(1 To 200) As Long
Dim ProcessIDs() As Long
Dim hProcess As Long, cb As Long, cbNeeded As Long, NumElements As Long, cbNeeded2 As Long
Dim i As Long, NumElements2 As Long, lRet As Long, nSize As Long, ExCode As Long
Dim ModuleName As String
List1.Clear
cb = 8
cbNeeded = 96
Do While cb <= cbNeeded
cb = cb * 2
ReDim ProcessIDs(cb / 4) As Long
lRet = EnumProcesses(ProcessIDs(1), cb, cbNeeded)
Loop
NumElements = cbNeeded / 4
For i = 1 To NumElements
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ Or PROCESS_TERMINATE, 0, ProcessIDs(i))
If hProcess <> 0 Then
lRet = EnumProcessModules(hProcess, Modules(1), 200, cbNeeded2)
If lRet <> 0 Then
ModuleName = Space(MAX_PATH)
nSize = 500
lRet = GetModuleFileNameExA(hProcess, Modules(1), ModuleName, nSize)
List1.AddItem ModuleName
If InStr(1, UCase(Trim(ModuleName)), UCase(Trim(process_name))) <> 0 Then
lRet = GetExitCodeProcess(hProcess, ExCode)
lRet = TerminateProcess(hProcess, ExCode)
MsgBox "Killed --> " & process_name
End If
End If
End If
lRet = CloseHandle(hProcess)
Next
End Sub