شاید همیشه براتون مهم بوده باشه که بدونید 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;

کمی کامل تر هست این کلاس ها همیشه