|
-
September 10th, 2004, 04:57 AM
#4
Re: Urgent Need
The Kill function in VB is used to delete a file, not to terminate a process.
To terminate a process, you will need to make use of API functions. Here's an example:
Code:
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 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 Sub Form_Load()
Dim intCnt As Integer
intCnt = KillProcByName("\calc.exe")
Call MsgBox("Program was terminated " & intCnt & " time(s).")
End Sub
Private Function KillProcByName(ByVal strProcName As String) As Integer
Dim lngRet As Long
Dim lngCb As Long, lngCbNeeded As Long, lngCbNeeded2 As Long
Dim intLoop As Integer
Dim lngProc As Long, lngProcIDs() As Long
Dim lngModules(0) As Long, strModule As String
lngCb = 8
lngCbNeeded = 96
Do While lngCb <= lngCbNeeded
lngCb = lngCb * 2
ReDim lngProcIDs(lngCb / 4) As Long
lngRet = EnumProcesses(lngProcIDs(0), lngCb, lngCbNeeded)
Loop
For intLoop = 1 To (lngCbNeeded / 4)
lngProc = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ Or PROCESS_TERMINATE, 0, lngProcIDs(intLoop))
If lngProc <> 0 Then
lngRet = EnumProcessModules(lngProc, lngModules(0), 1, lngCbNeeded2)
If lngRet <> 0 Then
strModule = Space(256)
Call GetModuleFileNameExA(lngProc, lngModules(0), strModule, Len(strModule))
strModule = Left(strModule, InStr(1, strModule, vbNullChar) - 1)
If StrComp(Right(strModule, Len(strProcName)), strProcName, vbTextCompare) = 0 Then
Call TerminateProcess(lngProc, 0)
KillProcByName = KillProcByName + 1
End If
End If
End If
Call CloseHandle(lngProc)
Next intLoop
End Function
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|