شاید همیشه براتون مهم بوده باشه که بدونید taskmgr ویندوز چطوری ساخته شده و بخواید خودتون با اون رو خودتون بسازید
البته تو این یکی موضوع برنامه های قوی زیاد داریم که قوی ترین اونها process hacker هستش
برای ساختن یک Taskmanager Ù…ÛŒ تونیم از هم کد های خود vb.net ( Getprocess ) استÙاده کنیم هم از Win32_class Ùرقی نداره
هر دو گزینه رو Ø´Ø±Ø Ù…ÛŒ دم
اول از همه یک متغیر از نوع process تعری٠می کنیم
Øالا با استÙاده از Øلقه For each میایم Øلقه ای رئ ایجاد Ù…ÛŒ کنیم Ú©Ù‡ پروسه ها در یک لیست باکس بیوÙتن
خط اول Ú©Ù‡ همون Øلقه هست
خط دوم رو میزاریم که اگه یکی از مشخصات پروسه ها نبودند برنامه بخاطرش متوق٠نشه خطا بده
خط سوم میاد نام پروسه ها رو در 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 کنیم
خوب کد زیر رو بکار می بریم
این کد باید داخل یک دکمه با اسم مثلا end process بزارید دقت کنیم من Ú¯Ùتم Ú©Ù‡ id پروسه ÛŒ انتخابی در لیست باکس رو end Ú©Ù†
اما اگر Ú©Ù…ÛŒ هم Ùکر کنیم ایده های جالبی به نظرمون میاد
مثلا یادم میاد خیلی وقت پیش ( این به این معنیه Ú©Ù‡ من خیلی وقته اینا رو Ù…ÛŒ دونم ) یکی از دوستان Ú©Ù‡ صاØب کاÙÛŒ نت بود Ù…ÛŒ Ú¯Ùت من هر کاری Ù…ÛŒ کنم باز این ملت taskmanager رو بالا میارن منم اومدم براش یک کار خیلی کوچیکی انجام دادم
کد زیر رو براش نوشتم Ùˆ اونرو د ر اصل در وسط Øلقه زدم
اینجا میگه Ú©Ù‡ اگر پروسه ای با اسم taskmgr اجرا شد اون رو Ùورا kill Ú©Ù†
البته هرچند این کار باعث شد سیستم اون بنده خدا هنگ کنه ولی برای خودم جالب بود
همچنین شما Ù…ÛŒ تونید از این کد برای Start کردن یک process استÙاده کنید
=================================================
=================================================
روش بعدی هم که از طریق WMI ویندوز هست
که در اینجا بهش اشاره کردیم
استÙاده از رÙرنس زیر
انتخاب متود مورد نظر از طریق زبان WQL و انتصاب اون به متغیر
تعری٠این متغیر از نوع ابجکت ManagementObjectSearcher
Ùˆ استÙاده از Øلقه for each جهت لیست کردن نام پروسه ها
دیگر 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;
کمی کامل تر هست این کلاس ها همیشه
سوالی بود بپرسید تا گرمم
البته تو این یکی موضوع برنامه های قوی زیاد داریم که قوی ترین اونها 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
خوب کد زیر رو بکار می بریم
کد:
For Each Process As ListViewItem In lstProcesses.SelectedItems System.Diagnostics.Process.GetProcessById(lstProcesses.SelectedItems(0).SubItems(1).Text()).Kill() Next
اما اگر Ú©Ù…ÛŒ هم Ùکر کنیم ایده های جالبی به نظرمون میاد
مثلا یادم میاد خیلی وقت پیش ( این به این معنیه Ú©Ù‡ من خیلی وقته اینا رو Ù…ÛŒ دونم ) یکی از دوستان Ú©Ù‡ صاØب کاÙÛŒ نت بود Ù…ÛŒ Ú¯Ùت من هر کاری Ù…ÛŒ کنم باز این ملت taskmanager رو بالا میارن منم اومدم براش یک کار خیلی کوچیکی انجام دادم
کد زیر رو براش نوشتم Ùˆ اونرو د ر اصل در وسط Øلقه زدم
کد:
If a.ProcessName = "Taskmgr.exe" Or p.ProcessName = "Taskmgr" Then a.Kill() End If
البته هرچند این کار باعث شد سیستم اون بنده خدا هنگ کنه ولی برای خودم جالب بود
همچنین شما Ù…ÛŒ تونید از این کد برای Start کردن یک process استÙاده کنید
کد:
Process.Start("nameprose.exe")
=================================================
=================================================
روش بعدی هم که از طریق WMI ویندوز هست
که در اینجا بهش اشاره کردیم
استÙاده از رÙرنس زیر
کد:
Imports System.Management
کد:
Dim strLocal_service As String = "SELECT * FROM Win32_process"
کد:
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
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;
کمی کامل تر هست این کلاس ها همیشه
سوالی بود بپرسید تا گرمم