ورود

View Full Version : سوال: دستیابی به جزئیات process های Task Manager



just4froum
پنج شنبه 31 شهریور 1390, 18:41 عصر
با سلام :

می خواستم بدونم چطوری میشه به process های Task Manager دسترسی پیدا کرد ؟
(یعنی اسمشون و میزان سیپیویی که اشغال می کنند و میزان مموری و ...)

و بعد از دسترسی چه طوری میشه end process کرد. :متفکر::متفکر::متفکر:

با تشکر .

quiet_programmer
پنج شنبه 31 شهریور 1390, 19:13 عصر
با سلام.

با wmi میتونی اینکارو انجام بدی. مثلا تو کد زیر من یه پروسس رو سرچ میکنم در صورتی که در حال اجرا باشه اون رو kill میکنم.

Public Sub TerminateExplorer()
While ProcessExist("Explorer.exe")
Shell "TASKKILL /F /IM Explorer.exe", vbHide
Sleep 3000
Wend
End Sub

Private Function ProcessExist(PName As String) As Boolean
Set objwmiservice = GetObject("winmgmts:{impersonationLevel=impersonate}!\\." & "\root\cimv2")
Set ColProcessList = objwmiservice.execquery("SELECT * FROM Win32_Process")
For Each ObjProcess In ColProcessList
If UCase(ObjProcess.Name) = UCase("Explorer.exe") Then
ProcessExist = True
Exit Function
End If
Next
ProcessExist = False
End Function

با استفاده از همین کد میتونی اطلاعات دیگه ی پروسس رو استخراج کنی.
یا حق
موفق باشید

just4froum
جمعه 01 مهر 1390, 00:03 صبح
از آقای quiet_programmer بسیار متشکرم.

فقط میشه راجع به این دوخط بیشتر توضیح بدبد.

Set objwmiservice = GetObject("winmgmts:{impersonationLevel=impersonat e}!\\." & "\root\cimv2")
Set ColProcessList = objwmiservice.execquery("SELECT * FROM Win32_Process")


با تشکر فراوان

setroyd
جمعه 01 مهر 1390, 03:26 صبح
روی هر process که خواستی کلیک کن و end رو بزن تا بسته بشه .

هر قسمت از کد رو نفهمیدی بگو برات توضیح بدم .


Private Const TH32CS_SNAPPROCESS = &H2
Const TH32CS_SNAPALL = &HF
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 Declare Sub ExitProcess Lib "kernel32" (ByVal uExitCode As Long)
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long

Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function CreateToolhelp32Snapshot Lib "kernel32.dll" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long
Private Declare Function Process32First Lib "kernel32.dll" (ByVal hSnapshot As Long, Uprocess As PROCESSENTRY32) As Long
Private Declare Function Process32Next Lib "kernel32.dll" (ByVal hSnapshot As Long, Uprocess As PROCESSENTRY32) As Long
Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long
Const PROCESS_ALL_ACCESS = &H1F0FFF
Dim p As PROCESSENTRY32

Private Sub Command1_Click()
Dim h As Long
Dim exename As String
Dim O As Long
List1.Clear
h = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0)
p.dwSize = Len(p)

s = Process32First(h, p)
List1.AddItem p.szExeFile
While s <> 0
exename = Left(p.szExeFile, InStr(p.szExeFile, vbNullChar) - 1)
If UCase(exename) = UCase(Text1.Text) Then
O = OpenProcess(PROCESS_ALL_ACCESS, 0&, p.th32ProcessID)
TerminateProcess O, 0&
End If
s = Process32Next(h, p)
List1.AddItem exename
Wend
CloseHandle h
End Sub

Private Sub Form_Load()
Dim h As Long
Dim exename As String
Dim O As Long
List1.Clear
h = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0)
p.dwSize = Len(p)

s = Process32First(h, p)
List1.AddItem p.szExeFile
While s <> 0
exename = Left(p.szExeFile, InStr(p.szExeFile, vbNullChar) - 1)

s = Process32Next(h, p)
List1.AddItem exename
Wend
CloseHandle h
End Sub

Private Sub List1_Click()
Text1.Text = List1.List(List1.ListIndex)
End Sub

دوست عزیز هر کاری کردم فایل upload نشد کدش رو گذاشتم شما یک listbox یک textbox و یک کامند بزار رو صفحه و کد رو کپی کن داخل برنامه .

just4froum
جمعه 01 مهر 1390, 14:57 عصر
با سلام و تشکر از جناب setroyd

فقط دوستان pdf یا هر نوع آموزشی که در رابطه با wmi باشه ندارید ؟؟؟ چون من اطلاعات زیادی در این باره ندارم ولی دوست دارم یاد بگیرم. تو گوگل هم چیز درست حسابی پیدا نکردم !!!

بازم ممنونم.

setroyd
جمعه 01 مهر 1390, 15:27 عصر
نیازی نداره به wmi شما api رو یاد بگیر که هم راه استاندارد تریه و هم بهتر و راحت تره و از سرعت بیشتری برخورد داره .

محسن واژدی
شنبه 02 مهر 1390, 08:01 صبح
با سلام و تشکر از جناب setroyd

فقط دوستان pdf یا هر نوع آموزشی که در رابطه با wmi باشه ندارید ؟؟؟ چون من اطلاعات زیادی در این باره ندارم ولی دوست دارم یاد بگیرم. تو گوگل هم چیز درست حسابی پیدا نکردم !!!

بازم ممنونم.

سلام علیکم
صفحات زیر را بررسی کنید
http://msdn.microsoft.com/en-us/library/aa393964%28v=VS.85%29.aspx

بانک نمونه های WMI
http://msdn.microsoft.com/en-us/library/aa394585%28v=VS.85%29.aspx

موفق باشید