• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Liệt kê Process, Ngừng và chạy lại

Các Module, Class, UserControl và thư viện OCX, DLL hỗ trợ cho Visual Basic
Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4751
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 13 time
Been thanked: 508 time

Liệt kê Process, Ngừng và chạy lại

Gửi bàigửi bởi truongphu » T.Bảy 03/04/2010 7:29 am

Tên: Liệt kê Process, Ngừng và chạy lại
Loại: Module
Ngôn ngữ lập trình: VB6
Tác giả: Sưu tầm
Chức năng: Liệt kê các Process đang chạy, Làm Ngừng (Suspend) và chạy lại (Resume)



  1. Public Type PROCESS
  2. ID As Long
  3. ExeFile As String
  4. End Type
  5.  
  6. Public Type THREAD
  7. ID As Long
  8. OwnerProcess As Long
  9. End Type
  10.  
  11. Private Const TH32CS_SNAPPROCESS = &H2
  12. Private Const TH32CS_SNAPTHREAD = &H4
  13.  
  14. Private Const STANDARD_RIGHTS_REQUIRED = &HF0000
  15. Private Const THREAD_SUSPEND_RESUME = &H2
  16.  
  17. Private Const MAX_PATH = 260
  18. Private Const hNull = 0
  19.  
  20. Private Type PROCESSENTRY32
  21. dwSize As Long
  22. cntUsage As Long
  23. th32ProcessID As Long
  24. th32DefaultHeapID As Long
  25. th32ModuleID As Long
  26. cntThreads As Long
  27. th32ParentProcessID As Long
  28. pcPriClassBase As Long
  29. dwFlags As Long
  30. szExeFile As String * MAX_PATH
  31. End Type
  32.  
  33. Private Type THREADENTRY32
  34. dwSize As Long
  35. cntUsage As Long
  36. th32ThreadID As Long
  37. th32OwnerProcessID As Long
  38. tpBasePri As Long
  39. tpDeltaPri As Long
  40. dwFlags As Long
  41. End Type
  42.  
  43. Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" ( _
  44. ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long
  45. Private Declare Function Process32First Lib "kernel32" ( _
  46. ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long
  47. Private Declare Function Process32Next Lib "kernel32" ( _
  48. ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long
  49. Private Declare Function Thread32First Lib "kernel32" ( _
  50. ByVal hSnapshot As Long, lpte As THREADENTRY32) As Long
  51. Private Declare Function Thread32Next Lib "kernel32" ( _
  52. ByVal hSnapshot As Long, lpte As THREADENTRY32) As Long
  53. Private Declare Function OpenThread Lib "kernel32" ( _
  54. ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
  55. ByVal dwThreadId As Long) As Long
  56. Private Declare Function CloseHandle Lib "kernel32" ( _
  57. ByVal hObject As Long) As Long
  58. Private Declare Function SuspendThread Lib "kernel32" ( _
  59. ByVal hThread As Long) As Long
  60. Private Declare Function ResumeThread Lib "kernel32" ( _
  61. ByVal hThread As Long) As Long
  62.  
  63. Public Function ListProcesses(Processes() As PROCESS) As Long
  64. Dim aExeName() As String
  65. Dim f As Long, sname As String
  66. Dim hSnap As Long, proc As PROCESSENTRY32
  67.  
  68. ReDim Processes(0)
  69. ListProcesses = 0
  70.  
  71. hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
  72. If hSnap = hNull Then Exit Function
  73. proc.dwSize = Len(proc)
  74. f = Process32First(hSnap, proc)
  75. Do While f
  76. sname = Left$(proc.szExeFile, InStr(1, proc.szExeFile, _
  77. Chr(0)) - 1)
  78. aExeName = Split(sname, "\")
  79. sname = aExeName(UBound(aExeName))
  80. ReDim Preserve Processes(UBound(Processes) + 1)
  81. Processes(UBound(Processes)).ID = proc.th32ProcessID
  82. Processes(UBound(Processes)).ExeFile = sname
  83. ListProcesses = UBound(Processes)
  84. f = Process32Next(hSnap, proc)
  85. Loop
  86. End Function
  87.  
  88. Public Function ListThreads(Threads() As THREAD) As Long
  89. Dim f As Long
  90. Dim hSnap As Long, THREAD As THREADENTRY32
  91.  
  92. ReDim Threads(0)
  93. ListThreads = 0
  94.  
  95. hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0)
  96. If hSnap = hNull Then Exit Function
  97. THREAD.dwSize = Len(THREAD)
  98. f = Thread32First(hSnap, THREAD)
  99. Do While f
  100. ReDim Preserve Threads(UBound(Threads) + 1)
  101. Threads(UBound(Threads)).ID = THREAD.th32ThreadID
  102. Threads(UBound( _
  103. Threads)).OwnerProcess = THREAD.th32OwnerProcessID
  104. ListThreads = UBound(Threads)
  105. f = Thread32Next(hSnap, THREAD)
  106. Loop
  107. End Function
  108.  
  109. Public Function VBSuspendThread(ThreadID As Long) As Long
  110. Dim hThread As Long
  111.  
  112. VBSuspendThread = -1
  113. hThread = OpenThread( _
  114. STANDARD_RIGHTS_REQUIRED Or THREAD_SUSPEND_RESUME, 0, ThreadID)
  115. If hThread <> hNull Then
  116. VBSuspendThread = SuspendThread(hThread)
  117. Call CloseHandle(hThread)
  118. End If
  119. End Function
  120.  
  121. Public Function VBResumeThread(ThreadID As Long) As Long
  122. Dim hThread As Long
  123.  
  124. VBResumeThread = -1
  125. hThread = OpenThread( _
  126. STANDARD_RIGHTS_REQUIRED Or THREAD_SUSPEND_RESUME, 0, ThreadID)
  127. If hThread <> hNull Then
  128. VBResumeThread = ResumeThread(hThread)
  129. Call CloseHandle(hThread)
  130. End If
  131. End Function
  132.  
  133. Public Function SuspendProcessByName(ProcName As String) As Long
  134. Dim Processes() As PROCESS
  135. Dim numProcesses As Long
  136. Dim X As Long
  137.  
  138. SuspendProcessByName = 0
  139. numProcesses = ListProcesses(Processes)
  140. For X = 1 To numProcesses
  141. If LCase(Processes(X).ExeFile) = LCase(ProcName) Then
  142. SuspendProcessByName = SuspendProcessByPID(Processes(X).ID)
  143. End If
  144. Next
  145. End Function
  146.  
  147. Public Function SuspendProcessByPID(ProcID As Long) As Long
  148. Dim Threads() As THREAD
  149. Dim numThreads As Long
  150. Dim X As Long
  151. Dim numThreadsSuspended As Long
  152.  
  153. numThreadsSuspended = 0
  154. numThreads = ListThreads(Threads)
  155. For X = 1 To numThreads
  156. If Threads(X).OwnerProcess = ProcID Then
  157. If VBSuspendThread(Threads(X).ID) > -1 Then
  158. numThreadsSuspended = numThreadsSuspended + 1
  159. End If
  160. End If
  161. Next
  162. SuspendProcessByPID = numThreadsSuspended
  163. End Function
  164.  
  165. Public Function ResumeProcessByName(ProcName As String) As Long
  166. Dim Processes() As PROCESS
  167. Dim numProcesses As Long
  168. Dim X As Long
  169.  
  170. ResumeProcessByName = 0
  171. numProcesses = ListProcesses(Processes)
  172. For X = 1 To numProcesses
  173. If LCase(Processes(X).ExeFile) = LCase(ProcName) Then
  174. ResumeProcessByName = ResumeProcessByPID(Processes(X).ID)
  175. End If
  176. Next
  177. End Function
  178.  
  179. Public Function ResumeProcessByPID(ProcID As Long) As Long
  180. Dim Threads() As THREAD
  181. Dim numThreads As Long
  182. Dim X As Long
  183. Dim numThreadsResumed As Long
  184.  
  185. numThreadsResumed = 0
  186. numThreads = ListThreads(Threads)
  187. For X = 1 To numThreads
  188. If Threads(X).OwnerProcess = ProcID Then
  189. If VBResumeThread(Threads(X).ID) > -1 Then
  190. numThreadsResumed = numThreadsResumed + 1
  191. End If
  192. End If
  193. Next
  194. ResumeProcessByPID = numThreadsResumed
  195. End Function
  196.  
  197.  
Tập tin đính kèm
Suspend Process.rar
(2.34 KiB) Đã tải 1640 lần


o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

hmkg
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 68
Ngày tham gia: CN 12/12/2010 5:40 pm
Has thanked: 13 time
Been thanked: 1 time

Re: Liệt kê Process, Ngừng và chạy lại

Gửi bàigửi bởi hmkg » T.Hai 09/07/2012 8:26 am

Lỗi này sửa sao đây bác phú ?


Hình ảnh



Hình ảnh

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4751
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 13 time
Been thanked: 508 time

Re: Liệt kê Process, Ngừng và chạy lại

Gửi bàigửi bởi truongphu » T.Hai 09/07/2012 9:54 am

Đấy là hđh bảo mật, thì cứ ok source safe
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

hmkg
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 68
Ngày tham gia: CN 12/12/2010 5:40 pm
Has thanked: 13 time
Been thanked: 1 time

Re: Liệt kê Process, Ngừng và chạy lại

Gửi bàigửi bởi hmkg » T.Hai 09/07/2012 10:02 am

Hơ hơ nhấn yes nó bắt đền use và pass máy (em nhớ dc chết liền) :P
chọn no thì vẫn thấy chạy bt :D có điều bảo mật ko cao ^^

Hình đại diện của người dùng
KGI
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 59
Ngày tham gia: T.Bảy 05/11/2011 8:00 am
Been thanked: 12 time

Re: Liệt kê Process, Ngừng và chạy lại

Gửi bàigửi bởi KGI » T.Bảy 14/07/2012 2:10 pm

Bác phú cho em hỏi thêm là:
Ta có thể suppend process thồn qua hwnd ko ?
có nghĩa là có thể suppend ứng dụng khi ta biết dc class và title của nó ?
(cho em xin demo luôn ạ)

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4751
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 13 time
Been thanked: 508 time

Re: Liệt kê Process, Ngừng và chạy lại

Gửi bàigửi bởi truongphu » T.Bảy 14/07/2012 2:53 pm

KGI đã viết:Ta có thể suppend process thồn qua hwnd ko ?
có nghĩa là có thể suppend ứng dụng khi ta biết dc class và title của nó ?

1- từ hWnd tìm ThreadProcessId nhờ hàm
  1. Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwprocessid As Long) As Long
  2.  

2- Dùng hàm SetThreadPriority
  1. Private Declare Function SetThreadPriority Lib "kernel32" (ByVal hThread As Long, ByVal nPriority As Long) As Long
  2.  


các mức là:

Mã: Chọn hết

Const THREAD_BASE_PRIORITY_IDLE = -15
Const THREAD_BASE_PRIORITY_LOWRT = 15
Const THREAD_BASE_PRIORITY_MIN = -2
Const THREAD_BASE_PRIORITY_MAX = 2
Const THREAD_PRIORITY_LOWEST = THREAD_BASE_PRIORITY_MIN
Const THREAD_PRIORITY_HIGHEST = THREAD_BASE_PRIORITY_MAX
Const THREAD_PRIORITY_BELOW_NORMAL = (THREAD_PRIORITY_LOWEST + 1)
Const THREAD_PRIORITY_ABOVE_NORMAL = (THREAD_PRIORITY_HIGHEST - 1)
Const THREAD_PRIORITY_IDLE = THREAD_BASE_PRIORITY_IDLE
Const THREAD_PRIORITY_NORMAL = 0
Const THREAD_PRIORITY_TIME_CRITICAL = THREAD_BASE_PRIORITY_LOWRT
Const HIGH_PRIORITY_CLASS = &H80
Const IDLE_PRIORITY_CLASS = &H40
Const NORMAL_PRIORITY_CLASS = &H20
Const REALTIME_PRIORITY_CLASS = &H100
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
KGI
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 59
Ngày tham gia: T.Bảy 05/11/2011 8:00 am
Been thanked: 12 time

Re: Liệt kê Process, Ngừng và chạy lại

Gửi bàigửi bởi KGI » T.Bảy 14/07/2012 2:57 pm

Cho e xin demo tham khảo dc ko bác
ví dụ suppend noteapd

hmkg
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 68
Ngày tham gia: CN 12/12/2010 5:40 pm
Has thanked: 13 time
Been thanked: 1 time

Re: Liệt kê Process, Ngừng và chạy lại

Gửi bàigửi bởi hmkg » T.Bảy 21/07/2012 9:11 pm

Xin các bác cho em demo suppend ứng dụng qua hwnd hoàn chỉnh

hmkg
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 68
Ngày tham gia: CN 12/12/2010 5:40 pm
Has thanked: 13 time
Been thanked: 1 time

Re: Liệt kê Process, Ngừng và chạy lại

Gửi bàigửi bởi hmkg » T.Ba 31/07/2012 8:02 am

Không bác nào giúp nhỉ :( help me !

nqhieu2002
Thành viên chính thức
Thành viên chính thức
Bài viết: 35
Ngày tham gia: T.Bảy 01/10/2011 10:43 am
Has thanked: 5 time

Re: Liệt kê Process, Ngừng và chạy lại

Gửi bàigửi bởi nqhieu2002 » T.Năm 23/08/2012 2:59 pm

Bác Trường Phú ơi! Giúp em vụ này nhé
viewtopic.php?f=7&t=24253
em đọc qua topic này của bác mà ko rõ hết

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4751
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 13 time
Been thanked: 508 time

Re: Liệt kê Process, Ngừng và chạy lại

Gửi bàigửi bởi truongphu » T.Năm 23/08/2012 8:10 pm

KGI đã viết:Cho e xin demo tham khảo dc ko bác
ví dụ suppend noteapd

hmkg đã viết:Xin các bác cho em demo suppend ứng dụng qua hwnd hoàn chỉnh

nqhieu2002 đã viết:Bác Trường Phú ơi! Giúp em vụ này nhé
viewtopic.php?f=7&t=24253
em đọc qua topic này của bác mà ko rõ hết


===
cảm giác chung là hơi oải...

Sau đây là Project minh họa module trên
Trong folder kèm có aaaa.exe là đồng hồ, khi chạy project sẽ gọi aaaa.exe chạy luôn để các bạn tiện theo dõi và thao tác: ngừng, chạy lại...vv

Hình minh họa:
untitled.JPG


Bạn chỉ việc nhấn vào List1 bên trái aaa.exe, List2 sẽ tự tìm và thể hiện các số ID cùng Name trên các textbox bên phải.
Và bạn chỉ việc nhấn các nút suspend hay Resume

Đã OK chưa?
Tập tin đính kèm
Pause Process Resume.rar
(6.53 KiB) Đã tải 296 lần
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

eyesofpain92
Bài viết: 1
Ngày tham gia: T.Hai 26/12/2016 9:52 am
Has thanked: 1 time

Re: Liệt kê Process, Ngừng và chạy lại

Gửi bàigửi bởi eyesofpain92 » T.Hai 26/12/2016 10:10 am

Bác Phú có cách nào để chuyển hàm này sang chạy đc trên 64 bit ko giúp e với. Vb6 ko có Int64 nên khó quá.

Mã: Chọn hết

Private Const MAX_PATH                  As Long = 260
Private Const PROCESS_QUERY_INFORMATION As Long = &H400
Private Const PROCESS_VM_READ           As Long = &H10

Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal pid As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long
Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)

Public Function GetProcessCommandLine(ByVal ProcessID As Long) As String

    Dim hKernel As Long, strName As String, hProc As Long, dwAddr As Long, dwRead As Long
   
    hProc = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, ProcessID)
   
    If hProc = 0 Then Exit Function
    hKernel = GetModuleHandle("kernel32")
    dwAddr = GetProcAddress(hKernel, "GetCommandLineA")
    CopyMemory dwAddr, ByVal dwAddr + 1, 4
    If ReadProcessMemory(hProc, ByVal dwAddr, dwAddr, 4, dwRead) Then
        strName = String(MAX_PATH, Chr(0))
        If ReadProcessMemory(hProc, ByVal dwAddr, ByVal strName, MAX_PATH, dwRead) Then
            strName = Left(strName, InStr(strName, Chr(0)) - 1)
            GetProcessCommandLine = strName
        End If
    End If
    CloseHandle hProc

End Function


Quay về “[VB] Module, Class, UserControl, OCX”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.1 khách