Đóng file .exe đã mở bằng Shell như thế nào?

  • Thread starter dvu58
  • Ngày gửi
D

dvu58

Guest
1/6/08
1
0
0
61
Dalat
Từ Excel, tôi dùng VBA tạo 1 code để mở một file .exe bằng lệnh SHELL.

Xin các bạn cho tôi biết: Muốn đóng lại file .exe đó, tôi dùng lệnh nào trong VBA.

Cảm ơn các bạn
 
Khóa học Quản trị dòng tiền
A

atmt17

Trung cấp
26/9/08
70
1
6
Đồng Nai
Từ Excel, tôi dùng VBA tạo 1 code để mở một file .exe bằng lệnh SHELL.

Xin các bạn cho tôi biết: Muốn đóng lại file .exe đó, tôi dùng lệnh nào trong VBA.

Cảm ơn các bạn
câu hỏi đơn giản nhưng để giải quyết quả chẳng dể tí nào!
Tặng anh code này (dùng API)
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

Mã:
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

Mã:
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

Đây là cái "sườn". Để sử dụng anh phải viết thêm 1 code nữa.
Ví dụ: anh đang chạy file Test.exe, giờ anh muốn tắt nó, anh sẽ viết như sau:
Mã:
Sub Main()
  KillProcess "Test.exe"
End Sub
Anh thử xem
 
levanduyet

levanduyet

Welcome
16/10/04
537
19
18
HCM
my.opera.com
Bác thử dùng code này:

Mã:
Sub Close_Process()
Dim sCloseProcess As String
'Thay process Bác muốn tại đây. Ví dụ: Excel.exe
sCloseProcess = "TASKKILL /F /IM [COLOR="Red"]Excel.exe[/COLOR]"
Shell sCloseProcess , vbHide

End Sub

Lê Văn Duyệt
 
A

atmt17

Trung cấp
26/9/08
70
1
6
Đồng Nai
Bác thử dùng code này:

Mã:
Sub Close_Process()
Dim sCloseProcess As String
'Thay process Bác muốn tại đây. Ví dụ: Excel.exe
sCloseProcess = "TASKKILL /F /IM [COLOR="Red"]Excel.exe[/COLOR]"
Shell sCloseProcess , vbHide

End Sub

Lê Văn Duyệt

He... he... Bác lại mang chuông đi đánh xứ người ha!
 

Xem nhiều

Webketoan Zalo OA