الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تعالوا نعمل معا Task Manager بسيط وبسرعة

بدأه محمد سامر أبو سلو في 26 سبتمبر 2008 · 6 رد · 1,114 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

لفت انتباهي سؤال لأحد الإخوة في أحد المنتديات حول إنهاء مهمة لذا قررت عمل البريمج التالي من باب التسلية وأحببت مشاركتكم به

- أي نسخة من فيجول ستوديو 2008 ستعمل معنا حتى الـ Express

- أنشئ مشروعا جديدا وسمه ما تشاء

- ضع على النموذج DataGridView وأبق على الاسم الافتراضي DataGridView1 إذا أحببت المتابعة بتسمياتي

- ضع زرين أسفل الـ DataGridView وأعط لأحدهما اسما btnFill واجعل الخاصية Text مساوية لـ Fill و الآخر سمه btnKill واجعل الخاصية Text مساوية لـ Kill

- افتح خصائص MyProject و من الصفحة Application اضغط زر view UAC settings وفي محرر الكود الذي يظهر لك استبدل السطر

requestedExecutionLevel  level="asInvoker" uiAccess="false"

بالسطر

<requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />

ثم قم بالحفظ

- في محرر الكود للنموذج Form1 أدخل الكود التالي الذي سيكون هو الكود الكامل لبرنامجنا

Public Class Form1

	Private Bs As New BindingSource

	Private Sub btnFill_Click() Handles btnFill.Click
		Me.DataGridView1.DataSource = Bs
		Dim pr = From a In Process.GetProcesses _
				 Order By a.ProcessName _
				 Select a.Id, a.ProcessName, a.MainWindowTitle, _
				 HandlesCount = a.HandleCount, ThreadsCount = a.Threads.Count

		Me.Bs.DataSource = pr
	End Sub

	Private Sub btnKill_Click() Handles btnKill.Click
		Dim pra = Bs.Current
		Dim prk = From a In Process.GetProcesses _
				  Where a.Id = pra.Id _
				  And a.MainWindowTitle = pra.MainWindowTitle _
				  Select a

		For Each p In prk
			p.Kill()
		Next

		btnFill_Click()
	End Sub

End Class

- في البداية عرفنا متغيرا Bs من النوع BindingSource الذي سنستخدمه لربط نتيجة الاستعلام مع DataGridView

- في كود الزر Fill قمنا بربط Bs مع DatagridView ثم كتبنا استعلام Linq ليجلب لنا الحقول التي نريدها من ناتج الطريقة Process.GetProcesses وقمنا بالترتيب حسب ProcessName ثم اخترنا الحقول التي نرغب بإظهارها في شبكة البيانات ثم قمنا بضبط قيمة الخاصية DataSource إلى استعلامنا Pr مما سيسبب إظهار نتيجة الاستعلام في شبكة البيانات

- في كود الزر Kill جلبنا أولا قيمة السطر الذي يقف عنده المؤشر في شبكة البيانات بالحصول على قيمة الخاصية Current لـ Bs ثم كتبنا استعلاما شبيها بالسابق يجلب لنا العمليات التي توافق شرطنا بحيث يكون ID و MainWindowTitle مطابقان ثم قمنا بالدوران خلال نتائج الاستعلام عبر حلقة For ... Each واستخدمنا الطريقة kill لإنهاء العمليات التي يعيدها الاستعلام

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#2

وهذا تعديل أيضا على البرنامج

إذا أردنا إضافة زر إخفاء وإظهار للنافذة الرئيسية للبرنامج - العملية - أضف زرين للنموذج باسم btnHide و btnShow كما يلي

ثم في قسم التصريحات العامة ضمن الفئة Form1 اضف التصريحات التالية

	Public Declare Auto Function ShowWindow Lib "user32" _
				(ByVal hwnd As Integer, ByVal nCmdShow As Integer) As Integer

	Public Const SW_HIDE = 0
	Public Const SW_SHOW = 5
	Public Const SW_SHOWNA = 8
	Public Const SW_SHOWNORMAL = 1

ويكون كود زري الإظهار والإخفاء

	Private Sub btnHide_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnHide.Click
		Dim pra = Bs.Current
		Dim prk = From a In Process.GetProcesses _
				  Where a.Id = pra.Id _
				  And a.MainWindowTitle = pra.MainWindowTitle _
				  Select a

		For Each p In prk
			ShowWindow(p.MainWindowHandle, SW_HIDE)
		Next

		btnFill_Click()

	End Sub

	Private Sub btnShow_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnShow.Click
		Dim pra = Bs.Current
		Dim prk = From a In Process.GetProcesses _
				  Where a.Id = pra.Id _
				  And a.MainWindowTitle = pra.MainWindowTitle _
				  Select a

		For Each p In prk
			ShowWindow(p.MainWindowHandle, SW_SHOW)
		Next

		btnFill_Click()
	End Sub

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#3

الله يفرج همك وهو القادر على ذلك سبحانه أسأل الله أن يهدينا إلى سواء السبيل وشكراً يا استاذ محمد

#4

تعديل آخر على البرنامج

من أجل نقل التركيز لتطبيق معين

نحتاج إلى التعريفات التالية

Public Declare Auto Function SetForegroundWindow Lib "user32" (ByVal hwnd As Integer) As Boolean

ونضيف زر باسم SetFocus يكون كوده كما يلي

	Private Sub btnSetfocus_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSetfocus.Click
		Dim pra = Bs.Current
		Dim prk = From a In Process.GetProcesses _
				  Where a.Id = pra.Id _
				  And a.MainWindowTitle = pra.MainWindowTitle _
				  Select a

		For Each p In prk
			SetForegroundWindow(p.MainWindowHandle)
		Next
		btnFill_Click()
	End Sub

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#5

مرفق كود المشروع كاملا حتى الآن

SimpleTaskManager.zip

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#6

رائع أخي محمد ..

أشكرك.

لي سؤال ... هل من طريقة لإظهار ال Process Owner ... يعني System ... User الخ

It's hard to stay in such ridiculous situation

#7

لاحظ الاستعلام التالي في بداية موضوعي

Dim pr = From a In Process.GetProcesses _
				 Order By a.ProcessName _
				 Select a.Id, a.ProcessName, a.MainWindowTitle, _
				 HandlesCount = a.HandleCount, ThreadsCount = a.Threads.Count

أنا اخترت الحقول التي أرغب في إظهارها يمكنك تعديل الاستعلام لتظهر أي معلومات تريدها طالما أن نظام التشغيل لايمنعك من الحصول على تلك المعلومات

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

مواضيع مشابهة