شاید همیشه براتون مهم بوده باشه که بدونید taskmgr ویندوز چطوری ساخته شده و بخواید خودتون با اون رو خودتون بسازید
البته تو این یکی موضوع برنامه های قوی زیاد داریم که قوی ترین اونها process hacker هستش
برای ساختن یک Taskmanager می تونیم از هم کد های خود vb.net ( Getprocess ) استفاده کنیم هم از Win32_class فرقی نداره
هر دو گزینه رو شرح می دم
اول از همه یک متغیر از نوع process تعریف می کنیم
کد:Dim process as new process()حالا با استفاده از حلقه For each میایم حلقه ای رئ ایجاد می کنیم که پروسه ها در یک لیست باکس بیوفتن
کد:For Each a In process.GetProcesses() On Error Resume Next lstProcesses.Items.Add(a.ProcessName) lstProcesses.Items(0).SubItems.Add(a.Id.ToString()) count += 1 Nextخط اول که همون حلقه هست
خط دوم رو میزاریم که اگه یکی از مشخصات پروسه ها نبودند برنامه بخاطرش متوقف نشه خطا بده
خط سوم میاد نام پروسه ها رو در listview می اندازه
خط چهارم اوومدم ID مربوط به پروسه رو هم در column بعدی اون listview آورددم
ما می تونیم از طریق این متغیر a که شامل لیست پروسه ها میشه دیگر جزئیات مربوط به اون رو که نمونش همین ID هست یا همون PID رو بدست بیاریم
اما از property های اون می تونیم این موارد زیر رو هم بهش اضافه کنیم
a.Container
a.ExitCode
a.ExitTime
a.Handle
a.HasExited
a.Id
a.MachineName
a.MainModule
a.MainWindowTitle
a.PriorityBoostEnabled
a.PriorityClass
a.ProcessName
a.Responding
a.SessionId
a.Site
a.StandardError
a.StandardInput
a.StandardOutput
a.StartInfo
a.StartTime
a.Threadsحالا می خوایم از لیست وقتی یکی از پروسه ها رو انتخاب می کنیم اون رو end کنیم
خوب کد زیر رو بکار می بریم
کد:For Each Process As ListViewItem In lstProcesses.SelectedItems System.Diagnostics.Process.GetProcessById(lstProcesses.SelectedItems(0).SubItems(1).Text()).Kill() Nextاین کد باید داخل یک دکمه با اسم مثلا end process بزارید دقت کنیم من گفتم که id پروسه ی انتخابی در لیست باکس رو end کن
اما اگر کمی هم فکر کنیم ایده های جالبی به نظرمون میاد
مثلا یادم میاد خیلی وقت پیش یکی از دوستان که صاحب کافی نت بود می گفت من هر کاری می کنم باز این ملت taskmanager رو بالا میارن منم اومدم براش یک کار خیلی کوچیکی انجام دادم
کد زیر رو براش نوشتم و اونرو د ر اصل در وسط حلقه زدم
کد:If a.ProcessName = "Taskmgr.exe" Or p.ProcessName = "Taskmgr" Then a.Kill() End Ifاینجا میگه که اگر پروسه ای با اسم taskmgr اجرا شد اون رو فورا kill کن
البته هرچند این کار باعث شد سیستم اون بنده خدا هنگ کنه . ولی برای خودم جالب بود
همچنین شما می تونید از این کد برای Start کردن یک process استفاده کنید
کد:Process.Start("nameprose.exe")=================================================
=================================================روش بعدی هم که از طریق WMI ویندوز هست
که در اینجا بهش اشاره کردیم
استفاده از رفرنس زیر
کد:Imports System.Managementانتخاب متود مورد نظر از طریق زبان WQL و انتصاب اون به متغیر
کد:Dim strLocal_service As String = "SELECT * FROM Win32_process"تعریف این متغیر از نوع ابجکت ManagementObjectSearcher
کد:Dim sysservice_Searcher As New ManagementObjectSearcher(strLocal_service)و استفاده از حلقه for each جهت لیست کردن نام پروسه ها
کد:Dim i As Integer For Each servicelist As ManagementObject In sysservice_Searcher.Get() lstProcesses.Items.Add(servicelist("name").ToString) i = i + 1 Nextدیگر property های مربوط به این کلاس رو تو لیست زیر مشاهده می کنید .
string Caption;
string CommandLine;
string CreationClassName;
datetime CreationDate;
string CSCreationClassName;
string CSName;
string De******ion;
string ExecutablePath;
uint16 ExecutionState;
string Handle;
uint32 HandleCount;
datetime InstallDate;
uint64 KernelModeTime;
uint32 MaximumWorkingSetSize;
uint32 MinimumWorkingSetSize;
string Name;
string OSCreationClassName;
string OSName;
uint64 OtherOperationCount;
uint64 OtherTransferCount;
uint32 PageFaults;
uint32 PageFileUsage;
uint32 ParentProcessId;
uint32 PeakPageFileUsage;
uint64 PeakVirtualSize;
uint32 PeakWorkingSetSize;
uint32 Priority;
uint64 PrivatePageCount;
uint32 ProcessId;
uint32 QuotaNonPagedPoolUsage;
uint32 QuotaPagedPoolUsage;
uint32 QuotaPeakNonPagedPoolUsage;
uint32 QuotaPeakPagedPoolUsage;
uint64 ReadOperationCount;
uint64 ReadTransferCount;
uint32 SessionId;
string Status;
datetime TerminationDate;
uint32 ThreadCount;
uint64 UserModeTime;
uint64 VirtualSize;
string WindowsVersion;
uint64 WorkingSetSize;
uint64 WriteOperationCount;
uint64 WriteTransferCount;کمی کامل تر هست این کلاس ها همیشه