Kill Process

Liên hệ QC

levanduyet

Hãy để gió cuốn đi.
Thành viên danh dự
Tham gia
30/5/06
Bài viết
1,798
Được thích
4,699
Giới tính
Nam
Đôi lúc, chúng ta muốn đóng một process nào đó. Đây là hai cách mà chúng ta có thể dùng để thực hiện việc đó.

Method 1/Cách 1:
Dùng API
Đưa đoạn mã sau vào một module trong VBE:

Mã:
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 TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, lProcessID As Long) As Long
Private Declare Function ProcessFirst Lib "kernel32" Alias "Process32First" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) 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 Sub KillProcess(myName As String)
   Dim uProcess As PROCESSENTRY32
   Dim rProcessFound As Long
   Dim hSnapshot As Long
   Dim szExename As String
   Dim exitCode As Long
   Dim myProcess As Long
   Dim AppKill As Boolean
   Dim appCount As Long
   Dim i As Long
   On Local Error GoTo Finish
   appCount = 0
   uProcess.dwSize = Len(uProcess)
   hSnapshot = CreateToolhelpSnapshot(2&, 0&)
   rProcessFound = ProcessFirst(hSnapshot, uProcess)
   Do While rProcessFound
       i = InStr(1, uProcess.szExeFile, Chr(0))
       szExename = LCase$(Left$(uProcess.szExeFile, i - 1))
       If Right$(szExename, Len(myName)) = LCase$(myName) Then
           appCount = appCount + 1
           myProcess = OpenProcess(1&, -1&, uProcess.th32ProcessID)
           AppKill = TerminateProcess(myProcess, 0&)
           Call CloseHandle(myProcess)
       End If
       rProcessFound = ProcessNext(hSnapshot, uProcess)
   Loop
   Call CloseHandle(hSnapshot)
Finish:
End Sub

Bây giờ chỉ việc gọi thủ tục trên và truyền tham số là tên chương trình bạn muốn đóng. Trong ví dụ này là Test.exe
Mã:
Sub Main()
  KillProcess "Test.exe"
End Sub

Nguồn từ đây.

Method 2/Cách 2:
Dùng Shell

Mã:
Sub Close_Process()
Dim sCloseProcess As String

sCloseProcess = "TASKKILL /F /IM [COLOR=darkblue][B]Excel.exe[/B][/COLOR]"
Shell sCloseProcess , vbHide

End Sub

Đã thử, cách hai xem ra ngắn hơn.
Thảo luận tại đây.

Lê Văn Duyệt
 
Web KT
Back
Top Bottom